@xwiki/cristal-electron-main 0.10.0 → 0.11.0

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.cjs CHANGED
@@ -1,2 +1,31 @@
1
- "use strict";const r=require("electron"),u=require("node:url"),s=require("node:path"),P=require("node:process"),a=require("node:fs"),f=new Map([]),E=new Set(["https://github.com"]);r.app.on("web-contents-created",(e,n)=>{n.on("will-navigate",(t,i)=>{const{origin:o}=new u.URL(i);f.has(o)||t.preventDefault()}),n.session.setPermissionRequestHandler((t,i,o)=>{const{origin:l}=new u.URL(t.getURL()),d=!!f.get(l)?.has(i);o(d)}),n.setWindowOpenHandler(({url:t})=>{const{origin:i}=new u.URL(t);return E.has(i)&&r.shell.openExternal(t).catch(console.error),{action:"deny"}}),n.on("will-attach-webview",(t,i,o)=>{const{origin:l}=new u.URL(o.src);if(!f.has(l)){t.preventDefault();return}delete i.preload,delete i.preloadURL,i.nodeIntegration=!1,i.contextIsolation=!0})});async function L(){const e=new r.BrowserWindow({show:!1,webPreferences:{nodeIntegration:!1,contextIsolation:!0,sandbox:!1,webviewTag:!1,preload:s.join(r.app.getAppPath(),"./preload/dist/index.cjs")}});return e.webContents.setWindowOpenHandler(({url:n})=>(r.shell.openExternal(n),{action:"deny"})),e.on("ready-to-show",()=>{e?.show()}),await e.loadFile(s.resolve(r.app.getAppPath(),"./renderer/dist/index.html")),e}async function h(){let e=r.BrowserWindow.getAllWindows().find(n=>!n.isDestroyed());return e===void 0&&(e=await L()),e.isMinimized()&&e.restore(),e.focus(),e}const m=".cristal",c=s.join(r.app.getPath("home"),m);function w(e,...n){const t=r.app.getPath("home");return s.join(t,m,e,...n)}function M(e){return w(e,"page.json")}function O(e){return w(e,"attachments")}function W(e,n){return w(e,"attachments",n)}async function g(e){let n;try{n=await a.promises.lstat(e)}catch(t){console.debug(t)}return n?.isFile()}async function v(e){let n;try{n=await a.promises.lstat(e)}catch(t){console.debug(t)}return n?.isDirectory()}async function x(e){try{await a.promises.lstat(e)}catch{return!1}return!0}async function y(e){if(!await p(c,e))throw new Error(`[${e}] is not in in [${c}]`);if(await g(e)){const n=await a.promises.readFile(e);return JSON.parse(n.toString("utf8"))}else return}async function R(e){if(!await p(c,e))throw new Error(`[${e}] is not in in [${c}]`);if(await v(e))return(await a.promises.readdir(e)).map(t=>({id:t,mimetype:"",reference:t,href:t}))}async function p(e,n){const t=s.relative(e,n);return!t.startsWith("../")&&t!==".."}async function S(e,n,t){if(!await p(c,e))throw new Error(`[${e}] is not in in [${c}]`);let i;if(await x(e)&&await g(e)){const d=await a.promises.readFile(e),A=new TextDecoder("utf-8");i=JSON.parse(A.decode(d)),i.source=n,i.name=t}else i={name:t,source:n,syntax:"markdown/1.2"};const o=JSON.stringify(i,null,2),l=s.dirname(e);return await a.promises.mkdir(l,{recursive:!0}),await a.promises.writeFile(e,o,{flag:"w+"}),y(e)}async function $(e,n){if(!await p(c,e))throw new Error(`[${e}] is not in in [${c}]`);const t=s.dirname(e);await a.promises.mkdir(t,{recursive:!0}),await a.promises.copyFile(n,e)}async function D(e){const n=w(e).replace("/page.json",""),t=[],i=await a.promises.readdir(n);for(const o of i){const l=`${n}/${o}`;await v(l)&&t.push(o)}return t}function F(){r.ipcMain.handle("resolvePath",(e,{page:n})=>M(n)),r.ipcMain.handle("resolveAttachmentsPath",(e,{page:n})=>O(n)),r.ipcMain.handle("readPage",(e,{path:n})=>y(n)),r.ipcMain.handle("readAttachments",(e,{path:n})=>R(n)),r.ipcMain.handle("savePage",(e,{path:n,content:t,title:i})=>S(n,t,i)),r.ipcMain.handle("resolveAttachmentPath",(e,{page:n,filename:t})=>W(n,t)),r.ipcMain.handle("saveAttachment",(e,{path:n,filePath:t})=>$(n,t)),r.ipcMain.handle("listChildren",(e,{page:n})=>D(n))}function I(e){e.loadFile(s.resolve(r.app.getAppPath(),"./renderer/dist/index.html"))}function _(e){r.ipcMain.handle("reloadBrowser",()=>I(e))}const q=r.app.requestSingleInstanceLock();q||(r.app.quit(),process.exit(0));r.app.on("second-instance",h);r.app.disableHardwareAcceleration();r.app.on("window-all-closed",()=>{P.platform!=="darwin"&&r.app.quit()});r.app.whenReady().then(()=>{F(),h().then(e=>_(e)),r.app.on("activate",()=>{r.BrowserWindow.getAllWindows().length===0&&h()})}).catch(e=>console.error("Failed create window:",e));r.app.whenReady().then(()=>require("electron-updater").autoUpdater.checkForUpdatesAndNotify()).catch(e=>console.error("Failed check and install updates:",e));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9zcmMvc2VjdXJpdHktcmVzdHJpY3Rpb25zLnRzIiwiLi4vc3JjL21haW5XaW5kb3cudHMiLCIuLi8uLi9zdG9yYWdlL3NyYy9lbGVjdHJvbi9tYWluL2luZGV4LnRzIiwiLi4vLi4vYnJvd3Nlci9zcmMvZWxlY3Ryb24vbWFpbi9pbmRleC50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhcHAsIHNoZWxsIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuLyoqXG4gKiBVbmlvbiBmb3IgYWxsIGV4aXN0aW5nIHBlcm1pc3Npb25zIGluIGVsZWN0cm9uXG4gKi9cbnR5cGUgUGVybWlzc2lvbiA9IFBhcmFtZXRlcnM8XG4gIEV4Y2x1ZGU8UGFyYW1ldGVyczxTZXNzaW9uW1wic2V0UGVybWlzc2lvblJlcXVlc3RIYW5kbGVyXCJdPlswXSwgbnVsbD5cbj5bMV07XG5cbi8qKlxuICogQSBsaXN0IG9mIG9yaWdpbnMgdGhhdCB5b3UgYWxsb3cgb3BlbiBJTlNJREUgdGhlIGFwcGxpY2F0aW9uIGFuZCBwZXJtaXNzaW9ucyBmb3IgdGhlbS5cbiAqXG4gKiBJbiBkZXZlbG9wbWVudCBtb2RlIHlvdSBuZWVkIGFsbG93IG9wZW4gYFZJVEVfREVWX1NFUlZFUl9VUkxgLlxuICovXG5jb25zdCBBTExPV0VEX09SSUdJTlNfQU5EX1BFUk1JU1NJT05TID0gbmV3IE1hcDxzdHJpbmcsIFNldDxQZXJtaXNzaW9uPj4oXG4gIGltcG9ydC5tZXRhLmVudi5ERVYgJiYgaW1wb3J0Lm1ldGEuZW52LlZJVEVfREVWX1NFUlZFUl9VUkxcbiAgICA/IFtbbmV3IFVSTChpbXBvcnQubWV0YS5lbnYuVklURV9ERVZfU0VSVkVSX1VSTCkub3JpZ2luLCBuZXcgU2V0KCldXVxuICAgIDogW10sXG4pO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBvcmlnaW5zIHRoYXQgeW91IGFsbG93IG9wZW4gSU4gQlJPV1NFUi5cbiAqIE5hdmlnYXRpb24gdG8gdGhlIG9yaWdpbnMgYmVsb3cgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgbGluayBvcGVucyBpbiBhIG5ldyB3aW5kb3cuXG4gKlxuICogQGV4YW1wbGVcbiAqIDxhXG4gKiAgIHRhcmdldD1cIl9ibGFua1wiXG4gKiAgIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vXCJcbiAqID5cbiAqL1xuY29uc3QgQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TID0gbmV3IFNldDxgaHR0cHM6Ly8ke3N0cmluZ31gPihbXG4gIFwiaHR0cHM6Ly9naXRodWIuY29tXCIsXG5dKTtcblxuYXBwLm9uKFwid2ViLWNvbnRlbnRzLWNyZWF0ZWRcIiwgKF8sIGNvbnRlbnRzKSA9PiB7XG4gIC8qKlxuICAgKiBCbG9jayBuYXZpZ2F0aW9uIHRvIG9yaWdpbnMgbm90IG9uIHRoZSBhbGxvd2xpc3QuXG4gICAqXG4gICAqIE5hdmlnYXRpb24gZXhwbG9pdHMgYXJlIHF1aXRlIGNvbW1vbi4gSWYgYW4gYXR0YWNrZXIgY2FuIGNvbnZpbmNlIHRoZSBhcHAgdG8gbmF2aWdhdGUgYXdheSBmcm9tIGl0cyBjdXJyZW50IHBhZ2UsXG4gICAqIHRoZXkgY2FuIHBvc3NpYmx5IGZvcmNlIHRoZSBhcHAgdG8gb3BlbiBhcmJpdHJhcnkgd2ViIHJlc291cmNlcy93ZWJzaXRlcyBvbiB0aGUgd2ViLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L3R1dG9yaWFsL3NlY3VyaXR5IzEzLWRpc2FibGUtb3ItbGltaXQtbmF2aWdhdGlvblxuICAgKi9cbiAgY29udGVudHMub24oXCJ3aWxsLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XG4gICAgY29uc3QgeyBvcmlnaW4gfSA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAoQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUy5oYXMob3JpZ2luKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgbmF2aWdhdGlvblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKGBCbG9ja2VkIG5hdmlnYXRpbmcgdG8gZGlzYWxsb3dlZCBvcmlnaW46ICR7b3JpZ2lufWApO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEJsb2NrIHJlcXVlc3RzIGZvciBkaXNhbGxvd2VkIHBlcm1pc3Npb25zLlxuICAgKiBCeSBkZWZhdWx0LCBFbGVjdHJvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwcm92ZSBhbGwgcGVybWlzc2lvbiByZXF1ZXN0cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSM1LWhhbmRsZS1zZXNzaW9uLXBlcm1pc3Npb24tcmVxdWVzdHMtZnJvbS1yZW1vdGUtY29udGVudFxuICAgKi9cbiAgY29udGVudHMuc2Vzc2lvbi5zZXRQZXJtaXNzaW9uUmVxdWVzdEhhbmRsZXIoXG4gICAgKHdlYkNvbnRlbnRzLCBwZXJtaXNzaW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgeyBvcmlnaW4gfSA9IG5ldyBVUkwod2ViQ29udGVudHMuZ2V0VVJMKCkpO1xuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uR3JhbnRlZCA9XG4gICAgICAgICEhQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUy5nZXQob3JpZ2luKT8uaGFzKHBlcm1pc3Npb24pO1xuICAgICAgY2FsbGJhY2socGVybWlzc2lvbkdyYW50ZWQpO1xuXG4gICAgICBpZiAoIXBlcm1pc3Npb25HcmFudGVkICYmIGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGAke29yaWdpbn0gcmVxdWVzdGVkIHBlcm1pc3Npb24gZm9yICcke3Blcm1pc3Npb259JywgYnV0IHdhcyByZWplY3RlZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIEh5cGVybGlua3MgbGVhZGluZyB0byBhbGxvd2VkIHNpdGVzIGFyZSBvcGVuZWQgaW4gdGhlIGRlZmF1bHQgYnJvd3Nlci5cbiAgICpcbiAgICogVGhlIGNyZWF0aW9uIG9mIG5ldyBgd2ViQ29udGVudHNgIGlzIGEgY29tbW9uIGF0dGFjayB2ZWN0b3IuIEF0dGFja2VycyBhdHRlbXB0IHRvIGNvbnZpbmNlIHRoZSBhcHAgdG8gY3JlYXRlIG5ldyB3aW5kb3dzLFxuICAgKiBmcmFtZXMsIG9yIG90aGVyIHJlbmRlcmVyIHByb2Nlc3NlcyB3aXRoIG1vcmUgcHJpdmlsZWdlcyB0aGFuIHRoZXkgaGFkIGJlZm9yZTsgb3Igd2l0aCBwYWdlcyBvcGVuZWQgdGhhdCB0aGV5IGNvdWxkbid0IG9wZW4gYmVmb3JlLlxuICAgKiBZb3Ugc2hvdWxkIGRlbnkgYW55IHVuZXhwZWN0ZWQgd2luZG93IGNyZWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L3R1dG9yaWFsL3NlY3VyaXR5IzE0LWRpc2FibGUtb3ItbGltaXQtY3JlYXRpb24tb2YtbmV3LXdpbmRvd3NcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSMxNS1kby1ub3QtdXNlLW9wZW5leHRlcm5hbC13aXRoLXVudHJ1c3RlZC1jb250ZW50XG4gICAqL1xuICBjb250ZW50cy5zZXRXaW5kb3dPcGVuSGFuZGxlcigoeyB1cmwgfSkgPT4ge1xuICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBuZXcgVVJMKHVybCk7XG5cbiAgICBpZiAoQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TLmhhcyhvcmlnaW4gYXMgYGh0dHBzOi8vJHtzdHJpbmd9YCkpIHtcbiAgICAgIC8vIE9wZW4gdXJsIGluIGRlZmF1bHQgYnJvd3Nlci5cbiAgICAgIHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKGBCbG9ja2VkIHRoZSBvcGVuaW5nIG9mIGEgZGlzYWxsb3dlZCBvcmlnaW46ICR7b3JpZ2lufWApO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgY3JlYXRpbmcgYSBuZXcgd2luZG93LlxuICAgIHJldHVybiB7IGFjdGlvbjogXCJkZW55XCIgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB3ZWJ2aWV3IG9wdGlvbnMgYmVmb3JlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBTdHJpcCBhd2F5IHByZWxvYWQgc2NyaXB0cywgZGlzYWJsZSBOb2RlLmpzIGludGVncmF0aW9uLCBhbmQgZW5zdXJlIG9yaWdpbnMgYXJlIG9uIHRoZSBhbGxvd2xpc3QuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvdHV0b3JpYWwvc2VjdXJpdHkjMTItdmVyaWZ5LXdlYnZpZXctb3B0aW9ucy1iZWZvcmUtY3JlYXRpb25cbiAgICovXG4gIGNvbnRlbnRzLm9uKFwid2lsbC1hdHRhY2gtd2Vidmlld1wiLCAoZXZlbnQsIHdlYlByZWZlcmVuY2VzLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gbmV3IFVSTChwYXJhbXMuc3JjKTtcbiAgICBpZiAoIUFMTE9XRURfT1JJR0lOU19BTkRfUEVSTUlTU0lPTlMuaGFzKG9yaWdpbikpIHtcbiAgICAgIGlmIChpbXBvcnQubWV0YS5lbnYuREVWKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQSB3ZWJ2aWV3IHRyaWVkIHRvIGF0dGFjaCAke3BhcmFtcy5zcmN9LCBidXQgd2FzIGJsb2NrZWQuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBhd2F5IHByZWxvYWQgc2NyaXB0cyBpZiB1bnVzZWQgb3IgdmVyaWZ5IHRoZWlyIGxvY2F0aW9uIGlzIGxlZ2l0aW1hdGUuXG4gICAgZGVsZXRlIHdlYlByZWZlcmVuY2VzLnByZWxvYWQ7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgcHJlbG9hZFVSTGAgZXhpc3RzLiAtIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL3dlYi1jb250ZW50cyNldmVudC13aWxsLWF0dGFjaC13ZWJ2aWV3XG4gICAgZGVsZXRlIHdlYlByZWZlcmVuY2VzLnByZWxvYWRVUkw7XG5cbiAgICAvLyBEaXNhYmxlIE5vZGUuanMgaW50ZWdyYXRpb25cbiAgICB3ZWJQcmVmZXJlbmNlcy5ub2RlSW50ZWdyYXRpb24gPSBmYWxzZTtcblxuICAgIC8vIEVuYWJsZSBjb250ZXh0SXNvbGF0aW9uXG4gICAgd2ViUHJlZmVyZW5jZXMuY29udGV4dElzb2xhdGlvbiA9IHRydWU7XG4gIH0pO1xufSk7XG4iLCIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHsgYXBwLCBCcm93c2VyV2luZG93LCBzaGVsbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2luZG93KCkge1xuICBjb25zdCBicm93c2VyV2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHNob3c6IGZhbHNlLCAvLyBVc2UgdGhlICdyZWFkeS10by1zaG93JyBldmVudCB0byBzaG93IHRoZSBpbnN0YW50aWF0ZWQgQnJvd3NlcldpbmRvdy5cbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IHRydWUsXG4gICAgICBzYW5kYm94OiBmYWxzZSwgLy8gU2FuZGJveCBkaXNhYmxlZCBiZWNhdXNlIHRoZSBkZW1vIG9mIHByZWxvYWQgc2NyaXB0IGRlcGVuZCBvbiB0aGUgTm9kZS5qcyBhcGlcbiAgICAgIHdlYnZpZXdUYWc6IGZhbHNlLCAvLyBUaGUgd2VidmlldyB0YWcgaXMgbm90IHJlY29tbWVuZGVkLiBDb25zaWRlciBhbHRlcm5hdGl2ZXMgbGlrZSBhbiBpZnJhbWUgb3IgRWxlY3Ryb24nc1xuICAgICAgLy8gQnJvd3NlclZpZXcuIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL3dlYnZpZXctdGFnI3dhcm5pbmdcbiAgICAgIHByZWxvYWQ6IGpvaW4oYXBwLmdldEFwcFBhdGgoKSwgXCIuL3ByZWxvYWQvZGlzdC9pbmRleC5janNcIiksXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVW5jb21tZW50IHRvIHN0YXJ0IGVsZWN0cm9uIGRlYnVnZ2VyIGF0IHN0YXJ0dXAuXG4gIC8vIGJyb3dzZXJXaW5kb3cud2ViQ29udGVudHMub3BlbkRldlRvb2xzKCk7XG5cbiAgLy8gQWxsb3dzIGZvciBleHRlcm5hbCBsaW5rcyB0byBvcGVuIGluIHRoZSBPUyBicm93c2VyLi5cbiAgYnJvd3NlcldpbmRvdy53ZWJDb250ZW50cy5zZXRXaW5kb3dPcGVuSGFuZGxlcigoeyB1cmwgfSkgPT4ge1xuICAgIHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJkZW55XCIgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIElmIHRoZSAnc2hvdycgcHJvcGVydHkgb2YgdGhlIEJyb3dzZXJXaW5kb3cncyBjb25zdHJ1Y3RvciBpcyBvbWl0dGVkIGZyb20gdGhlIGluaXRpYWxpemF0aW9uIG9wdGlvbnMsXG4gICAqIGl0IHRoZW4gZGVmYXVsdHMgdG8gJ3RydWUnLiBUaGlzIGNhbiBjYXVzZSBmbGlja2VyaW5nIGFzIHRoZSB3aW5kb3cgbG9hZHMgdGhlIGh0bWwgY29udGVudCxcbiAgICogYW5kIGl0IGFsc28gaGFzIHNob3cgcHJvYmxlbWF0aWMgYmVoYXZpb3VyIHdpdGggdGhlIGNsb3Npbmcgb2YgdGhlIHdpbmRvdy5cbiAgICogVXNlIGBzaG93OiBmYWxzZWAgYW5kIGxpc3RlbiB0byB0aGUgIGByZWFkeS10by1zaG93YCBldmVudCB0byBzaG93IHRoZSB3aW5kb3cuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsZWN0cm9uL2VsZWN0cm9uL2lzc3Vlcy8yNTAxMiBmb3IgdGhlIGFmZm9yZCBtZW50aW9uZWQgaXNzdWUuXG4gICAqL1xuICBicm93c2VyV2luZG93Lm9uKFwicmVhZHktdG8tc2hvd1wiLCAoKSA9PiB7XG4gICAgYnJvd3NlcldpbmRvdz8uc2hvdygpO1xuXG4gICAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgIGJyb3dzZXJXaW5kb3c/LndlYkNvbnRlbnRzLm9wZW5EZXZUb29scygpO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIG1haW4gcGFnZSBvZiB0aGUgbWFpbiB3aW5kb3cuXG4gICAqL1xuICBpZiAoXG4gICAgaW1wb3J0Lm1ldGEuZW52LkRFViAmJlxuICAgIGltcG9ydC5tZXRhLmVudi5WSVRFX0RFVl9TRVJWRVJfVVJMICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgLyoqXG4gICAgICogTG9hZCBmcm9tIHRoZSBWaXRlIGRldiBzZXJ2ZXIgZm9yIGRldmVsb3BtZW50LlxuICAgICAqL1xuICAgIGF3YWl0IGJyb3dzZXJXaW5kb3cubG9hZFVSTChpbXBvcnQubWV0YS5lbnYuVklURV9ERVZfU0VSVkVSX1VSTCk7XG4gIH0gZWxzZSB7XG4gICAgLyoqXG4gICAgICogTG9hZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSBmb3IgcHJvZHVjdGlvbiBhbmQgdGVzdC5cbiAgICAgKlxuICAgICAqIFVzZSBCcm93c2VyV2luZG93LmxvYWRGaWxlKCkgaW5zdGVhZCBvZiBCcm93c2VyV2luZG93LmxvYWRVUkwoKSBmb3IgV2hhdFdHIFVSTCBBUEkgbGltaXRhdGlvbnNcbiAgICAgKiB3aGVuIHBhdGggY29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgYCNgLlxuICAgICAqIExldCBlbGVjdHJvbiBoYW5kbGUgdGhlIHBhdGggcXVpcmtzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xMjY4MlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsZWN0cm9uL2VsZWN0cm9uL2lzc3Vlcy82ODY5XG4gICAgICovXG4gICAgYXdhaXQgYnJvd3NlcldpbmRvdy5sb2FkRmlsZShcbiAgICAgIHJlc29sdmUoYXBwLmdldEFwcFBhdGgoKSwgXCIuL3JlbmRlcmVyL2Rpc3QvaW5kZXguaHRtbFwiKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGJyb3dzZXJXaW5kb3c7XG59XG5cbi8qKlxuICogUmVzdG9yZSBhbiBleGlzdGluZyBCcm93c2VyV2luZG93IG9yIENyZWF0ZSBhIG5ldyBCcm93c2VyV2luZG93LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzdG9yZU9yQ3JlYXRlV2luZG93KCkge1xuICBsZXQgd2luZG93ID0gQnJvd3NlcldpbmRvdy5nZXRBbGxXaW5kb3dzKCkuZmluZCgodykgPT4gIXcuaXNEZXN0cm95ZWQoKSk7XG5cbiAgaWYgKHdpbmRvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgd2luZG93ID0gYXdhaXQgY3JlYXRlV2luZG93KCk7XG4gIH1cblxuICBpZiAod2luZG93LmlzTWluaW1pemVkKCkpIHtcbiAgICB3aW5kb3cucmVzdG9yZSgpO1xuICB9XG5cbiAgd2luZG93LmZvY3VzKCk7XG5cbiAgcmV0dXJuIHdpbmRvdztcbn1cbiIsIi8qXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqL1xuXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgaXBjTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBQYWdlQXR0YWNobWVudCwgUGFnZURhdGEgfSBmcm9tIFwiQHh3aWtpL2NyaXN0YWwtYXBpXCI7XG5cbmNvbnN0IEhPTUVfUEFUSCA9IFwiLmNyaXN0YWxcIjtcbmNvbnN0IEhPTUVfUEFUSF9GVUxMID0gam9pbihhcHAuZ2V0UGF0aChcImhvbWVcIiksIEhPTUVfUEFUSCk7XG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRoKHBhZ2U6IHN0cmluZywgLi4ubGFzdFNlZ21lbnRzOiBzdHJpbmdbXSkge1xuICBjb25zdCBob21lZGlyID0gYXBwLmdldFBhdGgoXCJob21lXCIpO1xuICByZXR1cm4gam9pbihob21lZGlyLCBIT01FX1BBVEgsIHBhZ2UsIC4uLmxhc3RTZWdtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYWdlUGF0aChwYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZVBhdGgocGFnZSwgXCJwYWdlLmpzb25cIik7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBdHRhY2htZW50c1BhdGgocGFnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVQYXRoKHBhZ2UsIFwiYXR0YWNobWVudHNcIik7XG59XG5mdW5jdGlvbiByZXNvbHZlQXR0YWNobWVudFBhdGgocGFnZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVQYXRoKHBhZ2UsIFwiYXR0YWNobWVudHNcIiwgZmlsZW5hbWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0ZpbGUocGF0aDogc3RyaW5nKSB7XG4gIGxldCBzdGF0ID0gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5sc3RhdChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZGVidWcoZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXQ/LmlzRmlsZSgpO1xufVxuYXN5bmMgZnVuY3Rpb24gaXNEaXJlY3RvcnkocGF0aDogc3RyaW5nKSB7XG4gIGxldCBzdGF0ID0gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5sc3RhdChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZGVidWcoZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXQ/LmlzRGlyZWN0b3J5KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMocGF0aDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMubHN0YXQocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQYWdlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8UGFnZURhdGEgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCEoYXdhaXQgaXNXaXRoaW4oSE9NRV9QQVRIX0ZVTEwsIHBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7cGF0aH1dIGlzIG5vdCBpbiBpbiBbJHtIT01FX1BBVEhfRlVMTH1dYCk7XG4gIH1cbiAgaWYgKGF3YWl0IGlzRmlsZShwYXRoKSkge1xuICAgIGNvbnN0IHBhZ2VDb250ZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGF0aCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocGFnZUNvbnRlbnQudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBdHRhY2htZW50cyhcbiAgcGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxQYWdlQXR0YWNobWVudFtdIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghKGF3YWl0IGlzV2l0aGluKEhPTUVfUEFUSF9GVUxMLCBwYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFske3BhdGh9XSBpcyBub3QgaW4gaW4gWyR7SE9NRV9QQVRIX0ZVTEx9XWApO1xuICB9XG4gIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYXRoKSkge1xuICAgIGNvbnN0IHBhZ2VDb250ZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihwYXRoKTtcbiAgICByZXR1cm4gcGFnZUNvbnRlbnQubWFwKChwYXRoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGF0aCxcbiAgICAgICAgbWltZXR5cGU6IFwiXCIsXG4gICAgICAgIHJlZmVyZW5jZTogcGF0aCxcbiAgICAgICAgaHJlZjogcGF0aCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpc1dpdGhpbihyb290OiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xuICBjb25zdCByZWwgPSByZWxhdGl2ZShyb290LCBwYXRoKTtcbiAgcmV0dXJuICFyZWwuc3RhcnRzV2l0aChcIi4uL1wiKSAmJiByZWwgIT09IFwiLi5cIjtcbn1cblxuLyoqXG4gKiBOb3RlOiBjdXJyZW50bHkgdGhpcyBpcyBtb3JlIGEgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgY29udGVudCBvZiBhIHBhZ2UgdGhhblxuICogYW4gYWN0dWFsIHBhZ2Ugc2F2ZS5cbiAqXG4gKiBAcGFyYW0gcGF0aCB0aGUgcGF0aCBvZiB0aGUgcGFnZSBvbiB0aGUgZmlsZSBzeXN0ZW1cbiAqIEBwYXJhbSBjb250ZW50IHRoZSBjb250ZW50IG9mIHRoZSBwYWdlXG4gKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBwYWdlXG4gKiBAc2luY2UgMC44XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhdmVQYWdlKFxuICBwYXRoOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdGl0bGU6IHN0cmluZyxcbik6IFByb21pc2U8UGFnZURhdGEgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCEoYXdhaXQgaXNXaXRoaW4oSE9NRV9QQVRIX0ZVTEwsIHBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7cGF0aH1dIGlzIG5vdCBpbiBpbiBbJHtIT01FX1BBVEhfRlVMTH1dYCk7XG4gIH1cbiAgbGV0IGpzb25Db250ZW50OiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN5bnRheD86IHN0cmluZztcbiAgfTtcbiAgaWYgKChhd2FpdCBwYXRoRXhpc3RzKHBhdGgpKSAmJiAoYXdhaXQgaXNGaWxlKHBhdGgpKSkge1xuICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGF0aCk7XG4gICAgY29uc3QgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcbiAgICBqc29uQ29udGVudCA9IEpTT04ucGFyc2UodGV4dERlY29kZXIuZGVjb2RlKGZpbGVDb250ZW50KSk7XG4gICAganNvbkNvbnRlbnQuc291cmNlID0gY29udGVudDtcbiAgICBqc29uQ29udGVudC5uYW1lID0gdGl0bGU7XG4gIH0gZWxzZSB7XG4gICAganNvbkNvbnRlbnQgPSB7XG4gICAgICBuYW1lOiB0aXRsZSxcbiAgICAgIHNvdXJjZTogY29udGVudCxcbiAgICAgIHN5bnRheDogXCJtYXJrZG93bi8xLjJcIixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbmV3SlNPTiA9IEpTT04uc3RyaW5naWZ5KGpzb25Db250ZW50LCBudWxsLCAyKTtcbiAgY29uc3QgcGFyZW50RGlyZWN0b3J5ID0gZGlybmFtZShwYXRoKTtcbiAgLy8gQ3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgaW4gY2FzZSB0aGV5IGRvIG5vdCBleGlzdC5cbiAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIocGFyZW50RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgLy8gU2V0IHRoZSBmbGFnIHRvIHcrIHNvIHRoYXQgdGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5XG4gIC8vIGV4aXN0LCBvciBmdWxseSByZXBsYWNlZCB3aGVuIGl0IGRvZXMuXG4gIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShwYXRoLCBuZXdKU09OLCB7IGZsYWc6IFwidytcIiB9KTtcbiAgcmV0dXJuIHJlYWRQYWdlKHBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlQXR0YWNobWVudChwYXRoOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgaWYgKCEoYXdhaXQgaXNXaXRoaW4oSE9NRV9QQVRIX0ZVTEwsIHBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7cGF0aH1dIGlzIG5vdCBpbiBpbiBbJHtIT01FX1BBVEhfRlVMTH1dYCk7XG4gIH1cbiAgY29uc3QgcGFyZW50RGlyZWN0b3J5ID0gZGlybmFtZShwYXRoKTtcblxuICAvLyBDcmVhdGUgdGhlIHBhcmVudCBkaXJlY3RvcmllcyBpbiBjYXNlIHRoZXkgZG8gbm90IGV4aXN0LlxuICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihwYXJlbnREaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBmcy5wcm9taXNlcy5jb3B5RmlsZShmaWxlUGF0aCwgcGF0aCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBpZHMgb2YgdGhlIGNoaWxkcmVuIHBhZ2VzIGZvciBhIGdpdmVuIHBhZ2UuXG4gKlxuICogQHBhcmFtIHBhZ2UgdGhlIGlkIG9mIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBhIGxpc3Qgb2YgcGFnZSBpZHNcbiAqIEBzaW5jZSAwLjEwXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxpc3RDaGlsZHJlbihwYWdlOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgY29uc3QgZm9sZGVyUGF0aCA9IHJlc29sdmVQYXRoKHBhZ2UpLnJlcGxhY2UoXCIvcGFnZS5qc29uXCIsIFwiXCIpO1xuXG4gIGNvbnN0IGNoaWxkcmVuID0gW107XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihmb2xkZXJQYXRoKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBwYXRoID0gYCR7Zm9sZGVyUGF0aH0vJHtmaWxlfWA7XG4gICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHBhdGgpKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZCgpOiB2b2lkIHtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZXNvbHZlUGF0aFwiLCAoZXZlbnQsIHsgcGFnZSB9KSA9PiB7XG4gICAgcmV0dXJuIHJlc29sdmVQYWdlUGF0aChwYWdlKTtcbiAgfSk7XG4gIGlwY01haW4uaGFuZGxlKFwicmVzb2x2ZUF0dGFjaG1lbnRzUGF0aFwiLCAoZXZlbnQsIHsgcGFnZSB9KSA9PiB7XG4gICAgcmV0dXJuIHJlc29sdmVBdHRhY2htZW50c1BhdGgocGFnZSk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcInJlYWRQYWdlXCIsIChldmVudCwgeyBwYXRoIH0pID0+IHtcbiAgICByZXR1cm4gcmVhZFBhZ2UocGF0aCk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcInJlYWRBdHRhY2htZW50c1wiLCAoZXZlbnQsIHsgcGF0aCB9KSA9PiB7XG4gICAgcmV0dXJuIHJlYWRBdHRhY2htZW50cyhwYXRoKTtcbiAgfSk7XG4gIGlwY01haW4uaGFuZGxlKFwic2F2ZVBhZ2VcIiwgKGV2ZW50LCB7IHBhdGgsIGNvbnRlbnQsIHRpdGxlIH0pID0+IHtcbiAgICByZXR1cm4gc2F2ZVBhZ2UocGF0aCwgY29udGVudCwgdGl0bGUpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZXNvbHZlQXR0YWNobWVudFBhdGhcIiwgKGV2ZW50LCB7IHBhZ2UsIGZpbGVuYW1lIH0pID0+IHtcbiAgICByZXR1cm4gcmVzb2x2ZUF0dGFjaG1lbnRQYXRoKHBhZ2UsIGZpbGVuYW1lKTtcbiAgfSk7XG4gIGlwY01haW4uaGFuZGxlKFwic2F2ZUF0dGFjaG1lbnRcIiwgKGV2ZW50LCB7IHBhdGgsIGZpbGVQYXRoIH0pID0+IHtcbiAgICByZXR1cm4gc2F2ZUF0dGFjaG1lbnQocGF0aCwgZmlsZVBhdGgpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJsaXN0Q2hpbGRyZW5cIiwgKGV2ZW50LCB7IHBhZ2UgfSkgPT4ge1xuICAgIHJldHVybiBsaXN0Q2hpbGRyZW4ocGFnZSk7XG4gIH0pO1xufVxuIiwiLypcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC5cbiAqXG4gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mXG4gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVVxuICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BXG4gKiAwMjExMC0xMzAxIFVTQSwgb3Igc2VlIHRoZSBGU0Ygc2l0ZTogaHR0cDovL3d3dy5mc2Yub3JnLlxuICovXG5cbmltcG9ydCB7IGlwY01haW4sIGFwcCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IEJyb3dzZXJXaW5kb3cgPSBFbGVjdHJvbi5Ccm93c2VyV2luZG93O1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcblxuLyoqXG4gKiBSZWxvYWQgdGhlIGJyb3dzZXIgYnkgcmVsb2FkaW5nIHRoZSBpbmRleCBmaWxlLlxuICogQHBhcmFtIHdpbmRvd1xuICovXG5mdW5jdGlvbiByZWxvYWRCcm93c2VyKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICB3aW5kb3cubG9hZEZpbGUocmVzb2x2ZShhcHAuZ2V0QXBwUGF0aCgpLCBcIi4vcmVuZGVyZXIvZGlzdC9pbmRleC5odG1sXCIpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZCh3aW5kb3c6IEJyb3dzZXJXaW5kb3cpOiB2b2lkIHtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZWxvYWRCcm93c2VyXCIsICgpID0+IHtcbiAgICByZXR1cm4gcmVsb2FkQnJvd3Nlcih3aW5kb3cpO1xuICB9KTtcbn1cbiIsIi8qXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqL1xuXG5pbXBvcnQgeyBhcHAsIEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCBcIi4vc2VjdXJpdHktcmVzdHJpY3Rpb25zXCI7XG5pbXBvcnQgeyByZXN0b3JlT3JDcmVhdGVXaW5kb3cgfSBmcm9tIFwiLi9tYWluV2luZG93XCI7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbi8vIEB0cy1leHBlY3QtZXJyb3Igc2hvdWxkbid0IGhhcHBlbiBidXQgd2UgbmVlZCB0byBnZW5lcmF0ZSB0aGUgdHlwZXMgZm9yIHRoZSB3aG9sZSBwcm9qZWN0IG9uY2UuXG5pbXBvcnQgbG9hZCBmcm9tIFwiQHh3aWtpL2NyaXN0YWwtZWxlY3Ryb24tc3RvcmFnZS9tYWluXCI7XG4vLyBAdHMtZXhwZWN0LWVycm9yIHNob3VsZG4ndCBoYXBwZW4gYnV0IHdlIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHR5cGVzIGZvciB0aGUgd2hvbGUgcHJvamVjdCBvbmNlLlxuaW1wb3J0IGxvYWRCcm93c2VyIGZyb20gXCJAeHdpa2kvY3Jpc3RhbC1icm93c2VyLWVsZWN0cm9uL21haW5cIjtcblxuLyoqXG4gKiBQcmV2ZW50IGVsZWN0cm9uIGZyb20gcnVubmluZyBtdWx0aXBsZSBpbnN0YW5jZXMuXG4gKi9cbmNvbnN0IGlzU2luZ2xlSW5zdGFuY2UgPSBhcHAucmVxdWVzdFNpbmdsZUluc3RhbmNlTG9jaygpO1xuaWYgKCFpc1NpbmdsZUluc3RhbmNlKSB7XG4gIGFwcC5xdWl0KCk7XG4gIHByb2Nlc3MuZXhpdCgwKTtcbn1cbmFwcC5vbihcInNlY29uZC1pbnN0YW5jZVwiLCByZXN0b3JlT3JDcmVhdGVXaW5kb3cpO1xuXG4vKipcbiAqIERpc2FibGUgSGFyZHdhcmUgQWNjZWxlcmF0aW9uIHRvIHNhdmUgbW9yZSBzeXN0ZW0gcmVzb3VyY2VzLlxuICovXG5hcHAuZGlzYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uKCk7XG5cbi8qKlxuICogU2hvdXQgZG93biBiYWNrZ3JvdW5kIHByb2Nlc3MgaWYgYWxsIHdpbmRvd3Mgd2FzIGNsb3NlZFxuICovXG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7XG4gIGlmIChwbGF0Zm9ybSAhPT0gXCJkYXJ3aW5cIikge1xuICAgIGFwcC5xdWl0KCk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gd2luZG93IHdoZW4gdGhlIGJhY2tncm91bmQgcHJvY2VzcyBpcyByZWFkeS5cbiAqL1xuYXBwXG4gIC53aGVuUmVhZHkoKVxuICAudGhlbigoKSA9PiB7XG4gICAgbG9hZCgpO1xuICAgIHJlc3RvcmVPckNyZWF0ZVdpbmRvdygpLnRoZW4oKHcpID0+IGxvYWRCcm93c2VyKHcpKTtcbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9hcHAjZXZlbnQtYWN0aXZhdGUtbWFjb3MgRXZlbnQ6ICdhY3RpdmF0ZScuXG4gICAgICovXG4gICAgYXBwLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgaWYgKEJyb3dzZXJXaW5kb3cuZ2V0QWxsV2luZG93cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN0b3JlT3JDcmVhdGVXaW5kb3coKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSlcbiAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIGNyZWF0ZSB3aW5kb3c6XCIsIGUpKTtcblxuLyoqXG4gKiBJbnN0YWxsIFZ1ZS5qcyBvciBhbnkgb3RoZXIgZXh0ZW5zaW9uIGluIGRldmVsb3BtZW50IG1vZGUgb25seS5cbiAqIE5vdGU6IFlvdSBtdXN0IGluc3RhbGwgYGVsZWN0cm9uLWRldnRvb2xzLWluc3RhbGxlcmAgbWFudWFsbHlcbiAqL1xuLy8gaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbi8vICAgYXBwXG4vLyAgICAgLndoZW5SZWFkeSgpXG4vLyAgICAgLnRoZW4oKCkgPT4gaW1wb3J0KCdlbGVjdHJvbi1kZXZ0b29scy1pbnN0YWxsZXInKSlcbi8vICAgICAudGhlbihtb2R1bGUgPT4ge1xuLy8gICAgICAgY29uc3Qge2RlZmF1bHQ6IGluc3RhbGxFeHRlbnNpb24sIFZVRUpTM19ERVZUT09MU30gPVxuLy8gICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEhvdGZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2Nhd2EtOTMvdml0ZS1lbGVjdHJvbi1idWlsZGVyL2lzc3Vlcy85MTVcbi8vICAgICAgICAgdHlwZW9mIG1vZHVsZS5kZWZhdWx0ID09PSAnZnVuY3Rpb24nID8gbW9kdWxlIDogKG1vZHVsZS5kZWZhdWx0IGFzIHR5cGVvZiBtb2R1bGUpO1xuLy9cbi8vICAgICAgIHJldHVybiBpbnN0YWxsRXh0ZW5zaW9uKFZVRUpTM19ERVZUT09MUywge1xuLy8gICAgICAgICBsb2FkRXh0ZW5zaW9uT3B0aW9uczoge1xuLy8gICAgICAgICAgIGFsbG93RmlsZUFjY2VzczogdHJ1ZSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgIH0pO1xuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIGluc3RhbGwgZXh0ZW5zaW9uOicsIGUpKTtcbi8vIH1cblxuLyoqXG4gKiBDaGVjayBmb3IgYXBwIHVwZGF0ZXMsIGluc3RhbGwgaXQgaW4gYmFja2dyb3VuZCBhbmQgbm90aWZ5IHVzZXIgdGhhdCBuZXcgdmVyc2lvbiB3YXMgaW5zdGFsbGVkLlxuICogTm8gcmVhc29uIHJ1biB0aGlzIGluIG5vbi1wcm9kdWN0aW9uIGJ1aWxkLlxuICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbi5idWlsZC9hdXRvLXVwZGF0ZS5odG1sI3F1aWNrLXNldHVwLWd1aWRlXG4gKlxuICogTm90ZTogSXQgbWF5IHRocm93IFwiRU5PRU5UOiBubyBzdWNoIGZpbGUgYXBwLXVwZGF0ZS55bWxcIlxuICogaWYgeW91IGNvbXBpbGUgcHJvZHVjdGlvbiBhcHAgd2l0aG91dCBwdWJsaXNoaW5nIGl0IHRvIGRpc3RyaWJ1dGlvbiBzZXJ2ZXIuXG4gKiBMaWtlIGBucG0gcnVuIGNvbXBpbGVgIGRvZXMuIEl0J3Mgb2sg8J+YhVxuICovXG5pZiAoaW1wb3J0Lm1ldGEuZW52LlBST0QpIHtcbiAgYXBwXG4gICAgLndoZW5SZWFkeSgpXG4gICAgLnRoZW4oKCkgPT5cbiAgICAgIC8qKlxuICAgICAgICogSGVyZSB3ZSBmb3JjZWQgdG8gdXNlIGByZXF1aXJlYCBzaW5jZSBlbGVjdHJvbiBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgZHluYW1pYyBpbXBvcnQgaW4gYXNhciBhcmNoaXZlc1xuICAgICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzM4ODI5XG4gICAgICAgKiBQb3RlbnRpYWxseSBpdCBtYXkgYmUgZml4ZWQgYnkgdGhpcyBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vcHVsbC8zNzUzNVxuICAgICAgICovXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgcmVxdWlyZShcImVsZWN0cm9uLXVwZGF0ZXJcIikuYXV0b1VwZGF0ZXIuY2hlY2tGb3JVcGRhdGVzQW5kTm90aWZ5KCksXG4gICAgKVxuICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcihcIkZhaWxlZCBjaGVjayBhbmQgaW5zdGFsbCB1cGRhdGVzOlwiLCBlKSk7XG59XG4iXSwibmFtZXMiOlsiQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUyIsIkFMTE9XRURfRVhURVJOQUxfT1JJR0lOUyIsImFwcCIsIl8iLCJjb250ZW50cyIsImV2ZW50IiwidXJsIiwib3JpZ2luIiwiVVJMIiwid2ViQ29udGVudHMiLCJwZXJtaXNzaW9uIiwiY2FsbGJhY2siLCJwZXJtaXNzaW9uR3JhbnRlZCIsInNoZWxsIiwid2ViUHJlZmVyZW5jZXMiLCJwYXJhbXMiLCJjcmVhdGVXaW5kb3ciLCJicm93c2VyV2luZG93IiwiQnJvd3NlcldpbmRvdyIsImpvaW4iLCJyZXNvbHZlIiwicmVzdG9yZU9yQ3JlYXRlV2luZG93Iiwid2luZG93IiwidyIsIkhPTUVfUEFUSCIsIkhPTUVfUEFUSF9GVUxMIiwicmVzb2x2ZVBhdGgiLCJwYWdlIiwibGFzdFNlZ21lbnRzIiwiaG9tZWRpciIsInJlc29sdmVQYWdlUGF0aCIsInJlc29sdmVBdHRhY2htZW50c1BhdGgiLCJyZXNvbHZlQXR0YWNobWVudFBhdGgiLCJmaWxlbmFtZSIsImlzRmlsZSIsInBhdGgiLCJzdGF0IiwiZnMiLCJlIiwiaXNEaXJlY3RvcnkiLCJwYXRoRXhpc3RzIiwicmVhZFBhZ2UiLCJpc1dpdGhpbiIsInBhZ2VDb250ZW50IiwicmVhZEF0dGFjaG1lbnRzIiwicm9vdCIsInJlbCIsInJlbGF0aXZlIiwic2F2ZVBhZ2UiLCJjb250ZW50IiwidGl0bGUiLCJqc29uQ29udGVudCIsImZpbGVDb250ZW50IiwidGV4dERlY29kZXIiLCJuZXdKU09OIiwicGFyZW50RGlyZWN0b3J5IiwiZGlybmFtZSIsInNhdmVBdHRhY2htZW50IiwiZmlsZVBhdGgiLCJsaXN0Q2hpbGRyZW4iLCJmb2xkZXJQYXRoIiwiY2hpbGRyZW4iLCJmaWxlcyIsImZpbGUiLCJsb2FkIiwiaXBjTWFpbiIsInJlbG9hZEJyb3dzZXIiLCJpc1NpbmdsZUluc3RhbmNlIiwicGxhdGZvcm0iLCJsb2FkQnJvd3NlciJdLCJtYXBwaW5ncyI6InFJQW9DTUEsRUFBa0MsSUFBSSxJQUd0QyxDQUFDLENBQ1AsRUFZTUMsTUFBK0IsSUFBeUIsQ0FDNUQsb0JBQ0YsQ0FBQyxFQUVEQyxFQUFBLElBQUksR0FBRyx1QkFBd0IsQ0FBQ0MsRUFBR0MsSUFBYSxDQVM5Q0EsRUFBUyxHQUFHLGdCQUFpQixDQUFDQyxFQUFPQyxJQUFRLENBQzNDLEtBQU0sQ0FBRSxPQUFBQyxDQUFXLEVBQUEsSUFBSUMsTUFBSUYsQ0FB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
1
+ "use strict";const H=require("electron"),xn=require("node:url"),Y=require("node:path"),ue=require("node:process"),U=require("node:fs"),Dt=require("util"),je=require("stream"),ic=require("path"),Ls=require("http"),Ds=require("https"),Jn=require("url"),fu=require("fs"),hu=require("assert"),vu=require("tty"),xu=require("os"),it=require("zlib"),gu=require("events"),he=require("node:util"),Gt=require("node:crypto"),yu=require("node:assert"),Yn=require("node:os"),Pn=new Map([]);Pn.set("http://localhost:15680",new Set);const bu=new Set(["https://github.com"]);H.app.on("web-contents-created",(e,t)=>{t.on("will-navigate",(n,a)=>{const{origin:s}=new xn.URL(a);Pn.has(s)||n.preventDefault()}),t.session.setPermissionRequestHandler((n,a,s)=>{const{origin:i}=new xn.URL(n.getURL()),r=!!Pn.get(i)?.has(a);s(r)}),t.setWindowOpenHandler(({url:n})=>{const{origin:a}=new xn.URL(n);return bu.has(a)&&H.shell.openExternal(n).catch(console.error),{action:"deny"}}),t.on("will-attach-webview",(n,a,s)=>{const{origin:i}=new xn.URL(s.src);if(!Pn.has(i)){n.preventDefault();return}delete a.preload,delete a.preloadURL,a.nodeIntegration=!1,a.contextIsolation=!0})});function rc(e){return e.loadFile(Y.resolve(H.app.getAppPath(),"./renderer/dist/index.html"))}async function $u(){const e=new H.BrowserWindow({show:!1,webPreferences:{nodeIntegration:!1,contextIsolation:!0,sandbox:!1,webviewTag:!1,preload:Y.join(H.app.getAppPath(),"./preload/dist/index.cjs")}});return e.webContents.setWindowOpenHandler(({url:t})=>(H.shell.openExternal(t),{action:"deny"})),e.on("ready-to-show",()=>{e?.show()}),await rc(e),e}async function ds(){let e=H.BrowserWindow.getAllWindows().find(t=>!t.isDestroyed());return e===void 0&&(e=await $u()),e.isMinimized()&&e.restore(),e.focus(),e}const oc=".cristal",ot=Y.join(H.app.getPath("home"),oc);function Zn(e,...t){const n=H.app.getPath("home");return Y.join(n,oc,e,...t)}function wu(e){return Zn(e,"page.json")}function _u(e){return Zn(e,"attachments")}function Eu(e,t){return Zn(e,"attachments",t)}async function cc(e){let t;try{t=await U.promises.lstat(e)}catch(n){console.debug(n)}return t?.isFile()}async function lc(e){let t;try{t=await U.promises.lstat(e)}catch(n){console.debug(n)}return t?.isDirectory()}async function Su(e){try{await U.promises.lstat(e)}catch{return!1}return!0}async function uc(e){if(!await Qn(ot,e))throw new Error(`[${e}] is not in in [${ot}]`);if(await cc(e)){const t=await U.promises.readFile(e);return JSON.parse(t.toString("utf8"))}else return}async function Ru(e){if(!await Qn(ot,e))throw new Error(`[${e}] is not in in [${ot}]`);if(await lc(e))return(await U.promises.readdir(e)).map(n=>({id:n,mimetype:"",reference:n,href:n}))}async function Qn(e,t){const n=Y.relative(e,t);return!n.startsWith("../")&&n!==".."}async function ku(e,t,n){if(!await Qn(ot,e))throw new Error(`[${e}] is not in in [${ot}]`);let a;if(await Su(e)&&await cc(e)){const r=await U.promises.readFile(e),c=new TextDecoder("utf-8");a=JSON.parse(c.decode(r)),a.source=t,a.name=n}else a={name:n,source:t,syntax:"markdown/1.2"};const s=JSON.stringify(a,null,2),i=Y.dirname(e);return await U.promises.mkdir(i,{recursive:!0}),await U.promises.writeFile(e,s,{flag:"w+"}),uc(e)}async function ju(e,t){if(!await Qn(ot,e))throw new Error(`[${e}] is not in in [${ot}]`);const n=Y.dirname(e);await U.promises.mkdir(n,{recursive:!0}),await U.promises.copyFile(t,e)}async function Tu(e){const t=Zn(e).replace(/\/page.json$/,""),n=[],a=await U.promises.readdir(t);for(const s of a){const i=`${t}/${s}`;await lc(i)&&n.push(s)}return n}async function Ou(e){await H.shell.trashItem(e.replace(/\/page.json$/,""))}function Pu(){H.ipcMain.handle("resolvePath",(e,{page:t})=>wu(t)),H.ipcMain.handle("resolveAttachmentsPath",(e,{page:t})=>_u(t)),H.ipcMain.handle("readPage",(e,{path:t})=>uc(t)),H.ipcMain.handle("readAttachments",(e,{path:t})=>Ru(t)),H.ipcMain.handle("savePage",(e,{path:t,content:n,title:a})=>ku(t,n,a)),H.ipcMain.handle("resolveAttachmentPath",(e,{page:t,filename:n})=>Eu(t,n)),H.ipcMain.handle("saveAttachment",(e,{path:t,filePath:n})=>ju(t,n)),H.ipcMain.handle("listChildren",(e,{page:t})=>Tu(t)),H.ipcMain.handle("deletePage",(e,{path:t})=>Ou(t))}function Nu(e){e.loadFile(Y.resolve(H.app.getAppPath(),"./renderer/dist/index.html"))}function Au(e){H.ipcMain.handle("reloadBrowser",()=>Nu(e))}function pc(e,t){return function(){return e.apply(t,arguments)}}const{toString:Cu}=Object.prototype,{getPrototypeOf:Fs}=Object,ea=(e=>t=>{const n=Cu.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Le=e=>(e=e.toLowerCase(),t=>ea(t)===e),ta=e=>t=>typeof t===e,{isArray:Ft}=Array,rn=ta("undefined");function Iu(e){return e!==null&&!rn(e)&&e.constructor!==null&&!rn(e.constructor)&&Te(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const dc=Le("ArrayBuffer");function Lu(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&dc(e.buffer),t}const Du=ta("string"),Te=ta("function"),mc=ta("number"),na=e=>e!==null&&typeof e=="object",Fu=e=>e===!0||e===!1,Nn=e=>{if(ea(e)!=="object")return!1;const t=Fs(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},zu=Le("Date"),qu=Le("File"),Mu=Le("Blob"),Uu=Le("FileList"),Bu=e=>na(e)&&Te(e.pipe),Vu=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Te(e.append)&&((t=ea(e))==="formdata"||t==="object"&&Te(e.toString)&&e.toString()==="[object FormData]"))},Hu=Le("URLSearchParams"),[Gu,Ku,Wu,Xu]=["ReadableStream","Request","Response","Headers"].map(Le),Ju=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function un(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let a,s;if(typeof e!="object"&&(e=[e]),Ft(e))for(a=0,s=e.length;a<s;a++)t.call(null,e[a],a,e);else{const i=n?Object.getOwnPropertyNames(e):Object.keys(e),r=i.length;let c;for(a=0;a<r;a++)c=i[a],t.call(null,e[c],c,e)}}function fc(e,t){t=t.toLowerCase();const n=Object.keys(e);let a=n.length,s;for(;a-- >0;)if(s=n[a],t===s.toLowerCase())return s;return null}const ft=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,hc=e=>!rn(e)&&e!==ft;function ms(){const{caseless:e}=hc(this)&&this||{},t={},n=(a,s)=>{const i=e&&fc(t,s)||s;Nn(t[i])&&Nn(a)?t[i]=ms(t[i],a):Nn(a)?t[i]=ms({},a):Ft(a)?t[i]=a.slice():t[i]=a};for(let a=0,s=arguments.length;a<s;a++)arguments[a]&&un(arguments[a],n);return t}const Yu=(e,t,n,{allOwnKeys:a}={})=>(un(t,(s,i)=>{n&&Te(s)?e[i]=pc(s,n):e[i]=s},{allOwnKeys:a}),e),Zu=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Qu=(e,t,n,a)=>{e.prototype=Object.create(t.prototype,a),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},ep=(e,t,n,a)=>{let s,i,r;const c={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),i=s.length;i-- >0;)r=s[i],(!a||a(r,e,t))&&!c[r]&&(t[r]=e[r],c[r]=!0);e=n!==!1&&Fs(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},tp=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const a=e.indexOf(t,n);return a!==-1&&a===n},np=e=>{if(!e)return null;if(Ft(e))return e;let t=e.length;if(!mc(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},ap=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Fs(Uint8Array)),sp=(e,t)=>{const a=(e&&e[Symbol.iterator]).call(e);let s;for(;(s=a.next())&&!s.done;){const i=s.value;t.call(e,i[0],i[1])}},ip=(e,t)=>{let n;const a=[];for(;(n=e.exec(t))!==null;)a.push(n);return a},rp=Le("HTMLFormElement"),op=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,a,s){return a.toUpperCase()+s}),vr=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),cp=Le("RegExp"),vc=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),a={};un(n,(s,i)=>{let r;(r=t(s,i,e))!==!1&&(a[i]=r||s)}),Object.defineProperties(e,a)},lp=e=>{vc(e,(t,n)=>{if(Te(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const a=e[n];if(Te(a)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},up=(e,t)=>{const n={},a=s=>{s.forEach(i=>{n[i]=!0})};return Ft(e)?a(e):a(String(e).split(t)),n},pp=()=>{},dp=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,za="abcdefghijklmnopqrstuvwxyz",xr="0123456789",xc={DIGIT:xr,ALPHA:za,ALPHA_DIGIT:za+za.toUpperCase()+xr},mp=(e=16,t=xc.ALPHA_DIGIT)=>{let n="";const{length:a}=t;for(;e--;)n+=t[Math.random()*a|0];return n};function fp(e){return!!(e&&Te(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const hp=e=>{const t=new Array(10),n=(a,s)=>{if(na(a)){if(t.indexOf(a)>=0)return;if(!("toJSON"in a)){t[s]=a;const i=Ft(a)?[]:{};return un(a,(r,c)=>{const l=n(r,s+1);!rn(l)&&(i[c]=l)}),t[s]=void 0,i}}return a};return n(e,0)},vp=Le("AsyncFunction"),xp=e=>e&&(na(e)||Te(e))&&Te(e.then)&&Te(e.catch),gc=((e,t)=>e?setImmediate:t?((n,a)=>(ft.addEventListener("message",({source:s,data:i})=>{s===ft&&i===n&&a.length&&a.shift()()},!1),s=>{a.push(s),ft.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Te(ft.postMessage)),gp=typeof queueMicrotask<"u"?queueMicrotask.bind(ft):typeof process<"u"&&process.nextTick||gc,_={isArray:Ft,isArrayBuffer:dc,isBuffer:Iu,isFormData:Vu,isArrayBufferView:Lu,isString:Du,isNumber:mc,isBoolean:Fu,isObject:na,isPlainObject:Nn,isReadableStream:Gu,isRequest:Ku,isResponse:Wu,isHeaders:Xu,isUndefined:rn,isDate:zu,isFile:qu,isBlob:Mu,isRegExp:cp,isFunction:Te,isStream:Bu,isURLSearchParams:Hu,isTypedArray:ap,isFileList:Uu,forEach:un,merge:ms,extend:Yu,trim:Ju,stripBOM:Zu,inherits:Qu,toFlatObject:ep,kindOf:ea,kindOfTest:Le,endsWith:tp,toArray:np,forEachEntry:sp,matchAll:ip,isHTMLForm:rp,hasOwnProperty:vr,hasOwnProp:vr,reduceDescriptors:vc,freezeMethods:lp,toObjectSet:up,toCamelCase:op,noop:pp,toFiniteNumber:dp,findKey:fc,global:ft,isContextDefined:hc,ALPHABET:xc,generateString:mp,isSpecCompliantForm:fp,toJSONObject:hp,isAsyncFn:vp,isThenable:xp,setImmediate:gc,asap:gp};function D(e,t,n,a,s){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),a&&(this.request=a),s&&(this.response=s,this.status=s.status?s.status:null)}_.inherits(D,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:_.toJSONObject(this.config),code:this.code,status:this.status}}});const yc=D.prototype,bc={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{bc[e]={value:e}});Object.defineProperties(D,bc);Object.defineProperty(yc,"isAxiosError",{value:!0});D.from=(e,t,n,a,s,i)=>{const r=Object.create(yc);return _.toFlatObject(e,r,function(l){return l!==Error.prototype},c=>c!=="isAxiosError"),D.call(r,e.message,t,n,a,s),r.cause=e,r.name=e.name,i&&Object.assign(r,i),r};function aa(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var $c=je.Stream,yp=Dt,bp=De;function De(){this.source=null,this.dataSize=0,this.maxDataSize=1024*1024,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}yp.inherits(De,$c);De.create=function(e,t){var n=new this;t=t||{};for(var a in t)n[a]=t[a];n.source=e;var s=e.emit;return e.emit=function(){return n._handleEmit(arguments),s.apply(e,arguments)},e.on("error",function(){}),n.pauseStream&&e.pause(),n};Object.defineProperty(De.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}});De.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)};De.prototype.resume=function(){this._released||this.release(),this.source.resume()};De.prototype.pause=function(){this.source.pause()};De.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]};De.prototype.pipe=function(){var e=$c.prototype.pipe.apply(this,arguments);return this.resume(),e};De.prototype._handleEmit=function(e){if(this._released){this.emit.apply(this,e);return}e[0]==="data"&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e)};De.prototype._checkIfMaxDataSizeExceeded=function(){if(!this._maxDataSizeExceeded&&!(this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}};var $p=Dt,wc=je.Stream,gr=bp,wp=oe;function oe(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2*1024*1024,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}$p.inherits(oe,wc);oe.create=function(e){var t=new this;e=e||{};for(var n in e)t[n]=e[n];return t};oe.isStreamLike=function(e){return typeof e!="function"&&typeof e!="string"&&typeof e!="boolean"&&typeof e!="number"&&!Buffer.isBuffer(e)};oe.prototype.append=function(e){var t=oe.isStreamLike(e);if(t){if(!(e instanceof gr)){var n=gr.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=n}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this};oe.prototype.pipe=function(e,t){return wc.prototype.pipe.call(this,e,t),this.resume(),e};oe.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop){this._pendingNext=!0;return}this._insideLoop=!0;try{do this._pendingNext=!1,this._realGetNext();while(this._pendingNext)}finally{this._insideLoop=!1}};oe.prototype._realGetNext=function(){var e=this._streams.shift();if(typeof e>"u"){this.end();return}if(typeof e!="function"){this._pipeNext(e);return}var t=e;t(function(n){var a=oe.isStreamLike(n);a&&(n.on("data",this._checkDataSize.bind(this)),this._handleErrors(n)),this._pipeNext(n)}.bind(this))};oe.prototype._pipeNext=function(e){this._currentStream=e;var t=oe.isStreamLike(e);if(t){e.on("end",this._getNext.bind(this)),e.pipe(this,{end:!1});return}var n=e;this.write(n),this._getNext()};oe.prototype._handleErrors=function(e){var t=this;e.on("error",function(n){t._emitError(n)})};oe.prototype.write=function(e){this.emit("data",e)};oe.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&typeof this._currentStream.pause=="function"&&this._currentStream.pause(),this.emit("pause"))};oe.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&typeof this._currentStream.resume=="function"&&this._currentStream.resume(),this.emit("resume")};oe.prototype.end=function(){this._reset(),this.emit("end")};oe.prototype.destroy=function(){this._reset(),this.emit("close")};oe.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null};oe.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}};oe.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach(function(t){t.dataSize&&(e.dataSize+=t.dataSize)}),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)};oe.prototype._emitError=function(e){this._reset(),this.emit("error",e)};var _c={};const _p={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["es","ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana",compressible:!0},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/stix+json":{source:"iana",compressible:!0},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.slides":{source:"iana"},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hl7cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/hsj2":{source:"iana",extensions:["hsj2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/step":{source:"iana"},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}};/*!
2
+ * mime-db
3
+ * Copyright(c) 2014 Jonathan Ong
4
+ * Copyright(c) 2015-2022 Douglas Christopher Wilson
5
+ * MIT Licensed
6
+ */var Ep=_p;/*!
7
+ * mime-types
8
+ * Copyright(c) 2014 Jonathan Ong
9
+ * Copyright(c) 2015 Douglas Christopher Wilson
10
+ * MIT Licensed
11
+ */(function(e){var t=Ep,n=ic.extname,a=/^\s*([^;\s]*)(?:;|\s|$)/,s=/^text\//i;e.charset=i,e.charsets={lookup:i},e.contentType=r,e.extension=c,e.extensions=Object.create(null),e.lookup=l,e.types=Object.create(null),o(e.extensions,e.types);function i(u){if(!u||typeof u!="string")return!1;var p=a.exec(u),f=p&&t[p[1].toLowerCase()];return f&&f.charset?f.charset:p&&s.test(p[1])?"UTF-8":!1}function r(u){if(!u||typeof u!="string")return!1;var p=u.indexOf("/")===-1?e.lookup(u):u;if(!p)return!1;if(p.indexOf("charset")===-1){var f=e.charset(p);f&&(p+="; charset="+f.toLowerCase())}return p}function c(u){if(!u||typeof u!="string")return!1;var p=a.exec(u),f=p&&e.extensions[p[1].toLowerCase()];return!f||!f.length?!1:f[0]}function l(u){if(!u||typeof u!="string")return!1;var p=n("x."+u).toLowerCase().substr(1);return p&&e.types[p]||!1}function o(u,p){var f=["nginx","apache",void 0,"iana"];Object.keys(t).forEach(function(m){var y=t[m],x=y.extensions;if(!(!x||!x.length)){u[m]=x;for(var v=0;v<x.length;v++){var $=x[v];if(p[$]){var E=f.indexOf(t[p[$]].source),O=f.indexOf(y.source);if(p[$]!=="application/octet-stream"&&(E>O||E===O&&p[$].substr(0,12)==="application/"))continue}p[$]=m}}})}})(_c);var Sp=Rp;function Rp(e){var t=typeof setImmediate=="function"?setImmediate:typeof process=="object"&&typeof process.nextTick=="function"?process.nextTick:null;t?t(e):setTimeout(e,0)}var yr=Sp,Ec=kp;function kp(e){var t=!1;return yr(function(){t=!0}),function(a,s){t?e(a,s):yr(function(){e(a,s)})}}var Sc=jp;function jp(e){Object.keys(e.jobs).forEach(Tp.bind(e)),e.jobs={}}function Tp(e){typeof this.jobs[e]=="function"&&this.jobs[e]()}var br=Ec,Op=Sc,Rc=Pp;function Pp(e,t,n,a){var s=n.keyedList?n.keyedList[n.index]:n.index;n.jobs[s]=Np(t,s,e[s],function(i,r){s in n.jobs&&(delete n.jobs[s],i?Op(n):n.results[s]=r,a(i,n.results))})}function Np(e,t,n,a){var s;return e.length==2?s=e(n,br(a)):s=e(n,t,br(a)),s}var kc=Ap;function Ap(e,t){var n=!Array.isArray(e),a={index:0,keyedList:n||t?Object.keys(e):null,jobs:{},results:n?{}:[],size:n?Object.keys(e).length:e.length};return t&&a.keyedList.sort(n?t:function(s,i){return t(e[s],e[i])}),a}var Cp=Sc,Ip=Ec,jc=Lp;function Lp(e){Object.keys(this.jobs).length&&(this.index=this.size,Cp(this),Ip(e)(null,this.results))}var Dp=Rc,Fp=kc,zp=jc,qp=Mp;function Mp(e,t,n){for(var a=Fp(e);a.index<(a.keyedList||e).length;)Dp(e,t,a,function(s,i){if(s){n(s,i);return}if(Object.keys(a.jobs).length===0){n(null,a.results);return}}),a.index++;return zp.bind(a,n)}var sa={exports:{}},$r=Rc,Up=kc,Bp=jc;sa.exports=Vp;sa.exports.ascending=Tc;sa.exports.descending=Hp;function Vp(e,t,n,a){var s=Up(e,n);return $r(e,t,s,function i(r,c){if(r){a(r,c);return}if(s.index++,s.index<(s.keyedList||e).length){$r(e,t,s,i);return}a(null,s.results)}),Bp.bind(s,a)}function Tc(e,t){return e<t?-1:e>t?1:0}function Hp(e,t){return-1*Tc(e,t)}var Oc=sa.exports,Gp=Oc,Kp=Wp;function Wp(e,t,n){return Gp(e,t,null,n)}var Xp={parallel:qp,serial:Kp,serialOrdered:Oc},Jp=function(e,t){return Object.keys(t).forEach(function(n){e[n]=e[n]||t[n]}),e},zs=wp,Pc=Dt,qa=ic,Yp=Ls,Zp=Ds,Qp=Jn.parse,ed=fu,td=je.Stream,Ma=_c,nd=Xp,fs=Jp,ad=Z;Pc.inherits(Z,zs);function Z(e){if(!(this instanceof Z))return new Z(e);this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],zs.call(this),e=e||{};for(var t in e)this[t]=e[t]}Z.LINE_BREAK=`\r
12
+ `;Z.DEFAULT_CONTENT_TYPE="application/octet-stream";Z.prototype.append=function(e,t,n){n=n||{},typeof n=="string"&&(n={filename:n});var a=zs.prototype.append.bind(this);if(typeof t=="number"&&(t=""+t),Pc.isArray(t)){this._error(new Error("Arrays are not supported."));return}var s=this._multiPartHeader(e,t,n),i=this._multiPartFooter();a(s),a(t),a(i),this._trackLength(s,t,n)};Z.prototype._trackLength=function(e,t,n){var a=0;n.knownLength!=null?a+=+n.knownLength:Buffer.isBuffer(t)?a=t.length:typeof t=="string"&&(a=Buffer.byteLength(t)),this._valueLength+=a,this._overheadLength+=Buffer.byteLength(e)+Z.LINE_BREAK.length,!(!t||!t.path&&!(t.readable&&t.hasOwnProperty("httpVersion"))&&!(t instanceof td))&&(n.knownLength||this._valuesToMeasure.push(t))};Z.prototype._lengthRetriever=function(e,t){e.hasOwnProperty("fd")?e.end!=null&&e.end!=1/0&&e.start!=null?t(null,e.end+1-(e.start?e.start:0)):ed.stat(e.path,function(n,a){var s;if(n){t(n);return}s=a.size-(e.start?e.start:0),t(null,s)}):e.hasOwnProperty("httpVersion")?t(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",function(n){e.pause(),t(null,+n.headers["content-length"])}),e.resume()):t("Unknown stream")};Z.prototype._multiPartHeader=function(e,t,n){if(typeof n.header=="string")return n.header;var a=this._getContentDisposition(t,n),s=this._getContentType(t,n),i="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(a||[]),"Content-Type":[].concat(s||[])};typeof n.header=="object"&&fs(r,n.header);var c;for(var l in r)r.hasOwnProperty(l)&&(c=r[l],c!=null&&(Array.isArray(c)||(c=[c]),c.length&&(i+=l+": "+c.join("; ")+Z.LINE_BREAK)));return"--"+this.getBoundary()+Z.LINE_BREAK+i+Z.LINE_BREAK};Z.prototype._getContentDisposition=function(e,t){var n,a;return typeof t.filepath=="string"?n=qa.normalize(t.filepath).replace(/\\/g,"/"):t.filename||e.name||e.path?n=qa.basename(t.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(n=qa.basename(e.client._httpMessage.path||"")),n&&(a='filename="'+n+'"'),a};Z.prototype._getContentType=function(e,t){var n=t.contentType;return!n&&e.name&&(n=Ma.lookup(e.name)),!n&&e.path&&(n=Ma.lookup(e.path)),!n&&e.readable&&e.hasOwnProperty("httpVersion")&&(n=e.headers["content-type"]),!n&&(t.filepath||t.filename)&&(n=Ma.lookup(t.filepath||t.filename)),!n&&typeof e=="object"&&(n=Z.DEFAULT_CONTENT_TYPE),n};Z.prototype._multiPartFooter=function(){return function(e){var t=Z.LINE_BREAK,n=this._streams.length===0;n&&(t+=this._lastBoundary()),e(t)}.bind(this)};Z.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+Z.LINE_BREAK};Z.prototype.getHeaders=function(e){var t,n={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(t in e)e.hasOwnProperty(t)&&(n[t.toLowerCase()]=e[t]);return n};Z.prototype.setBoundary=function(e){this._boundary=e};Z.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary};Z.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),t=this.getBoundary(),n=0,a=this._streams.length;n<a;n++)typeof this._streams[n]!="function"&&(Buffer.isBuffer(this._streams[n])?e=Buffer.concat([e,this._streams[n]]):e=Buffer.concat([e,Buffer.from(this._streams[n])]),(typeof this._streams[n]!="string"||this._streams[n].substring(2,t.length+2)!==t)&&(e=Buffer.concat([e,Buffer.from(Z.LINE_BREAK)])));return Buffer.concat([e,Buffer.from(this._lastBoundary())])};Z.prototype._generateBoundary=function(){for(var e="--------------------------",t=0;t<24;t++)e+=Math.floor(Math.random()*10).toString(16);this._boundary=e};Z.prototype.getLengthSync=function(){var e=this._overheadLength+this._valueLength;return this._streams.length&&(e+=this._lastBoundary().length),this.hasKnownLength()||this._error(new Error("Cannot calculate proper length in synchronous way.")),e};Z.prototype.hasKnownLength=function(){var e=!0;return this._valuesToMeasure.length&&(e=!1),e};Z.prototype.getLength=function(e){var t=this._overheadLength+this._valueLength;if(this._streams.length&&(t+=this._lastBoundary().length),!this._valuesToMeasure.length){process.nextTick(e.bind(this,null,t));return}nd.parallel(this._valuesToMeasure,this._lengthRetriever,function(n,a){if(n){e(n);return}a.forEach(function(s){t+=s}),e(null,t)})};Z.prototype.submit=function(e,t){var n,a,s={method:"post"};return typeof e=="string"?(e=Qp(e),a=fs({port:e.port,path:e.pathname,host:e.hostname,protocol:e.protocol},s)):(a=fs(e,s),a.port||(a.port=a.protocol=="https:"?443:80)),a.headers=this.getHeaders(e.headers),a.protocol=="https:"?n=Zp.request(a):n=Yp.request(a),this.getLength(function(i,r){if(i&&i!=="Unknown stream"){this._error(i);return}if(r&&n.setHeader("Content-Length",r),this.pipe(n),t){var c,l=function(o,u){return n.removeListener("error",l),n.removeListener("response",c),t.call(this,o,u)};c=l.bind(this,null),n.on("error",l),n.on("response",c)}}.bind(this)),n};Z.prototype._error=function(e){this.error||(this.error=e,this.pause(),this.emit("error",e))};Z.prototype.toString=function(){return"[object FormData]"};const Nc=aa(ad);function hs(e){return _.isPlainObject(e)||_.isArray(e)}function Ac(e){return _.endsWith(e,"[]")?e.slice(0,-2):e}function wr(e,t,n){return e?e.concat(t).map(function(s,i){return s=Ac(s),!n&&i?"["+s+"]":s}).join(n?".":""):t}function sd(e){return _.isArray(e)&&!e.some(hs)}const id=_.toFlatObject(_,{},null,function(t){return/^is[A-Z]/.test(t)});function ia(e,t,n){if(!_.isObject(e))throw new TypeError("target must be an object");t=t||new(Nc||FormData),n=_.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,x){return!_.isUndefined(x[y])});const a=n.metaTokens,s=n.visitor||u,i=n.dots,r=n.indexes,l=(n.Blob||typeof Blob<"u"&&Blob)&&_.isSpecCompliantForm(t);if(!_.isFunction(s))throw new TypeError("visitor must be a function");function o(m){if(m===null)return"";if(_.isDate(m))return m.toISOString();if(!l&&_.isBlob(m))throw new D("Blob is not supported. Use a Buffer instead.");return _.isArrayBuffer(m)||_.isTypedArray(m)?l&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function u(m,y,x){let v=m;if(m&&!x&&typeof m=="object"){if(_.endsWith(y,"{}"))y=a?y:y.slice(0,-2),m=JSON.stringify(m);else if(_.isArray(m)&&sd(m)||(_.isFileList(m)||_.endsWith(y,"[]"))&&(v=_.toArray(m)))return y=Ac(y),v.forEach(function(E,O){!(_.isUndefined(E)||E===null)&&t.append(r===!0?wr([y],O,i):r===null?y:y+"[]",o(E))}),!1}return hs(m)?!0:(t.append(wr(x,y,i),o(m)),!1)}const p=[],f=Object.assign(id,{defaultVisitor:u,convertValue:o,isVisitable:hs});function h(m,y){if(!_.isUndefined(m)){if(p.indexOf(m)!==-1)throw Error("Circular reference detected in "+y.join("."));p.push(m),_.forEach(m,function(v,$){(!(_.isUndefined(v)||v===null)&&s.call(t,v,_.isString($)?$.trim():$,y,f))===!0&&h(v,y?y.concat($):[$])}),p.pop()}}if(!_.isObject(e))throw new TypeError("data must be an object");return h(e),t}function _r(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(a){return t[a]})}function Cc(e,t){this._pairs=[],e&&ia(e,this,t)}const Ic=Cc.prototype;Ic.append=function(t,n){this._pairs.push([t,n])};Ic.toString=function(t){const n=t?function(a){return t.call(this,a,_r)}:_r;return this._pairs.map(function(s){return n(s[0])+"="+n(s[1])},"").join("&")};function rd(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function qs(e,t,n){if(!t)return e;const a=n&&n.encode||rd,s=n&&n.serialize;let i;if(s?i=s(t,n):i=_.isURLSearchParams(t)?t.toString():new Cc(t,n).toString(a),i){const r=e.indexOf("#");r!==-1&&(e=e.slice(0,r)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class Er{constructor(){this.handlers=[]}use(t,n,a){return this.handlers.push({fulfilled:t,rejected:n,synchronous:a?a.synchronous:!1,runWhen:a?a.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){_.forEach(this.handlers,function(a){a!==null&&t(a)})}}const Ms={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},od=Jn.URLSearchParams,cd={isNode:!0,classes:{URLSearchParams:od,FormData:Nc,Blob:typeof Blob<"u"&&Blob||null},protocols:["http","https","file","data"]},Us=typeof window<"u"&&typeof document<"u",vs=typeof navigator=="object"&&navigator||void 0,ld=Us&&(!vs||["ReactNative","NativeScript","NS"].indexOf(vs.product)<0),ud=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",pd=Us&&window.location.href||"http://localhost",dd=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Us,hasStandardBrowserEnv:ld,hasStandardBrowserWebWorkerEnv:ud,navigator:vs,origin:pd},Symbol.toStringTag,{value:"Module"})),fe={...dd,...cd};function md(e,t){return ia(e,new fe.classes.URLSearchParams,Object.assign({visitor:function(n,a,s,i){return fe.isNode&&_.isBuffer(n)?(this.append(a,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function fd(e){return _.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function hd(e){const t={},n=Object.keys(e);let a;const s=n.length;let i;for(a=0;a<s;a++)i=n[a],t[i]=e[i];return t}function Lc(e){function t(n,a,s,i){let r=n[i++];if(r==="__proto__")return!0;const c=Number.isFinite(+r),l=i>=n.length;return r=!r&&_.isArray(s)?s.length:r,l?(_.hasOwnProp(s,r)?s[r]=[s[r],a]:s[r]=a,!c):((!s[r]||!_.isObject(s[r]))&&(s[r]=[]),t(n,a,s[r],i)&&_.isArray(s[r])&&(s[r]=hd(s[r])),!c)}if(_.isFormData(e)&&_.isFunction(e.entries)){const n={};return _.forEachEntry(e,(a,s)=>{t(fd(a),s,n,0)}),n}return null}function vd(e,t,n){if(_.isString(e))try{return(t||JSON.parse)(e),_.trim(e)}catch(a){if(a.name!=="SyntaxError")throw a}return(0,JSON.stringify)(e)}const pn={transitional:Ms,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const a=n.getContentType()||"",s=a.indexOf("application/json")>-1,i=_.isObject(t);if(i&&_.isHTMLForm(t)&&(t=new FormData(t)),_.isFormData(t))return s?JSON.stringify(Lc(t)):t;if(_.isArrayBuffer(t)||_.isBuffer(t)||_.isStream(t)||_.isFile(t)||_.isBlob(t)||_.isReadableStream(t))return t;if(_.isArrayBufferView(t))return t.buffer;if(_.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(i){if(a.indexOf("application/x-www-form-urlencoded")>-1)return md(t,this.formSerializer).toString();if((c=_.isFileList(t))||a.indexOf("multipart/form-data")>-1){const l=this.env&&this.env.FormData;return ia(c?{"files[]":t}:t,l&&new l,this.formSerializer)}}return i||s?(n.setContentType("application/json",!1),vd(t)):t}],transformResponse:[function(t){const n=this.transitional||pn.transitional,a=n&&n.forcedJSONParsing,s=this.responseType==="json";if(_.isResponse(t)||_.isReadableStream(t))return t;if(t&&_.isString(t)&&(a&&!this.responseType||s)){const r=!(n&&n.silentJSONParsing)&&s;try{return JSON.parse(t)}catch(c){if(r)throw c.name==="SyntaxError"?D.from(c,D.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:fe.classes.FormData,Blob:fe.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_.forEach(["delete","get","head","post","put","patch"],e=>{pn.headers[e]={}});const xd=_.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),gd=e=>{const t={};let n,a,s;return e&&e.split(`
13
+ `).forEach(function(r){s=r.indexOf(":"),n=r.substring(0,s).trim().toLowerCase(),a=r.substring(s+1).trim(),!(!n||t[n]&&xd[n])&&(n==="set-cookie"?t[n]?t[n].push(a):t[n]=[a]:t[n]=t[n]?t[n]+", "+a:a)}),t},Sr=Symbol("internals");function Kt(e){return e&&String(e).trim().toLowerCase()}function An(e){return e===!1||e==null?e:_.isArray(e)?e.map(An):String(e)}function yd(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let a;for(;a=n.exec(e);)t[a[1]]=a[2];return t}const bd=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Ua(e,t,n,a,s){if(_.isFunction(a))return a.call(this,t,n);if(s&&(t=n),!!_.isString(t)){if(_.isString(a))return t.indexOf(a)!==-1;if(_.isRegExp(a))return a.test(t)}}function $d(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,a)=>n.toUpperCase()+a)}function wd(e,t){const n=_.toCamelCase(" "+t);["get","set","has"].forEach(a=>{Object.defineProperty(e,a+n,{value:function(s,i,r){return this[a].call(this,t,s,i,r)},configurable:!0})})}class ge{constructor(t){t&&this.set(t)}set(t,n,a){const s=this;function i(c,l,o){const u=Kt(l);if(!u)throw new Error("header name must be a non-empty string");const p=_.findKey(s,u);(!p||s[p]===void 0||o===!0||o===void 0&&s[p]!==!1)&&(s[p||l]=An(c))}const r=(c,l)=>_.forEach(c,(o,u)=>i(o,u,l));if(_.isPlainObject(t)||t instanceof this.constructor)r(t,n);else if(_.isString(t)&&(t=t.trim())&&!bd(t))r(gd(t),n);else if(_.isHeaders(t))for(const[c,l]of t.entries())i(l,c,a);else t!=null&&i(n,t,a);return this}get(t,n){if(t=Kt(t),t){const a=_.findKey(this,t);if(a){const s=this[a];if(!n)return s;if(n===!0)return yd(s);if(_.isFunction(n))return n.call(this,s,a);if(_.isRegExp(n))return n.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Kt(t),t){const a=_.findKey(this,t);return!!(a&&this[a]!==void 0&&(!n||Ua(this,this[a],a,n)))}return!1}delete(t,n){const a=this;let s=!1;function i(r){if(r=Kt(r),r){const c=_.findKey(a,r);c&&(!n||Ua(a,a[c],c,n))&&(delete a[c],s=!0)}}return _.isArray(t)?t.forEach(i):i(t),s}clear(t){const n=Object.keys(this);let a=n.length,s=!1;for(;a--;){const i=n[a];(!t||Ua(this,this[i],i,t,!0))&&(delete this[i],s=!0)}return s}normalize(t){const n=this,a={};return _.forEach(this,(s,i)=>{const r=_.findKey(a,i);if(r){n[r]=An(s),delete n[i];return}const c=t?$d(i):String(i).trim();c!==i&&delete n[i],n[c]=An(s),a[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return _.forEach(this,(a,s)=>{a!=null&&a!==!1&&(n[s]=t&&_.isArray(a)?a.join(", "):a)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(`
14
+ `)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const a=new this(t);return n.forEach(s=>a.set(s)),a}static accessor(t){const a=(this[Sr]=this[Sr]={accessors:{}}).accessors,s=this.prototype;function i(r){const c=Kt(r);a[c]||(wd(s,r),a[c]=!0)}return _.isArray(t)?t.forEach(i):i(t),this}}ge.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);_.reduceDescriptors(ge.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(a){this[n]=a}}});_.freezeMethods(ge);function Ba(e,t){const n=this||pn,a=t||n,s=ge.from(a.headers);let i=a.data;return _.forEach(e,function(c){i=c.call(n,i,s.normalize(),t?t.status:void 0)}),s.normalize(),i}function Dc(e){return!!(e&&e.__CANCEL__)}function ct(e,t,n){D.call(this,e??"canceled",D.ERR_CANCELED,t,n),this.name="CanceledError"}_.inherits(ct,D,{__CANCEL__:!0});function Ot(e,t,n){const a=n.config.validateStatus;!n.status||!a||a(n.status)?e(n):t(new D("Request failed with status code "+n.status,[D.ERR_BAD_REQUEST,D.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function _d(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Ed(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Bs(e,t){return e&&!_d(t)?Ed(e,t):t}var Sd=Jn.parse,Rd={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},kd=String.prototype.endsWith||function(e){return e.length<=this.length&&this.indexOf(e,this.length-e.length)!==-1};function jd(e){var t=typeof e=="string"?Sd(e):e||{},n=t.protocol,a=t.host,s=t.port;if(typeof a!="string"||!a||typeof n!="string"||(n=n.split(":",1)[0],a=a.replace(/:\d*$/,""),s=parseInt(s)||Rd[n]||0,!Td(a,s)))return"";var i=Pt("npm_config_"+n+"_proxy")||Pt(n+"_proxy")||Pt("npm_config_proxy")||Pt("all_proxy");return i&&i.indexOf("://")===-1&&(i=n+"://"+i),i}function Td(e,t){var n=(Pt("npm_config_no_proxy")||Pt("no_proxy")).toLowerCase();return n?n==="*"?!1:n.split(/[,\s]/).every(function(a){if(!a)return!0;var s=a.match(/^(.+):(\d+)$/),i=s?s[1]:a,r=s?parseInt(s[2]):0;return r&&r!==t?!0:/^[.*]/.test(i)?(i.charAt(0)==="*"&&(i=i.slice(1)),!kd.call(e,i)):e!==i}):!0}function Pt(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}var Od=jd,Vs={exports:{}},gn={exports:{}},yn={exports:{}},Va,Rr;function Pd(){if(Rr)return Va;Rr=1;var e=1e3,t=e*60,n=t*60,a=n*24,s=a*7,i=a*365.25;Va=function(u,p){p=p||{};var f=typeof u;if(f==="string"&&u.length>0)return r(u);if(f==="number"&&isFinite(u))return p.long?l(u):c(u);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(u))};function r(u){if(u=String(u),!(u.length>100)){var p=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(u);if(p){var f=parseFloat(p[1]),h=(p[2]||"ms").toLowerCase();switch(h){case"years":case"year":case"yrs":case"yr":case"y":return f*i;case"weeks":case"week":case"w":return f*s;case"days":case"day":case"d":return f*a;case"hours":case"hour":case"hrs":case"hr":case"h":return f*n;case"minutes":case"minute":case"mins":case"min":case"m":return f*t;case"seconds":case"second":case"secs":case"sec":case"s":return f*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return f;default:return}}}}function c(u){var p=Math.abs(u);return p>=a?Math.round(u/a)+"d":p>=n?Math.round(u/n)+"h":p>=t?Math.round(u/t)+"m":p>=e?Math.round(u/e)+"s":u+"ms"}function l(u){var p=Math.abs(u);return p>=a?o(u,p,a,"day"):p>=n?o(u,p,n,"hour"):p>=t?o(u,p,t,"minute"):p>=e?o(u,p,e,"second"):u+" ms"}function o(u,p,f,h){var m=p>=f*1.5;return Math.round(u/f)+" "+h+(m?"s":"")}return Va}var Ha,kr;function Fc(){if(kr)return Ha;kr=1;function e(t){a.debug=a,a.default=a,a.coerce=o,a.disable=r,a.enable=i,a.enabled=c,a.humanize=Pd(),a.destroy=u,Object.keys(t).forEach(p=>{a[p]=t[p]}),a.names=[],a.skips=[],a.formatters={};function n(p){let f=0;for(let h=0;h<p.length;h++)f=(f<<5)-f+p.charCodeAt(h),f|=0;return a.colors[Math.abs(f)%a.colors.length]}a.selectColor=n;function a(p){let f,h=null,m,y;function x(...v){if(!x.enabled)return;const $=x,E=Number(new Date),O=E-(f||E);$.diff=O,$.prev=f,$.curr=E,f=E,v[0]=a.coerce(v[0]),typeof v[0]!="string"&&v.unshift("%O");let P=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(X,ae)=>{if(X==="%%")return"%";P++;const re=a.formatters[ae];if(typeof re=="function"){const de=v[P];X=re.call($,de),v.splice(P,1),P--}return X}),a.formatArgs.call($,v),($.log||a.log).apply($,v)}return x.namespace=p,x.useColors=a.useColors(),x.color=a.selectColor(p),x.extend=s,x.destroy=a.destroy,Object.defineProperty(x,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(m!==a.namespaces&&(m=a.namespaces,y=a.enabled(p)),y),set:v=>{h=v}}),typeof a.init=="function"&&a.init(x),x}function s(p,f){const h=a(this.namespace+(typeof f>"u"?":":f)+p);return h.log=this.log,h}function i(p){a.save(p),a.namespaces=p,a.names=[],a.skips=[];let f;const h=(typeof p=="string"?p:"").split(/[\s,]+/),m=h.length;for(f=0;f<m;f++)h[f]&&(p=h[f].replace(/\*/g,".*?"),p[0]==="-"?a.skips.push(new RegExp("^"+p.slice(1)+"$")):a.names.push(new RegExp("^"+p+"$")))}function r(){const p=[...a.names.map(l),...a.skips.map(l).map(f=>"-"+f)].join(",");return a.enable(""),p}function c(p){if(p[p.length-1]==="*")return!0;let f,h;for(f=0,h=a.skips.length;f<h;f++)if(a.skips[f].test(p))return!1;for(f=0,h=a.names.length;f<h;f++)if(a.names[f].test(p))return!0;return!1}function l(p){return p.toString().substring(2,p.toString().length-2).replace(/\.\*\?$/,"*")}function o(p){return p instanceof Error?p.stack||p.message:p}function u(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return a.enable(a.load()),a}return Ha=e,Ha}var jr;function Nd(){return jr||(jr=1,function(e,t){t.formatArgs=a,t.save=s,t.load=i,t.useColors=n,t.storage=r(),t.destroy=(()=>{let l=!1;return()=>{l||(l=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function n(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function a(l){if(l[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+l[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const o="color: "+this.color;l.splice(1,0,o,"color: inherit");let u=0,p=0;l[0].replace(/%[a-zA-Z%]/g,f=>{f!=="%%"&&(u++,f==="%c"&&(p=u))}),l.splice(p,0,o)}t.log=console.debug||console.log||(()=>{});function s(l){try{l?t.storage.setItem("debug",l):t.storage.removeItem("debug")}catch{}}function i(){let l;try{l=t.storage.getItem("debug")}catch{}return!l&&typeof process<"u"&&"env"in process&&(l=process.env.DEBUG),l}function r(){try{return localStorage}catch{}}e.exports=Fc()(t);const{formatters:c}=e.exports;c.j=function(l){try{return JSON.stringify(l)}catch(o){return"[UnexpectedJSONParseError]: "+o.message}}}(yn,yn.exports)),yn.exports}var bn={exports:{}},Ga,Tr;function Ad(){return Tr||(Tr=1,Ga=(e,t)=>{t=t||process.argv;const n=e.startsWith("-")?"":e.length===1?"-":"--",a=t.indexOf(n+e),s=t.indexOf("--");return a!==-1&&(s===-1?!0:a<s)}),Ga}var Ka,Or;function Cd(){if(Or)return Ka;Or=1;const e=xu,t=Ad(),n=process.env;let a;t("no-color")||t("no-colors")||t("color=false")?a=!1:(t("color")||t("colors")||t("color=true")||t("color=always"))&&(a=!0),"FORCE_COLOR"in n&&(a=n.FORCE_COLOR.length===0||parseInt(n.FORCE_COLOR,10)!==0);function s(c){return c===0?!1:{level:c,hasBasic:!0,has256:c>=2,has16m:c>=3}}function i(c){if(a===!1)return 0;if(t("color=16m")||t("color=full")||t("color=truecolor"))return 3;if(t("color=256"))return 2;if(c&&!c.isTTY&&a!==!0)return 0;const l=a?1:0;if(process.platform==="win32"){const o=e.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in n)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in n)||n.CI_NAME==="codeship"?1:l;if("TEAMCITY_VERSION"in n)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(n.TEAMCITY_VERSION)?1:0;if(n.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in n){const o=parseInt((n.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(n.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(n.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(n.TERM)||"COLORTERM"in n?1:(n.TERM==="dumb",l)}function r(c){const l=i(c);return s(l)}return Ka={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)},Ka}var Pr;function Id(){return Pr||(Pr=1,function(e,t){const n=vu,a=Dt;t.init=u,t.log=c,t.formatArgs=i,t.save=l,t.load=o,t.useColors=s,t.destroy=a.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{const f=Cd();f&&(f.stderr||f).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}t.inspectOpts=Object.keys(process.env).filter(f=>/^debug_/i.test(f)).reduce((f,h)=>{const m=h.substring(6).toLowerCase().replace(/_([a-z])/g,(x,v)=>v.toUpperCase());let y=process.env[h];return/^(yes|on|true|enabled)$/i.test(y)?y=!0:/^(no|off|false|disabled)$/i.test(y)?y=!1:y==="null"?y=null:y=Number(y),f[m]=y,f},{});function s(){return"colors"in t.inspectOpts?!!t.inspectOpts.colors:n.isatty(process.stderr.fd)}function i(f){const{namespace:h,useColors:m}=this;if(m){const y=this.color,x="\x1B[3"+(y<8?y:"8;5;"+y),v=` ${x};1m${h} \x1B[0m`;f[0]=v+f[0].split(`
15
+ `).join(`
16
+ `+v),f.push(x+"m+"+e.exports.humanize(this.diff)+"\x1B[0m")}else f[0]=r()+h+" "+f[0]}function r(){return t.inspectOpts.hideDate?"":new Date().toISOString()+" "}function c(...f){return process.stderr.write(a.format(...f)+`
17
+ `)}function l(f){f?process.env.DEBUG=f:delete process.env.DEBUG}function o(){return process.env.DEBUG}function u(f){f.inspectOpts={};const h=Object.keys(t.inspectOpts);for(let m=0;m<h.length;m++)f.inspectOpts[h[m]]=t.inspectOpts[h[m]]}e.exports=Fc()(t);const{formatters:p}=e.exports;p.o=function(f){return this.inspectOpts.colors=this.useColors,a.inspect(f,this.inspectOpts).split(`
18
+ `).map(h=>h.trim()).join(" ")},p.O=function(f){return this.inspectOpts.colors=this.useColors,a.inspect(f,this.inspectOpts)}}(bn,bn.exports)),bn.exports}var Nr;function Ld(){return Nr||(Nr=1,typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?gn.exports=Nd():gn.exports=Id()),gn.exports}var Wt,Dd=function(){if(!Wt){try{Wt=Ld()("follow-redirects")}catch{}typeof Wt!="function"&&(Wt=function(){})}Wt.apply(null,arguments)},dn=Jn,on=dn.URL,Fd=Ls,zd=Ds,Hs=je.Writable,Gs=hu,zc=Dd;(function(){var t=typeof process<"u",n=typeof window<"u"&&typeof document<"u",a=xt(Error.captureStackTrace);!t&&(n||!a)&&console.warn("The follow-redirects package should be excluded from browser builds.")})();var Ks=!1;try{Gs(new on(""))}catch(e){Ks=e.code==="ERR_INVALID_URL"}var qd=["auth","host","hostname","href","path","pathname","port","protocol","query","search","hash"],Ws=["abort","aborted","connect","error","socket","timeout"],Xs=Object.create(null);Ws.forEach(function(e){Xs[e]=function(t,n,a){this._redirectable.emit(e,t,n,a)}});var xs=mn("ERR_INVALID_URL","Invalid URL",TypeError),gs=mn("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),Md=mn("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded",gs),Ud=mn("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),Bd=mn("ERR_STREAM_WRITE_AFTER_END","write after end"),Vd=Hs.prototype.destroy||Mc;function Re(e,t){Hs.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],t&&this.on("response",t);var n=this;this._onNativeResponse=function(a){try{n._processResponse(a)}catch(s){n.emit("error",s instanceof gs?s:new gs({cause:s}))}},this._performRequest()}Re.prototype=Object.create(Hs.prototype);Re.prototype.abort=function(){Ys(this._currentRequest),this._currentRequest.abort(),this.emit("abort")};Re.prototype.destroy=function(e){return Ys(this._currentRequest,e),Vd.call(this,e),this};Re.prototype.write=function(e,t,n){if(this._ending)throw new Bd;if(!ht(e)&&!Kd(e))throw new TypeError("data should be a string, Buffer or Uint8Array");if(xt(t)&&(n=t,t=null),e.length===0){n&&n();return}this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:t}),this._currentRequest.write(e,t,n)):(this.emit("error",new Ud),this.abort())};Re.prototype.end=function(e,t,n){if(xt(e)?(n=e,e=t=null):xt(t)&&(n=t,t=null),!e)this._ended=this._ending=!0,this._currentRequest.end(null,null,n);else{var a=this,s=this._currentRequest;this.write(e,t,function(){a._ended=!0,s.end(null,null,n)}),this._ending=!0}};Re.prototype.setHeader=function(e,t){this._options.headers[e]=t,this._currentRequest.setHeader(e,t)};Re.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)};Re.prototype.setTimeout=function(e,t){var n=this;function a(r){r.setTimeout(e),r.removeListener("timeout",r.destroy),r.addListener("timeout",r.destroy)}function s(r){n._timeout&&clearTimeout(n._timeout),n._timeout=setTimeout(function(){n.emit("timeout"),i()},e),a(r)}function i(){n._timeout&&(clearTimeout(n._timeout),n._timeout=null),n.removeListener("abort",i),n.removeListener("error",i),n.removeListener("response",i),n.removeListener("close",i),t&&n.removeListener("timeout",t),n.socket||n._currentRequest.removeListener("socket",s)}return t&&this.on("timeout",t),this.socket?s(this.socket):this._currentRequest.once("socket",s),this.on("socket",a),this.on("abort",i),this.on("error",i),this.on("response",i),this.on("close",i),this};["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach(function(e){Re.prototype[e]=function(t,n){return this._currentRequest[e](t,n)}});["aborted","connection","socket"].forEach(function(e){Object.defineProperty(Re.prototype,e,{get:function(){return this._currentRequest[e]}})});Re.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var t=e.path.indexOf("?");t<0?e.pathname=e.path:(e.pathname=e.path.substring(0,t),e.search=e.path.substring(t))}};Re.prototype._performRequest=function(){var e=this._options.protocol,t=this._options.nativeProtocols[e];if(!t)throw new TypeError("Unsupported protocol "+e);if(this._options.agents){var n=e.slice(0,-1);this._options.agent=this._options.agents[n]}var a=this._currentRequest=t.request(this._options,this._onNativeResponse);a._redirectable=this;for(var s of Ws)a.on(s,Xs[s]);if(this._currentUrl=/^\//.test(this._options.path)?dn.format(this._options):this._options.path,this._isRedirect){var i=0,r=this,c=this._requestBodyBuffers;(function l(o){if(a===r._currentRequest)if(o)r.emit("error",o);else if(i<c.length){var u=c[i++];a.finished||a.write(u.data,u.encoding,l)}else r._ended&&a.end()})()}};Re.prototype._processResponse=function(e){var t=e.statusCode;this._options.trackRedirects&&this._redirects.push({url:this._currentUrl,headers:e.headers,statusCode:t});var n=e.headers.location;if(!n||this._options.followRedirects===!1||t<300||t>=400){e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),this._requestBodyBuffers=[];return}if(Ys(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)throw new Md;var a,s=this._options.beforeRedirect;s&&(a=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var i=this._options.method;((t===301||t===302)&&this._options.method==="POST"||t===303&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],Wa(/^content-/i,this._options.headers));var r=Wa(/^host$/i,this._options.headers),c=Js(this._currentUrl),l=r||c.host,o=/^\w+:/.test(n)?this._currentUrl:dn.format(Object.assign(c,{host:l})),u=Hd(n,o);if(zc("redirecting to",u.href),this._isRedirect=!0,ys(u,this._options),(u.protocol!==c.protocol&&u.protocol!=="https:"||u.host!==l&&!Gd(u.host,l))&&Wa(/^(?:(?:proxy-)?authorization|cookie)$/i,this._options.headers),xt(s)){var p={headers:e.headers,statusCode:t},f={url:o,method:i,headers:a};s(this._options,p,f),this._sanitizeOptions(this._options)}this._performRequest()};function qc(e){var t={maxRedirects:21,maxBodyLength:10485760},n={};return Object.keys(e).forEach(function(a){var s=a+":",i=n[s]=e[a],r=t[a]=Object.create(i);function c(o,u,p){return Wd(o)?o=ys(o):ht(o)?o=ys(Js(o)):(p=u,u=Uc(o),o={protocol:s}),xt(u)&&(p=u,u=null),u=Object.assign({maxRedirects:t.maxRedirects,maxBodyLength:t.maxBodyLength},o,u),u.nativeProtocols=n,!ht(u.host)&&!ht(u.hostname)&&(u.hostname="::1"),Gs.equal(u.protocol,s,"protocol mismatch"),zc("options",u),new Re(u,p)}function l(o,u,p){var f=r.request(o,u,p);return f.end(),f}Object.defineProperties(r,{request:{value:c,configurable:!0,enumerable:!0,writable:!0},get:{value:l,configurable:!0,enumerable:!0,writable:!0}})}),t}function Mc(){}function Js(e){var t;if(Ks)t=new on(e);else if(t=Uc(dn.parse(e)),!ht(t.protocol))throw new xs({input:e});return t}function Hd(e,t){return Ks?new on(e,t):Js(dn.resolve(t,e))}function Uc(e){if(/^\[/.test(e.hostname)&&!/^\[[:0-9a-f]+\]$/i.test(e.hostname))throw new xs({input:e.href||e});if(/^\[/.test(e.host)&&!/^\[[:0-9a-f]+\](:\d+)?$/i.test(e.host))throw new xs({input:e.href||e});return e}function ys(e,t){var n=t||{};for(var a of qd)n[a]=e[a];return n.hostname.startsWith("[")&&(n.hostname=n.hostname.slice(1,-1)),n.port!==""&&(n.port=Number(n.port)),n.path=n.search?n.pathname+n.search:n.pathname,n}function Wa(e,t){var n;for(var a in t)e.test(a)&&(n=t[a],delete t[a]);return n===null||typeof n>"u"?void 0:String(n).trim()}function mn(e,t,n){function a(s){xt(Error.captureStackTrace)&&Error.captureStackTrace(this,this.constructor),Object.assign(this,s||{}),this.code=e,this.message=this.cause?t+": "+this.cause.message:t}return a.prototype=new(n||Error),Object.defineProperties(a.prototype,{constructor:{value:a,enumerable:!1},name:{value:"Error ["+e+"]",enumerable:!1}}),a}function Ys(e,t){for(var n of Ws)e.removeListener(n,Xs[n]);e.on("error",Mc),e.destroy(t)}function Gd(e,t){Gs(ht(e)&&ht(t));var n=e.length-t.length-1;return n>0&&e[n]==="."&&e.endsWith(t)}function ht(e){return typeof e=="string"||e instanceof String}function xt(e){return typeof e=="function"}function Kd(e){return typeof e=="object"&&"length"in e}function Wd(e){return on&&e instanceof on}Vs.exports=qc({http:Fd,https:zd});Vs.exports.wrap=qc;var Xd=Vs.exports;const Jd=aa(Xd),qn="1.7.7";function Bc(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}const Yd=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function Zd(e,t,n){const a=n&&n.Blob||fe.classes.Blob,s=Bc(e);if(t===void 0&&a&&(t=!0),s==="data"){e=s.length?e.slice(s.length+1):e;const i=Yd.exec(e);if(!i)throw new D("Invalid URL",D.ERR_INVALID_URL);const r=i[1],c=i[2],l=i[3],o=Buffer.from(decodeURIComponent(l),c?"base64":"utf8");if(t){if(!a)throw new D("Blob is not supported",D.ERR_NOT_SUPPORT);return new a([o],{type:r})}return o}throw new D("Unsupported protocol "+s,D.ERR_NOT_SUPPORT)}const Xa=Symbol("internals");class Ar extends je.Transform{constructor(t){t=_.toFlatObject(t,{maxRate:0,chunkSize:64*1024,minChunkSize:100,timeWindow:500,ticksRate:2,samplesCount:15},null,(a,s)=>!_.isUndefined(s[a])),super({readableHighWaterMark:t.chunkSize});const n=this[Xa]={timeWindow:t.timeWindow,chunkSize:t.chunkSize,maxRate:t.maxRate,minChunkSize:t.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null};this.on("newListener",a=>{a==="progress"&&(n.isCaptured||(n.isCaptured=!0))})}_read(t){const n=this[Xa];return n.onReadCallback&&n.onReadCallback(),super._read(t)}_transform(t,n,a){const s=this[Xa],i=s.maxRate,r=this.readableHighWaterMark,c=s.timeWindow,l=1e3/c,o=i/l,u=s.minChunkSize!==!1?Math.max(s.minChunkSize,o*.01):0,p=(h,m)=>{const y=Buffer.byteLength(h);s.bytesSeen+=y,s.bytes+=y,s.isCaptured&&this.emit("progress",s.bytesSeen),this.push(h)?process.nextTick(m):s.onReadCallback=()=>{s.onReadCallback=null,process.nextTick(m)}},f=(h,m)=>{const y=Buffer.byteLength(h);let x=null,v=r,$,E=0;if(i){const O=Date.now();(!s.ts||(E=O-s.ts)>=c)&&(s.ts=O,$=o-s.bytes,s.bytes=$<0?-$:0,E=0),$=o-s.bytes}if(i){if($<=0)return setTimeout(()=>{m(null,h)},c-E);$<v&&(v=$)}v&&y>v&&y-v>u&&(x=h.subarray(v),h=h.subarray(0,v)),p(h,x?()=>{process.nextTick(m,null,x)}:m)};f(t,function h(m,y){if(m)return a(m);y?f(y,h):a(null)})}}const{asyncIterator:Cr}=Symbol,Vc=async function*(e){e.stream?yield*e.stream():e.arrayBuffer?yield await e.arrayBuffer():e[Cr]?yield*e[Cr]():yield e},Qd=_.ALPHABET.ALPHA_DIGIT+"-_",cn=new Dt.TextEncoder,at=`\r
19
+ `,em=cn.encode(at),tm=2;class nm{constructor(t,n){const{escapeName:a}=this.constructor,s=_.isString(n);let i=`Content-Disposition: form-data; name="${a(t)}"${!s&&n.name?`; filename="${a(n.name)}"`:""}${at}`;s?n=cn.encode(String(n).replace(/\r?\n|\r\n?/g,at)):i+=`Content-Type: ${n.type||"application/octet-stream"}${at}`,this.headers=cn.encode(i+at),this.contentLength=s?n.byteLength:n.size,this.size=this.headers.byteLength+this.contentLength+tm,this.name=t,this.value=n}async*encode(){yield this.headers;const{value:t}=this;_.isTypedArray(t)?yield t:yield*Vc(t),yield em}static escapeName(t){return String(t).replace(/[\r\n"]/g,n=>({"\r":"%0D","\n":"%0A",'"':"%22"})[n])}}const am=(e,t,n)=>{const{tag:a="form-data-boundary",size:s=25,boundary:i=a+"-"+_.generateString(s,Qd)}=n||{};if(!_.isFormData(e))throw TypeError("FormData instance required");if(i.length<1||i.length>70)throw Error("boundary must be 10-70 characters long");const r=cn.encode("--"+i+at),c=cn.encode("--"+i+"--"+at+at);let l=c.byteLength;const o=Array.from(e.entries()).map(([p,f])=>{const h=new nm(p,f);return l+=h.size,h});l+=r.byteLength*o.length,l=_.toFiniteNumber(l);const u={"Content-Type":`multipart/form-data; boundary=${i}`};return Number.isFinite(l)&&(u["Content-Length"]=l),t&&t(u),je.Readable.from(async function*(){for(const p of o)yield r,yield*p.encode();yield c}())};class sm extends je.Transform{__transform(t,n,a){this.push(t),a()}_transform(t,n,a){if(t.length!==0&&(this._transform=this.__transform,t[0]!==120)){const s=Buffer.alloc(2);s[0]=120,s[1]=156,this.push(s,n)}this.__transform(t,n,a)}}const im=(e,t)=>_.isAsyncFn(e)?function(...n){const a=n.pop();e.apply(this,n).then(s=>{try{t?a(null,...t(s)):a(null,s)}catch(i){a(i)}},a)}:e;function rm(e,t){e=e||10;const n=new Array(e),a=new Array(e);let s=0,i=0,r;return t=t!==void 0?t:1e3,function(l){const o=Date.now(),u=a[i];r||(r=o),n[s]=l,a[s]=o;let p=i,f=0;for(;p!==s;)f+=n[p++],p=p%e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),o-r<t)return;const h=u&&o-u;return h?Math.round(f*1e3/h):void 0}}function om(e,t){let n=0,a=1e3/t,s,i;const r=(o,u=Date.now())=>{n=u,s=null,i&&(clearTimeout(i),i=null),e.apply(null,o)};return[(...o)=>{const u=Date.now(),p=u-n;p>=a?r(o,u):(s=o,i||(i=setTimeout(()=>{i=null,r(s)},a-p)))},()=>s&&r(s)]}const It=(e,t,n=3)=>{let a=0;const s=rm(50,250);return om(i=>{const r=i.loaded,c=i.lengthComputable?i.total:void 0,l=r-a,o=s(l),u=r<=c;a=r;const p={loaded:r,total:c,progress:c?r/c:void 0,bytes:l,rate:o||void 0,estimated:o&&c&&u?(c-r)/o:void 0,event:i,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(p)},n)},Mn=(e,t)=>{const n=e!=null;return[a=>t[0]({lengthComputable:n,total:e,loaded:a}),t[1]]},Un=e=>(...t)=>_.asap(()=>e(...t)),Ir={flush:it.constants.Z_SYNC_FLUSH,finishFlush:it.constants.Z_SYNC_FLUSH},cm={flush:it.constants.BROTLI_OPERATION_FLUSH,finishFlush:it.constants.BROTLI_OPERATION_FLUSH},Lr=_.isFunction(it.createBrotliDecompress),{http:lm,https:um}=Jd,pm=/https:?/,Dr=fe.protocols.map(e=>e+":"),Fr=(e,[t,n])=>(e.on("end",n).on("error",n),t);function dm(e,t){e.beforeRedirects.proxy&&e.beforeRedirects.proxy(e),e.beforeRedirects.config&&e.beforeRedirects.config(e,t)}function Hc(e,t,n){let a=t;if(!a&&a!==!1){const s=Od(n);s&&(a=new URL(s))}if(a){if(a.username&&(a.auth=(a.username||"")+":"+(a.password||"")),a.auth){(a.auth.username||a.auth.password)&&(a.auth=(a.auth.username||"")+":"+(a.auth.password||""));const i=Buffer.from(a.auth,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+i}e.headers.host=e.hostname+(e.port?":"+e.port:"");const s=a.hostname||a.host;e.hostname=s,e.host=s,e.port=a.port,e.path=n,a.protocol&&(e.protocol=a.protocol.includes(":")?a.protocol:`${a.protocol}:`)}e.beforeRedirects.proxy=function(i){Hc(i,t,i.href)}}const mm=typeof process<"u"&&_.kindOf(process)==="process",fm=e=>new Promise((t,n)=>{let a,s;const i=(l,o)=>{s||(s=!0,a&&a(l,o))},r=l=>{i(l),t(l)},c=l=>{i(l,!0),n(l)};e(r,c,l=>a=l).catch(c)}),hm=({address:e,family:t})=>{if(!_.isString(e))throw TypeError("address must be a string");return{address:e,family:t||(e.indexOf(".")<0?6:4)}},zr=(e,t)=>hm(_.isObject(e)?e:{address:e,family:t}),vm=mm&&function(t){return fm(async function(a,s,i){let{data:r,lookup:c,family:l}=t;const{responseType:o,responseEncoding:u}=t,p=t.method.toUpperCase();let f,h=!1,m;if(c){const T=im(c,A=>_.isArray(A)?A:[A]);c=(A,C,R)=>{T(A,C,(b,S,w)=>{if(b)return R(b);const d=_.isArray(S)?S.map(g=>zr(g)):[zr(S,w)];C.all?R(b,d):R(b,d[0].address,d[0].family)})}}const y=new gu.EventEmitter,x=()=>{t.cancelToken&&t.cancelToken.unsubscribe(v),t.signal&&t.signal.removeEventListener("abort",v),y.removeAllListeners()};i((T,A)=>{f=!0,A&&(h=!0,x())});function v(T){y.emit("abort",!T||T.type?new ct(null,t,m):T)}y.once("abort",s),(t.cancelToken||t.signal)&&(t.cancelToken&&t.cancelToken.subscribe(v),t.signal&&(t.signal.aborted?v():t.signal.addEventListener("abort",v)));const $=Bs(t.baseURL,t.url),E=new URL($,fe.hasBrowserEnv?fe.origin:void 0),O=E.protocol||Dr[0];if(O==="data:"){let T;if(p!=="GET")return Ot(a,s,{status:405,statusText:"method not allowed",headers:{},config:t});try{T=Zd(t.url,o==="blob",{Blob:t.env&&t.env.Blob})}catch(A){throw D.from(A,D.ERR_BAD_REQUEST,t)}return o==="text"?(T=T.toString(u),(!u||u==="utf8")&&(T=_.stripBOM(T))):o==="stream"&&(T=je.Readable.from(T)),Ot(a,s,{data:T,status:200,statusText:"OK",headers:new ge,config:t})}if(Dr.indexOf(O)===-1)return s(new D("Unsupported protocol "+O,D.ERR_BAD_REQUEST,t));const P=ge.from(t.headers).normalize();P.set("User-Agent","axios/"+qn,!1);const{onUploadProgress:K,onDownloadProgress:X}=t,ae=t.maxRate;let re,de;if(_.isSpecCompliantForm(r)){const T=P.getContentType(/boundary=([-_\w\d]{10,70})/i);r=am(r,A=>{P.set(A)},{tag:`axios-${qn}-boundary`,boundary:T&&T[1]||void 0})}else if(_.isFormData(r)&&_.isFunction(r.getHeaders)){if(P.set(r.getHeaders()),!P.hasContentLength())try{const T=await Dt.promisify(r.getLength).call(r);Number.isFinite(T)&&T>=0&&P.setContentLength(T)}catch{}}else if(_.isBlob(r))r.size&&P.setContentType(r.type||"application/octet-stream"),P.setContentLength(r.size||0),r=je.Readable.from(Vc(r));else if(r&&!_.isStream(r)){if(!Buffer.isBuffer(r))if(_.isArrayBuffer(r))r=Buffer.from(new Uint8Array(r));else if(_.isString(r))r=Buffer.from(r,"utf-8");else return s(new D("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",D.ERR_BAD_REQUEST,t));if(P.setContentLength(r.length,!1),t.maxBodyLength>-1&&r.length>t.maxBodyLength)return s(new D("Request body larger than maxBodyLength limit",D.ERR_BAD_REQUEST,t))}const M=_.toFiniteNumber(P.getContentLength());_.isArray(ae)?(re=ae[0],de=ae[1]):re=de=ae,r&&(K||re)&&(_.isStream(r)||(r=je.Readable.from(r,{objectMode:!1})),r=je.pipeline([r,new Ar({maxRate:_.toFiniteNumber(re)})],_.noop),K&&r.on("progress",Fr(r,Mn(M,It(Un(K),!1,3)))));let B;if(t.auth){const T=t.auth.username||"",A=t.auth.password||"";B=T+":"+A}if(!B&&E.username){const T=E.username,A=E.password;B=T+":"+A}B&&P.delete("authorization");let ee;try{ee=qs(E.pathname+E.search,t.params,t.paramsSerializer).replace(/^\?/,"")}catch(T){const A=new Error(T.message);return A.config=t,A.url=t.url,A.exists=!0,s(A)}P.set("Accept-Encoding","gzip, compress, deflate"+(Lr?", br":""),!1);const j={path:ee,method:p,headers:P.toJSON(),agents:{http:t.httpAgent,https:t.httpsAgent},auth:B,protocol:O,family:l,beforeRedirect:dm,beforeRedirects:{}};!_.isUndefined(c)&&(j.lookup=c),t.socketPath?j.socketPath=t.socketPath:(j.hostname=E.hostname.startsWith("[")?E.hostname.slice(1,-1):E.hostname,j.port=E.port,Hc(j,t.proxy,O+"//"+E.hostname+(E.port?":"+E.port:"")+j.path));let N;const F=pm.test(j.protocol);if(j.agent=F?t.httpsAgent:t.httpAgent,t.transport?N=t.transport:t.maxRedirects===0?N=F?Ds:Ls:(t.maxRedirects&&(j.maxRedirects=t.maxRedirects),t.beforeRedirect&&(j.beforeRedirects.config=t.beforeRedirect),N=F?um:lm),t.maxBodyLength>-1?j.maxBodyLength=t.maxBodyLength:j.maxBodyLength=1/0,t.insecureHTTPParser&&(j.insecureHTTPParser=t.insecureHTTPParser),m=N.request(j,function(A){if(m.destroyed)return;const C=[A],R=+A.headers["content-length"];if(X||de){const g=new Ar({maxRate:_.toFiniteNumber(de)});X&&g.on("progress",Fr(g,Mn(R,It(Un(X),!0,3)))),C.push(g)}let b=A;const S=A.req||m;if(t.decompress!==!1&&A.headers["content-encoding"])switch((p==="HEAD"||A.statusCode===204)&&delete A.headers["content-encoding"],(A.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":C.push(it.createUnzip(Ir)),delete A.headers["content-encoding"];break;case"deflate":C.push(new sm),C.push(it.createUnzip(Ir)),delete A.headers["content-encoding"];break;case"br":Lr&&(C.push(it.createBrotliDecompress(cm)),delete A.headers["content-encoding"])}b=C.length>1?je.pipeline(C,_.noop):C[0];const w=je.finished(b,()=>{w(),x()}),d={status:A.statusCode,statusText:A.statusMessage,headers:new ge(A.headers),config:t,request:S};if(o==="stream")d.data=b,Ot(a,s,d);else{const g=[];let k=0;b.on("data",function(L){g.push(L),k+=L.length,t.maxContentLength>-1&&k>t.maxContentLength&&(h=!0,b.destroy(),s(new D("maxContentLength size of "+t.maxContentLength+" exceeded",D.ERR_BAD_RESPONSE,t,S)))}),b.on("aborted",function(){if(h)return;const L=new D("maxContentLength size of "+t.maxContentLength+" exceeded",D.ERR_BAD_RESPONSE,t,S);b.destroy(L),s(L)}),b.on("error",function(L){m.destroyed||s(D.from(L,null,t,S))}),b.on("end",function(){try{let L=g.length===1?g[0]:Buffer.concat(g);o!=="arraybuffer"&&(L=L.toString(u),(!u||u==="utf8")&&(L=_.stripBOM(L))),d.data=L}catch(L){return s(D.from(L,null,t,d.request,d))}Ot(a,s,d)})}y.once("abort",g=>{b.destroyed||(b.emit("error",g),b.destroy())})}),y.once("abort",T=>{s(T),m.destroy(T)}),m.on("error",function(A){s(D.from(A,null,t,m))}),m.on("socket",function(A){A.setKeepAlive(!0,1e3*60)}),t.timeout){const T=parseInt(t.timeout,10);if(Number.isNaN(T)){s(new D("error trying to parse `config.timeout` to int",D.ERR_BAD_OPTION_VALUE,t,m));return}m.setTimeout(T,function(){if(f)return;let C=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded";const R=t.transitional||Ms;t.timeoutErrorMessage&&(C=t.timeoutErrorMessage),s(new D(C,R.clarifyTimeoutError?D.ETIMEDOUT:D.ECONNABORTED,t,m)),v()})}if(_.isStream(r)){let T=!1,A=!1;r.on("end",()=>{T=!0}),r.once("error",C=>{A=!0,m.destroy(C)}),r.on("close",()=>{!T&&!A&&v(new ct("Request stream has been aborted",t,m))}),r.pipe(m)}else m.end(r)})},xm=fe.hasStandardBrowserEnv?function(){const t=fe.navigator&&/(msie|trident)/i.test(fe.navigator.userAgent),n=document.createElement("a");let a;function s(i){let r=i;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return a=s(window.location.href),function(r){const c=_.isString(r)?s(r):r;return c.protocol===a.protocol&&c.host===a.host}}():function(){return function(){return!0}}(),gm=fe.hasStandardBrowserEnv?{write(e,t,n,a,s,i){const r=[e+"="+encodeURIComponent(t)];_.isNumber(n)&&r.push("expires="+new Date(n).toGMTString()),_.isString(a)&&r.push("path="+a),_.isString(s)&&r.push("domain="+s),i===!0&&r.push("secure"),document.cookie=r.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}},qr=e=>e instanceof ge?{...e}:e;function gt(e,t){t=t||{};const n={};function a(o,u,p){return _.isPlainObject(o)&&_.isPlainObject(u)?_.merge.call({caseless:p},o,u):_.isPlainObject(u)?_.merge({},u):_.isArray(u)?u.slice():u}function s(o,u,p){if(_.isUndefined(u)){if(!_.isUndefined(o))return a(void 0,o,p)}else return a(o,u,p)}function i(o,u){if(!_.isUndefined(u))return a(void 0,u)}function r(o,u){if(_.isUndefined(u)){if(!_.isUndefined(o))return a(void 0,o)}else return a(void 0,u)}function c(o,u,p){if(p in t)return a(o,u);if(p in e)return a(void 0,o)}const l={url:i,method:i,data:i,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,withXSRFToken:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:c,headers:(o,u)=>s(qr(o),qr(u),!0)};return _.forEach(Object.keys(Object.assign({},e,t)),function(u){const p=l[u]||s,f=p(e[u],t[u],u);_.isUndefined(f)&&p!==c||(n[u]=f)}),n}const Gc=e=>{const t=gt({},e);let{data:n,withXSRFToken:a,xsrfHeaderName:s,xsrfCookieName:i,headers:r,auth:c}=t;t.headers=r=ge.from(r),t.url=qs(Bs(t.baseURL,t.url),e.params,e.paramsSerializer),c&&r.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let l;if(_.isFormData(n)){if(fe.hasStandardBrowserEnv||fe.hasStandardBrowserWebWorkerEnv)r.setContentType(void 0);else if((l=r.getContentType())!==!1){const[o,...u]=l?l.split(";").map(p=>p.trim()).filter(Boolean):[];r.setContentType([o||"multipart/form-data",...u].join("; "))}}if(fe.hasStandardBrowserEnv&&(a&&_.isFunction(a)&&(a=a(t)),a||a!==!1&&xm(t.url))){const o=s&&i&&gm.read(i);o&&r.set(s,o)}return t},ym=typeof XMLHttpRequest<"u",bm=ym&&function(e){return new Promise(function(n,a){const s=Gc(e);let i=s.data;const r=ge.from(s.headers).normalize();let{responseType:c,onUploadProgress:l,onDownloadProgress:o}=s,u,p,f,h,m;function y(){h&&h(),m&&m(),s.cancelToken&&s.cancelToken.unsubscribe(u),s.signal&&s.signal.removeEventListener("abort",u)}let x=new XMLHttpRequest;x.open(s.method.toUpperCase(),s.url,!0),x.timeout=s.timeout;function v(){if(!x)return;const E=ge.from("getAllResponseHeaders"in x&&x.getAllResponseHeaders()),P={data:!c||c==="text"||c==="json"?x.responseText:x.response,status:x.status,statusText:x.statusText,headers:E,config:e,request:x};Ot(function(X){n(X),y()},function(X){a(X),y()},P),x=null}"onloadend"in x?x.onloadend=v:x.onreadystatechange=function(){!x||x.readyState!==4||x.status===0&&!(x.responseURL&&x.responseURL.indexOf("file:")===0)||setTimeout(v)},x.onabort=function(){x&&(a(new D("Request aborted",D.ECONNABORTED,e,x)),x=null)},x.onerror=function(){a(new D("Network Error",D.ERR_NETWORK,e,x)),x=null},x.ontimeout=function(){let O=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const P=s.transitional||Ms;s.timeoutErrorMessage&&(O=s.timeoutErrorMessage),a(new D(O,P.clarifyTimeoutError?D.ETIMEDOUT:D.ECONNABORTED,e,x)),x=null},i===void 0&&r.setContentType(null),"setRequestHeader"in x&&_.forEach(r.toJSON(),function(O,P){x.setRequestHeader(P,O)}),_.isUndefined(s.withCredentials)||(x.withCredentials=!!s.withCredentials),c&&c!=="json"&&(x.responseType=s.responseType),o&&([f,m]=It(o,!0),x.addEventListener("progress",f)),l&&x.upload&&([p,h]=It(l),x.upload.addEventListener("progress",p),x.upload.addEventListener("loadend",h)),(s.cancelToken||s.signal)&&(u=E=>{x&&(a(!E||E.type?new ct(null,e,x):E),x.abort(),x=null)},s.cancelToken&&s.cancelToken.subscribe(u),s.signal&&(s.signal.aborted?u():s.signal.addEventListener("abort",u)));const $=Bc(s.url);if($&&fe.protocols.indexOf($)===-1){a(new D("Unsupported protocol "+$+":",D.ERR_BAD_REQUEST,e));return}x.send(i||null)})},$m=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let a=new AbortController,s;const i=function(o){if(!s){s=!0,c();const u=o instanceof Error?o:this.reason;a.abort(u instanceof D?u:new ct(u instanceof Error?u.message:u))}};let r=t&&setTimeout(()=>{r=null,i(new D(`timeout ${t} of ms exceeded`,D.ETIMEDOUT))},t);const c=()=>{e&&(r&&clearTimeout(r),r=null,e.forEach(o=>{o.unsubscribe?o.unsubscribe(i):o.removeEventListener("abort",i)}),e=null)};e.forEach(o=>o.addEventListener("abort",i));const{signal:l}=a;return l.unsubscribe=()=>_.asap(c),l}},wm=function*(e,t){let n=e.byteLength;if(n<t){yield e;return}let a=0,s;for(;a<n;)s=a+t,yield e.slice(a,s),a=s},_m=async function*(e,t){for await(const n of Em(e))yield*wm(n,t)},Em=async function*(e){if(e[Symbol.asyncIterator]){yield*e;return}const t=e.getReader();try{for(;;){const{done:n,value:a}=await t.read();if(n)break;yield a}}finally{await t.cancel()}},Mr=(e,t,n,a)=>{const s=_m(e,t);let i=0,r,c=l=>{r||(r=!0,a&&a(l))};return new ReadableStream({async pull(l){try{const{done:o,value:u}=await s.next();if(o){c(),l.close();return}let p=u.byteLength;if(n){let f=i+=p;n(f)}l.enqueue(new Uint8Array(u))}catch(o){throw c(o),o}},cancel(l){return c(l),s.return()}},{highWaterMark:2})},ra=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",Kc=ra&&typeof ReadableStream=="function",Sm=ra&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),Wc=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Rm=Kc&&Wc(()=>{let e=!1;const t=new Request(fe.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Ur=64*1024,bs=Kc&&Wc(()=>_.isReadableStream(new Response("").body)),Bn={stream:bs&&(e=>e.body)};ra&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Bn[t]&&(Bn[t]=_.isFunction(e[t])?n=>n[t]():(n,a)=>{throw new D(`Response type '${t}' is not supported`,D.ERR_NOT_SUPPORT,a)})})})(new Response);const km=async e=>{if(e==null)return 0;if(_.isBlob(e))return e.size;if(_.isSpecCompliantForm(e))return(await new Request(fe.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(_.isArrayBufferView(e)||_.isArrayBuffer(e))return e.byteLength;if(_.isURLSearchParams(e)&&(e=e+""),_.isString(e))return(await Sm(e)).byteLength},jm=async(e,t)=>{const n=_.toFiniteNumber(e.getContentLength());return n??km(t)},Tm=ra&&(async e=>{let{url:t,method:n,data:a,signal:s,cancelToken:i,timeout:r,onDownloadProgress:c,onUploadProgress:l,responseType:o,headers:u,withCredentials:p="same-origin",fetchOptions:f}=Gc(e);o=o?(o+"").toLowerCase():"text";let h=$m([s,i&&i.toAbortSignal()],r),m;const y=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let x;try{if(l&&Rm&&n!=="get"&&n!=="head"&&(x=await jm(u,a))!==0){let P=new Request(t,{method:"POST",body:a,duplex:"half"}),K;if(_.isFormData(a)&&(K=P.headers.get("content-type"))&&u.setContentType(K),P.body){const[X,ae]=Mn(x,It(Un(l)));a=Mr(P.body,Ur,X,ae)}}_.isString(p)||(p=p?"include":"omit");const v="credentials"in Request.prototype;m=new Request(t,{...f,signal:h,method:n.toUpperCase(),headers:u.normalize().toJSON(),body:a,duplex:"half",credentials:v?p:void 0});let $=await fetch(m);const E=bs&&(o==="stream"||o==="response");if(bs&&(c||E&&y)){const P={};["status","statusText","headers"].forEach(re=>{P[re]=$[re]});const K=_.toFiniteNumber($.headers.get("content-length")),[X,ae]=c&&Mn(K,It(Un(c),!0))||[];$=new Response(Mr($.body,Ur,X,()=>{ae&&ae(),y&&y()}),P)}o=o||"text";let O=await Bn[_.findKey(Bn,o)||"text"]($,e);return!E&&y&&y(),await new Promise((P,K)=>{Ot(P,K,{data:O,headers:ge.from($.headers),status:$.status,statusText:$.statusText,config:e,request:m})})}catch(v){throw y&&y(),v&&v.name==="TypeError"&&/fetch/i.test(v.message)?Object.assign(new D("Network Error",D.ERR_NETWORK,e,m),{cause:v.cause||v}):D.from(v,v&&v.code,e,m)}}),$s={http:vm,xhr:bm,fetch:Tm};_.forEach($s,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Br=e=>`- ${e}`,Om=e=>_.isFunction(e)||e===null||e===!1,Xc={getAdapter:e=>{e=_.isArray(e)?e:[e];const{length:t}=e;let n,a;const s={};for(let i=0;i<t;i++){n=e[i];let r;if(a=n,!Om(n)&&(a=$s[(r=String(n)).toLowerCase()],a===void 0))throw new D(`Unknown adapter '${r}'`);if(a)break;s[r||"#"+i]=a}if(!a){const i=Object.entries(s).map(([c,l])=>`adapter ${c} `+(l===!1?"is not supported by the environment":"is not available in the build"));let r=t?i.length>1?`since :
20
+ `+i.map(Br).join(`
21
+ `):" "+Br(i[0]):"as no adapter specified";throw new D("There is no suitable adapter to dispatch the request "+r,"ERR_NOT_SUPPORT")}return a},adapters:$s};function Ja(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ct(null,e)}function Vr(e){return Ja(e),e.headers=ge.from(e.headers),e.data=Ba.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Xc.getAdapter(e.adapter||pn.adapter)(e).then(function(a){return Ja(e),a.data=Ba.call(e,e.transformResponse,a),a.headers=ge.from(a.headers),a},function(a){return Dc(a)||(Ja(e),a&&a.response&&(a.response.data=Ba.call(e,e.transformResponse,a.response),a.response.headers=ge.from(a.response.headers))),Promise.reject(a)})}const Zs={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Zs[e]=function(a){return typeof a===e||"a"+(t<1?"n ":" ")+e}});const Hr={};Zs.transitional=function(t,n,a){function s(i,r){return"[Axios v"+qn+"] Transitional option '"+i+"'"+r+(a?". "+a:"")}return(i,r,c)=>{if(t===!1)throw new D(s(r," has been removed"+(n?" in "+n:"")),D.ERR_DEPRECATED);return n&&!Hr[r]&&(Hr[r]=!0,console.warn(s(r," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,r,c):!0}};function Pm(e,t,n){if(typeof e!="object")throw new D("options must be an object",D.ERR_BAD_OPTION_VALUE);const a=Object.keys(e);let s=a.length;for(;s-- >0;){const i=a[s],r=t[i];if(r){const c=e[i],l=c===void 0||r(c,i,e);if(l!==!0)throw new D("option "+i+" must be "+l,D.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new D("Unknown option "+i,D.ERR_BAD_OPTION)}}const ws={assertOptions:Pm,validators:Zs},Xe=ws.validators;class vt{constructor(t){this.defaults=t,this.interceptors={request:new Er,response:new Er}}async request(t,n){try{return await this._request(t,n)}catch(a){if(a instanceof Error){let s;Error.captureStackTrace?Error.captureStackTrace(s={}):s=new Error;const i=s.stack?s.stack.replace(/^.+\n/,""):"";try{a.stack?i&&!String(a.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(a.stack+=`
22
+ `+i):a.stack=i}catch{}}throw a}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=gt(this.defaults,n);const{transitional:a,paramsSerializer:s,headers:i}=n;a!==void 0&&ws.assertOptions(a,{silentJSONParsing:Xe.transitional(Xe.boolean),forcedJSONParsing:Xe.transitional(Xe.boolean),clarifyTimeoutError:Xe.transitional(Xe.boolean)},!1),s!=null&&(_.isFunction(s)?n.paramsSerializer={serialize:s}:ws.assertOptions(s,{encode:Xe.function,serialize:Xe.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let r=i&&_.merge(i.common,i[n.method]);i&&_.forEach(["delete","get","head","post","put","patch","common"],m=>{delete i[m]}),n.headers=ge.concat(r,i);const c=[];let l=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen=="function"&&y.runWhen(n)===!1||(l=l&&y.synchronous,c.unshift(y.fulfilled,y.rejected))});const o=[];this.interceptors.response.forEach(function(y){o.push(y.fulfilled,y.rejected)});let u,p=0,f;if(!l){const m=[Vr.bind(this),void 0];for(m.unshift.apply(m,c),m.push.apply(m,o),f=m.length,u=Promise.resolve(n);p<f;)u=u.then(m[p++],m[p++]);return u}f=c.length;let h=n;for(p=0;p<f;){const m=c[p++],y=c[p++];try{h=m(h)}catch(x){y.call(this,x);break}}try{u=Vr.call(this,h)}catch(m){return Promise.reject(m)}for(p=0,f=o.length;p<f;)u=u.then(o[p++],o[p++]);return u}getUri(t){t=gt(this.defaults,t);const n=Bs(t.baseURL,t.url);return qs(n,t.params,t.paramsSerializer)}}_.forEach(["delete","get","head","options"],function(t){vt.prototype[t]=function(n,a){return this.request(gt(a||{},{method:t,url:n,data:(a||{}).data}))}});_.forEach(["post","put","patch"],function(t){function n(a){return function(i,r,c){return this.request(gt(c||{},{method:t,headers:a?{"Content-Type":"multipart/form-data"}:{},url:i,data:r}))}}vt.prototype[t]=n(),vt.prototype[t+"Form"]=n(!0)});class Qs{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(i){n=i});const a=this;this.promise.then(s=>{if(!a._listeners)return;let i=a._listeners.length;for(;i-- >0;)a._listeners[i](s);a._listeners=null}),this.promise.then=s=>{let i;const r=new Promise(c=>{a.subscribe(c),i=c}).then(s);return r.cancel=function(){a.unsubscribe(i)},r},t(function(i,r,c){a.reason||(a.reason=new ct(i,r,c),n(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=a=>{t.abort(a)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Qs(function(s){t=s}),cancel:t}}}function Nm(e){return function(n){return e.apply(null,n)}}function Am(e){return _.isObject(e)&&e.isAxiosError===!0}const _s={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(_s).forEach(([e,t])=>{_s[t]=e});function Jc(e){const t=new vt(e),n=pc(vt.prototype.request,t);return _.extend(n,vt.prototype,t,{allOwnKeys:!0}),_.extend(n,t,null,{allOwnKeys:!0}),n.create=function(s){return Jc(gt(e,s))},n}const le=Jc(pn);le.Axios=vt;le.CanceledError=ct;le.CancelToken=Qs;le.isCancel=Dc;le.VERSION=qn;le.toFormData=ia;le.AxiosError=D;le.Cancel=le.CanceledError;le.all=function(t){return Promise.all(t)};le.spread=Nm;le.isAxiosError=Am;le.mergeConfig=gt;le.AxiosHeaders=ge;le.formToJSON=e=>Lc(_.isHTMLForm(e)?new FormData(e):e);le.getAdapter=Xc.getAdapter;le.HttpStatusCode=_s;le.default=le;const yt=e=>{const t=typeof e;return e!==null&&(t==="object"||t==="function")},Ya=new Set(["__proto__","prototype","constructor"]),Cm=new Set("0123456789");function oa(e){const t=[];let n="",a="start",s=!1;for(const i of e)switch(i){case"\\":{if(a==="index")throw new Error("Invalid character in an index");if(a==="indexEnd")throw new Error("Invalid character after an index");s&&(n+=i),a="property",s=!s;break}case".":{if(a==="index")throw new Error("Invalid character in an index");if(a==="indexEnd"){a="property";break}if(s){s=!1,n+=i;break}if(Ya.has(n))return[];t.push(n),n="",a="property";break}case"[":{if(a==="index")throw new Error("Invalid character in an index");if(a==="indexEnd"){a="index";break}if(s){s=!1,n+=i;break}if(a==="property"){if(Ya.has(n))return[];t.push(n),n=""}a="index";break}case"]":{if(a==="index"){t.push(Number.parseInt(n,10)),n="",a="indexEnd";break}if(a==="indexEnd")throw new Error("Invalid character after an index")}default:{if(a==="index"&&!Cm.has(i))throw new Error("Invalid character in an index");if(a==="indexEnd")throw new Error("Invalid character after an index");a==="start"&&(a="property"),s&&(s=!1,n+="\\"),n+=i}}switch(s&&(n+="\\"),a){case"property":{if(Ya.has(n))return[];t.push(n);break}case"index":throw new Error("Index was not closed");case"start":{t.push("");break}}return t}function ei(e,t){if(typeof t!="number"&&Array.isArray(e)){const n=Number.parseInt(t,10);return Number.isInteger(n)&&e[n]===e[t]}return!1}function Yc(e,t){if(ei(e,t))throw new Error("Cannot use string index")}function Im(e,t,n){if(!yt(e)||typeof t!="string")return n===void 0?e:n;const a=oa(t);if(a.length===0)return n;for(let s=0;s<a.length;s++){const i=a[s];if(ei(e,i)?e=s===a.length-1?void 0:null:e=e[i],e==null){if(s!==a.length-1)return n;break}}return e===void 0?n:e}function Gr(e,t,n){if(!yt(e)||typeof t!="string")return e;const a=e,s=oa(t);for(let i=0;i<s.length;i++){const r=s[i];Yc(e,r),i===s.length-1?e[r]=n:yt(e[r])||(e[r]=typeof s[i+1]=="number"?[]:{}),e=e[r]}return a}function Lm(e,t){if(!yt(e)||typeof t!="string")return!1;const n=oa(t);for(let a=0;a<n.length;a++){const s=n[a];if(Yc(e,s),a===n.length-1)return delete e[s],!0;if(e=e[s],!yt(e))return!1}}function Dm(e,t){if(!yt(e)||typeof t!="string")return!1;const n=oa(t);if(n.length===0)return!1;for(const a of n){if(!yt(e)||!(a in e)||ei(e,a))return!1;e=e[a]}return!0}const nt=Yn.homedir(),ti=Yn.tmpdir(),{env:Nt}=ue,Fm=e=>{const t=Y.join(nt,"Library");return{data:Y.join(t,"Application Support",e),config:Y.join(t,"Preferences",e),cache:Y.join(t,"Caches",e),log:Y.join(t,"Logs",e),temp:Y.join(ti,e)}},zm=e=>{const t=Nt.APPDATA||Y.join(nt,"AppData","Roaming"),n=Nt.LOCALAPPDATA||Y.join(nt,"AppData","Local");return{data:Y.join(n,e,"Data"),config:Y.join(t,e,"Config"),cache:Y.join(n,e,"Cache"),log:Y.join(n,e,"Log"),temp:Y.join(ti,e)}},qm=e=>{const t=Y.basename(nt);return{data:Y.join(Nt.XDG_DATA_HOME||Y.join(nt,".local","share"),e),config:Y.join(Nt.XDG_CONFIG_HOME||Y.join(nt,".config"),e),cache:Y.join(Nt.XDG_CACHE_HOME||Y.join(nt,".cache"),e),log:Y.join(Nt.XDG_STATE_HOME||Y.join(nt,".local","state"),e),temp:Y.join(ti,t,e)}};function Mm(e,{suffix:t="nodejs"}={}){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return t&&(e+=`-${t}`),ue.platform==="darwin"?Fm(e):ue.platform==="win32"?zm(e):qm(e)}const Je=(e,t)=>function(...a){return e.apply(void 0,a).catch(t)},Ve=(e,t)=>function(...a){try{return e.apply(void 0,a)}catch(s){return t(s)}},Um=ue.getuid?!ue.getuid():!1,Bm=1e4,ke=()=>{},ie={isChangeErrorOk:e=>{if(!ie.isNodeError(e))return!1;const{code:t}=e;return t==="ENOSYS"||!Um&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!ie.isNodeError(e))return!1;const{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!ie.isNodeError(e))throw e;if(!ie.isChangeErrorOk(e))throw e}};class Vm{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Bm,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{const n=()=>this.remove(a),a=()=>t(n);this.add(a)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(const t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}}const Hm=new Vm,Ye=(e,t)=>function(a){return function s(...i){return Hm.schedule().then(r=>{const c=o=>(r(),o),l=o=>{if(r(),Date.now()>=a)throw o;if(t(o)){const u=Math.round(100*Math.random());return new Promise(f=>setTimeout(f,u)).then(()=>s.apply(void 0,i))}throw o};return e.apply(void 0,i).then(c,l)})}},Ze=(e,t)=>function(a){return function s(...i){try{return e.apply(void 0,i)}catch(r){if(Date.now()>a)throw r;if(t(r))return s.apply(void 0,i);throw r}}},be={attempt:{chmod:Je(he.promisify(U.chmod),ie.onChangeError),chown:Je(he.promisify(U.chown),ie.onChangeError),close:Je(he.promisify(U.close),ke),fsync:Je(he.promisify(U.fsync),ke),mkdir:Je(he.promisify(U.mkdir),ke),realpath:Je(he.promisify(U.realpath),ke),stat:Je(he.promisify(U.stat),ke),unlink:Je(he.promisify(U.unlink),ke),chmodSync:Ve(U.chmodSync,ie.onChangeError),chownSync:Ve(U.chownSync,ie.onChangeError),closeSync:Ve(U.closeSync,ke),existsSync:Ve(U.existsSync,ke),fsyncSync:Ve(U.fsync,ke),mkdirSync:Ve(U.mkdirSync,ke),realpathSync:Ve(U.realpathSync,ke),statSync:Ve(U.statSync,ke),unlinkSync:Ve(U.unlinkSync,ke)},retry:{close:Ye(he.promisify(U.close),ie.isRetriableError),fsync:Ye(he.promisify(U.fsync),ie.isRetriableError),open:Ye(he.promisify(U.open),ie.isRetriableError),readFile:Ye(he.promisify(U.readFile),ie.isRetriableError),rename:Ye(he.promisify(U.rename),ie.isRetriableError),stat:Ye(he.promisify(U.stat),ie.isRetriableError),write:Ye(he.promisify(U.write),ie.isRetriableError),writeFile:Ye(he.promisify(U.writeFile),ie.isRetriableError),closeSync:Ze(U.closeSync,ie.isRetriableError),fsyncSync:Ze(U.fsyncSync,ie.isRetriableError),openSync:Ze(U.openSync,ie.isRetriableError),readFileSync:Ze(U.readFileSync,ie.isRetriableError),renameSync:Ze(U.renameSync,ie.isRetriableError),statSync:Ze(U.statSync,ie.isRetriableError),writeSync:Ze(U.writeSync,ie.isRetriableError),writeFileSync:Ze(U.writeFileSync,ie.isRetriableError)}},Gm="utf8",Kr=438,Km=511,Wm={},Xm=Yn.userInfo().uid,Jm=Yn.userInfo().gid,Ym=1e3,Zm=!!ue.getuid;ue.getuid&&ue.getuid();const Wr=128,Qm=e=>e instanceof Error&&"code"in e,Xr=e=>typeof e=="string",Za=e=>e===void 0,ef=ue.platform==="linux",Zc=ue.platform==="win32",ni=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];Zc||ni.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");ef&&ni.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED");class tf{constructor(){this.callbacks=new Set,this.exited=!1,this.exit=t=>{if(!this.exited){this.exited=!0;for(const n of this.callbacks)n();t&&(Zc&&t!=="SIGINT"&&t!=="SIGTERM"&&t!=="SIGKILL"?ue.kill(ue.pid,"SIGTERM"):ue.kill(ue.pid,t))}},this.hook=()=>{ue.once("exit",()=>this.exit());for(const t of ni)try{ue.once(t,()=>this.exit(t))}catch{}},this.register=t=>(this.callbacks.add(t),()=>{this.callbacks.delete(t)}),this.hook()}}const nf=new tf,af=nf.register,$e={store:{},create:e=>{const t=`000000${Math.floor(Math.random()*16777215).toString(16)}`.slice(-6),s=`.tmp-${Date.now().toString().slice(-10)}${t}`;return`${e}${s}`},get:(e,t,n=!0)=>{const a=$e.truncate(t(e));return a in $e.store?$e.get(e,t,n):($e.store[a]=n,[a,()=>delete $e.store[a]])},purge:e=>{$e.store[e]&&(delete $e.store[e],be.attempt.unlink(e))},purgeSync:e=>{$e.store[e]&&(delete $e.store[e],be.attempt.unlinkSync(e))},purgeSyncAll:()=>{for(const e in $e.store)$e.purgeSync(e)},truncate:e=>{const t=Y.basename(e);if(t.length<=Wr)return e;const n=/^(\.?)(.*?)((?:\.[^.]+)?(?:\.tmp-\d{10}[a-f0-9]{6})?)$/.exec(t);if(!n)return e;const a=t.length-Wr;return`${e.slice(0,-t.length)}${n[1]}${n[2].slice(0,-a)}${n[3]}`}};af($e.purgeSyncAll);function Qc(e,t,n=Wm){if(Xr(n))return Qc(e,t,{encoding:n});const a=Date.now()+((n.timeout??Ym)||-1);let s=null,i=null,r=null;try{const c=be.attempt.realpathSync(e),l=!!c;e=c||e,[i,s]=$e.get(e,n.tmpCreate||$e.create,n.tmpPurge!==!1);const o=Zm&&Za(n.chown),u=Za(n.mode);if(l&&(o||u)){const p=be.attempt.statSync(e);p&&(n={...n},o&&(n.chown={uid:p.uid,gid:p.gid}),u&&(n.mode=p.mode))}if(!l){const p=Y.dirname(e);be.attempt.mkdirSync(p,{mode:Km,recursive:!0})}r=be.retry.openSync(a)(i,"w",n.mode||Kr),n.tmpCreated&&n.tmpCreated(i),Xr(t)?be.retry.writeSync(a)(r,t,0,n.encoding||Gm):Za(t)||be.retry.writeSync(a)(r,t,0,t.length,0),n.fsync!==!1&&(n.fsyncWait!==!1?be.retry.fsyncSync(a)(r):be.attempt.fsync(r)),be.retry.closeSync(a)(r),r=null,n.chown&&(n.chown.uid!==Xm||n.chown.gid!==Jm)&&be.attempt.chownSync(i,n.chown.uid,n.chown.gid),n.mode&&n.mode!==Kr&&be.attempt.chmodSync(i,n.mode);try{be.retry.renameSync(a)(i,e)}catch(p){if(!Qm(p)||p.code!=="ENAMETOOLONG")throw p;be.retry.renameSync(a)(i,$e.truncate(e))}s(),i=null}finally{r&&be.attempt.closeSync(r),i&&$e.purge(i)}}var Es={exports:{}},ai={},Ne={},Lt={},fn={},G={},ln={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class t{}e._CodeOrName=t,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class n extends t{constructor($){if(super(),!e.IDENTIFIER.test($))throw new Error("CodeGen: name must be a valid identifier");this.str=$}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=n;class a extends t{constructor($){super(),this._items=typeof $=="string"?[$]:$}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const $=this._items[0];return $===""||$==='""'}get str(){var $;return($=this._str)!==null&&$!==void 0?$:this._str=this._items.reduce((E,O)=>`${E}${O}`,"")}get names(){var $;return($=this._names)!==null&&$!==void 0?$:this._names=this._items.reduce((E,O)=>(O instanceof n&&(E[O.str]=(E[O.str]||0)+1),E),{})}}e._Code=a,e.nil=new a("");function s(v,...$){const E=[v[0]];let O=0;for(;O<$.length;)c(E,$[O]),E.push(v[++O]);return new a(E)}e._=s;const i=new a("+");function r(v,...$){const E=[h(v[0])];let O=0;for(;O<$.length;)E.push(i),c(E,$[O]),E.push(i,h(v[++O]));return l(E),new a(E)}e.str=r;function c(v,$){$ instanceof a?v.push(...$._items):$ instanceof n?v.push($):v.push(p($))}e.addCodeArg=c;function l(v){let $=1;for(;$<v.length-1;){if(v[$]===i){const E=o(v[$-1],v[$+1]);if(E!==void 0){v.splice($-1,3,E);continue}v[$++]="+"}$++}}function o(v,$){if($==='""')return v;if(v==='""')return $;if(typeof v=="string")return $ instanceof n||v[v.length-1]!=='"'?void 0:typeof $!="string"?`${v.slice(0,-1)}${$}"`:$[0]==='"'?v.slice(0,-1)+$.slice(1):void 0;if(typeof $=="string"&&$[0]==='"'&&!(v instanceof n))return`"${v}${$.slice(1)}`}function u(v,$){return $.emptyStr()?v:v.emptyStr()?$:r`${v}${$}`}e.strConcat=u;function p(v){return typeof v=="number"||typeof v=="boolean"||v===null?v:h(Array.isArray(v)?v.join(","):v)}function f(v){return new a(h(v))}e.stringify=f;function h(v){return JSON.stringify(v).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}e.safeStringify=h;function m(v){return typeof v=="string"&&e.IDENTIFIER.test(v)?new a(`.${v}`):s`[${v}]`}e.getProperty=m;function y(v){if(typeof v=="string"&&e.IDENTIFIER.test(v))return new a(`${v}`);throw new Error(`CodeGen: invalid export name: ${v}, use explicit $id name mapping`)}e.getEsmExportName=y;function x(v){return new a(v.toString())}e.regexpCode=x})(ln);var Ss={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ValueScope=e.ValueScopeName=e.Scope=e.varKinds=e.UsedValueState=void 0;const t=ln;class n extends Error{constructor(o){super(`CodeGen: "code" for ${o} not defined`),this.value=o.value}}var a;(function(l){l[l.Started=0]="Started",l[l.Completed=1]="Completed"})(a||(e.UsedValueState=a={})),e.varKinds={const:new t.Name("const"),let:new t.Name("let"),var:new t.Name("var")};class s{constructor({prefixes:o,parent:u}={}){this._names={},this._prefixes=o,this._parent=u}toName(o){return o instanceof t.Name?o:this.name(o)}name(o){return new t.Name(this._newName(o))}_newName(o){const u=this._names[o]||this._nameGroup(o);return`${o}${u.index++}`}_nameGroup(o){var u,p;if(!((p=(u=this._parent)===null||u===void 0?void 0:u._prefixes)===null||p===void 0)&&p.has(o)||this._prefixes&&!this._prefixes.has(o))throw new Error(`CodeGen: prefix "${o}" is not allowed in this scope`);return this._names[o]={prefix:o,index:0}}}e.Scope=s;class i extends t.Name{constructor(o,u){super(u),this.prefix=o}setValue(o,{property:u,itemIndex:p}){this.value=o,this.scopePath=(0,t._)`.${new t.Name(u)}[${p}]`}}e.ValueScopeName=i;const r=(0,t._)`\n`;class c extends s{constructor(o){super(o),this._values={},this._scope=o.scope,this.opts={...o,_n:o.lines?r:t.nil}}get(){return this._scope}name(o){return new i(o,this._newName(o))}value(o,u){var p;if(u.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const f=this.toName(o),{prefix:h}=f,m=(p=u.key)!==null&&p!==void 0?p:u.ref;let y=this._values[h];if(y){const $=y.get(m);if($)return $}else y=this._values[h]=new Map;y.set(m,f);const x=this._scope[h]||(this._scope[h]=[]),v=x.length;return x[v]=u.ref,f.setValue(u,{property:h,itemIndex:v}),f}getValue(o,u){const p=this._values[o];if(p)return p.get(u)}scopeRefs(o,u=this._values){return this._reduceValues(u,p=>{if(p.scopePath===void 0)throw new Error(`CodeGen: name "${p}" has no value`);return(0,t._)`${o}${p.scopePath}`})}scopeCode(o=this._values,u,p){return this._reduceValues(o,f=>{if(f.value===void 0)throw new Error(`CodeGen: name "${f}" has no value`);return f.value.code},u,p)}_reduceValues(o,u,p={},f){let h=t.nil;for(const m in o){const y=o[m];if(!y)continue;const x=p[m]=p[m]||new Map;y.forEach(v=>{if(x.has(v))return;x.set(v,a.Started);let $=u(v);if($){const E=this.opts.es5?e.varKinds.var:e.varKinds.const;h=(0,t._)`${h}${E} ${v} = ${$};${this.opts._n}`}else if($=f?.(v))h=(0,t._)`${h}${$}${this.opts._n}`;else throw new n(v);x.set(v,a.Completed)})}return h}}e.ValueScope=c})(Ss);(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const t=ln,n=Ss;var a=ln;Object.defineProperty(e,"_",{enumerable:!0,get:function(){return a._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return a.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return a.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return a.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return a.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return a.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return a.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return a.Name}});var s=Ss;Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return s.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return s.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return s.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return s.varKinds}}),e.operators={GT:new t._Code(">"),GTE:new t._Code(">="),LT:new t._Code("<"),LTE:new t._Code("<="),EQ:new t._Code("==="),NEQ:new t._Code("!=="),NOT:new t._Code("!"),OR:new t._Code("||"),AND:new t._Code("&&"),ADD:new t._Code("+")};class i{optimizeNodes(){return this}optimizeNames(d,g){return this}}class r extends i{constructor(d,g,k){super(),this.varKind=d,this.name=g,this.rhs=k}render({es5:d,_n:g}){const k=d?n.varKinds.var:this.varKind,z=this.rhs===void 0?"":` = ${this.rhs}`;return`${k} ${this.name}${z};`+g}optimizeNames(d,g){if(d[this.name.str])return this.rhs&&(this.rhs=j(this.rhs,d,g)),this}get names(){return this.rhs instanceof t._CodeOrName?this.rhs.names:{}}}class c extends i{constructor(d,g,k){super(),this.lhs=d,this.rhs=g,this.sideEffects=k}render({_n:d}){return`${this.lhs} = ${this.rhs};`+d}optimizeNames(d,g){if(!(this.lhs instanceof t.Name&&!d[this.lhs.str]&&!this.sideEffects))return this.rhs=j(this.rhs,d,g),this}get names(){const d=this.lhs instanceof t.Name?{}:{...this.lhs.names};return ee(d,this.rhs)}}class l extends c{constructor(d,g,k,z){super(d,k,z),this.op=g}render({_n:d}){return`${this.lhs} ${this.op}= ${this.rhs};`+d}}class o extends i{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`${this.label}:`+d}}class u extends i{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`break${this.label?` ${this.label}`:""};`+d}}class p extends i{constructor(d){super(),this.error=d}render({_n:d}){return`throw ${this.error};`+d}get names(){return this.error.names}}class f extends i{constructor(d){super(),this.code=d}render({_n:d}){return`${this.code};`+d}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(d,g){return this.code=j(this.code,d,g),this}get names(){return this.code instanceof t._CodeOrName?this.code.names:{}}}class h extends i{constructor(d=[]){super(),this.nodes=d}render(d){return this.nodes.reduce((g,k)=>g+k.render(d),"")}optimizeNodes(){const{nodes:d}=this;let g=d.length;for(;g--;){const k=d[g].optimizeNodes();Array.isArray(k)?d.splice(g,1,...k):k?d[g]=k:d.splice(g,1)}return d.length>0?this:void 0}optimizeNames(d,g){const{nodes:k}=this;let z=k.length;for(;z--;){const L=k[z];L.optimizeNames(d,g)||(N(d,L.names),k.splice(z,1))}return k.length>0?this:void 0}get names(){return this.nodes.reduce((d,g)=>B(d,g.names),{})}}class m extends h{render(d){return"{"+d._n+super.render(d)+"}"+d._n}}class y extends h{}class x extends m{}x.kind="else";class v extends m{constructor(d,g){super(g),this.condition=d}render(d){let g=`if(${this.condition})`+super.render(d);return this.else&&(g+="else "+this.else.render(d)),g}optimizeNodes(){super.optimizeNodes();const d=this.condition;if(d===!0)return this.nodes;let g=this.else;if(g){const k=g.optimizeNodes();g=this.else=Array.isArray(k)?new x(k):k}if(g)return d===!1?g instanceof v?g:g.nodes:this.nodes.length?this:new v(F(d),g instanceof v?[g]:g.nodes);if(!(d===!1||!this.nodes.length))return this}optimizeNames(d,g){var k;if(this.else=(k=this.else)===null||k===void 0?void 0:k.optimizeNames(d,g),!!(super.optimizeNames(d,g)||this.else))return this.condition=j(this.condition,d,g),this}get names(){const d=super.names;return ee(d,this.condition),this.else&&B(d,this.else.names),d}}v.kind="if";class $ extends m{}$.kind="for";class E extends ${constructor(d){super(),this.iteration=d}render(d){return`for(${this.iteration})`+super.render(d)}optimizeNames(d,g){if(super.optimizeNames(d,g))return this.iteration=j(this.iteration,d,g),this}get names(){return B(super.names,this.iteration.names)}}class O extends ${constructor(d,g,k,z){super(),this.varKind=d,this.name=g,this.from=k,this.to=z}render(d){const g=d.es5?n.varKinds.var:this.varKind,{name:k,from:z,to:L}=this;return`for(${g} ${k}=${z}; ${k}<${L}; ${k}++)`+super.render(d)}get names(){const d=ee(super.names,this.from);return ee(d,this.to)}}class P extends ${constructor(d,g,k,z){super(),this.loop=d,this.varKind=g,this.name=k,this.iterable=z}render(d){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(d)}optimizeNames(d,g){if(super.optimizeNames(d,g))return this.iterable=j(this.iterable,d,g),this}get names(){return B(super.names,this.iterable.names)}}class K extends m{constructor(d,g,k){super(),this.name=d,this.args=g,this.async=k}render(d){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(d)}}K.kind="func";class X extends h{render(d){return"return "+super.render(d)}}X.kind="return";class ae extends m{render(d){let g="try"+super.render(d);return this.catch&&(g+=this.catch.render(d)),this.finally&&(g+=this.finally.render(d)),g}optimizeNodes(){var d,g;return super.optimizeNodes(),(d=this.catch)===null||d===void 0||d.optimizeNodes(),(g=this.finally)===null||g===void 0||g.optimizeNodes(),this}optimizeNames(d,g){var k,z;return super.optimizeNames(d,g),(k=this.catch)===null||k===void 0||k.optimizeNames(d,g),(z=this.finally)===null||z===void 0||z.optimizeNames(d,g),this}get names(){const d=super.names;return this.catch&&B(d,this.catch.names),this.finally&&B(d,this.finally.names),d}}class re extends m{constructor(d){super(),this.error=d}render(d){return`catch(${this.error})`+super.render(d)}}re.kind="catch";class de extends m{render(d){return"finally"+super.render(d)}}de.kind="finally";class M{constructor(d,g={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...g,_n:g.lines?`
23
+ `:""},this._extScope=d,this._scope=new n.Scope({parent:d}),this._nodes=[new y]}toString(){return this._root.render(this.opts)}name(d){return this._scope.name(d)}scopeName(d){return this._extScope.name(d)}scopeValue(d,g){const k=this._extScope.value(d,g);return(this._values[k.prefix]||(this._values[k.prefix]=new Set)).add(k),k}getScopeValue(d,g){return this._extScope.getValue(d,g)}scopeRefs(d){return this._extScope.scopeRefs(d,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(d,g,k,z){const L=this._scope.toName(g);return k!==void 0&&z&&(this._constants[L.str]=k),this._leafNode(new r(d,L,k)),L}const(d,g,k){return this._def(n.varKinds.const,d,g,k)}let(d,g,k){return this._def(n.varKinds.let,d,g,k)}var(d,g,k){return this._def(n.varKinds.var,d,g,k)}assign(d,g,k){return this._leafNode(new c(d,g,k))}add(d,g){return this._leafNode(new l(d,e.operators.ADD,g))}code(d){return typeof d=="function"?d():d!==t.nil&&this._leafNode(new f(d)),this}object(...d){const g=["{"];for(const[k,z]of d)g.length>1&&g.push(","),g.push(k),(k!==z||this.opts.es5)&&(g.push(":"),(0,t.addCodeArg)(g,z));return g.push("}"),new t._Code(g)}if(d,g,k){if(this._blockNode(new v(d)),g&&k)this.code(g).else().code(k).endIf();else if(g)this.code(g).endIf();else if(k)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(d){return this._elseNode(new v(d))}else(){return this._elseNode(new x)}endIf(){return this._endBlockNode(v,x)}_for(d,g){return this._blockNode(d),g&&this.code(g).endFor(),this}for(d,g){return this._for(new E(d),g)}forRange(d,g,k,z,L=this.opts.es5?n.varKinds.var:n.varKinds.let){const te=this._scope.toName(d);return this._for(new O(L,te,g,k),()=>z(te))}forOf(d,g,k,z=n.varKinds.const){const L=this._scope.toName(d);if(this.opts.es5){const te=g instanceof t.Name?g:this.var("_arr",g);return this.forRange("_i",0,(0,t._)`${te}.length`,Q=>{this.var(L,(0,t._)`${te}[${Q}]`),k(L)})}return this._for(new P("of",z,L,g),()=>k(L))}forIn(d,g,k,z=this.opts.es5?n.varKinds.var:n.varKinds.const){if(this.opts.ownProperties)return this.forOf(d,(0,t._)`Object.keys(${g})`,k);const L=this._scope.toName(d);return this._for(new P("in",z,L,g),()=>k(L))}endFor(){return this._endBlockNode($)}label(d){return this._leafNode(new o(d))}break(d){return this._leafNode(new u(d))}return(d){const g=new X;if(this._blockNode(g),this.code(d),g.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(X)}try(d,g,k){if(!g&&!k)throw new Error('CodeGen: "try" without "catch" and "finally"');const z=new ae;if(this._blockNode(z),this.code(d),g){const L=this.name("e");this._currNode=z.catch=new re(L),g(L)}return k&&(this._currNode=z.finally=new de,this.code(k)),this._endBlockNode(re,de)}throw(d){return this._leafNode(new p(d))}block(d,g){return this._blockStarts.push(this._nodes.length),d&&this.code(d).endBlock(g),this}endBlock(d){const g=this._blockStarts.pop();if(g===void 0)throw new Error("CodeGen: not in self-balancing block");const k=this._nodes.length-g;if(k<0||d!==void 0&&k!==d)throw new Error(`CodeGen: wrong number of nodes: ${k} vs ${d} expected`);return this._nodes.length=g,this}func(d,g=t.nil,k,z){return this._blockNode(new K(d,g,k)),z&&this.code(z).endFunc(),this}endFunc(){return this._endBlockNode(K)}optimize(d=1){for(;d-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(d){return this._currNode.nodes.push(d),this}_blockNode(d){this._currNode.nodes.push(d),this._nodes.push(d)}_endBlockNode(d,g){const k=this._currNode;if(k instanceof d||g&&k instanceof g)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${g?`${d.kind}/${g.kind}`:d.kind}"`)}_elseNode(d){const g=this._currNode;if(!(g instanceof v))throw new Error('CodeGen: "else" without "if"');return this._currNode=g.else=d,this}get _root(){return this._nodes[0]}get _currNode(){const d=this._nodes;return d[d.length-1]}set _currNode(d){const g=this._nodes;g[g.length-1]=d}}e.CodeGen=M;function B(w,d){for(const g in d)w[g]=(w[g]||0)+(d[g]||0);return w}function ee(w,d){return d instanceof t._CodeOrName?B(w,d.names):w}function j(w,d,g){if(w instanceof t.Name)return k(w);if(!z(w))return w;return new t._Code(w._items.reduce((L,te)=>(te instanceof t.Name&&(te=k(te)),te instanceof t._Code?L.push(...te._items):L.push(te),L),[]));function k(L){const te=g[L.str];return te===void 0||d[L.str]!==1?L:(delete d[L.str],te)}function z(L){return L instanceof t._Code&&L._items.some(te=>te instanceof t.Name&&d[te.str]===1&&g[te.str]!==void 0)}}function N(w,d){for(const g in d)w[g]=(w[g]||0)-(d[g]||0)}function F(w){return typeof w=="boolean"||typeof w=="number"||w===null?!w:(0,t._)`!${S(w)}`}e.not=F;const T=b(e.operators.AND);function A(...w){return w.reduce(T)}e.and=A;const C=b(e.operators.OR);function R(...w){return w.reduce(C)}e.or=R;function b(w){return(d,g)=>d===t.nil?g:g===t.nil?d:(0,t._)`${S(d)} ${w} ${S(g)}`}function S(w){return w instanceof t.Name?w:(0,t._)`(${w})`}})(G);var I={};Object.defineProperty(I,"__esModule",{value:!0});I.checkStrictMode=I.getErrorPath=I.Type=I.useFunc=I.setEvaluated=I.evaluatedPropsToName=I.mergeEvaluated=I.eachItem=I.unescapeJsonPointer=I.escapeJsonPointer=I.escapeFragment=I.unescapeFragment=I.schemaRefOrVal=I.schemaHasRulesButRef=I.schemaHasRules=I.checkUnknownRules=I.alwaysValidSchema=I.toHash=void 0;const ne=G,sf=ln;function rf(e){const t={};for(const n of e)t[n]=!0;return t}I.toHash=rf;function of(e,t){return typeof t=="boolean"?t:Object.keys(t).length===0?!0:(el(e,t),!tl(t,e.self.RULES.all))}I.alwaysValidSchema=of;function el(e,t=e.schema){const{opts:n,self:a}=e;if(!n.strictSchema||typeof t=="boolean")return;const s=a.RULES.keywords;for(const i in t)s[i]||sl(e,`unknown keyword: "${i}"`)}I.checkUnknownRules=el;function tl(e,t){if(typeof e=="boolean")return!e;for(const n in e)if(t[n])return!0;return!1}I.schemaHasRules=tl;function cf(e,t){if(typeof e=="boolean")return!e;for(const n in e)if(n!=="$ref"&&t.all[n])return!0;return!1}I.schemaHasRulesButRef=cf;function lf({topSchemaRef:e,schemaPath:t},n,a,s){if(!s){if(typeof n=="number"||typeof n=="boolean")return n;if(typeof n=="string")return(0,ne._)`${n}`}return(0,ne._)`${e}${t}${(0,ne.getProperty)(a)}`}I.schemaRefOrVal=lf;function uf(e){return nl(decodeURIComponent(e))}I.unescapeFragment=uf;function pf(e){return encodeURIComponent(si(e))}I.escapeFragment=pf;function si(e){return typeof e=="number"?`${e}`:e.replace(/~/g,"~0").replace(/\//g,"~1")}I.escapeJsonPointer=si;function nl(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}I.unescapeJsonPointer=nl;function df(e,t){if(Array.isArray(e))for(const n of e)t(n);else t(e)}I.eachItem=df;function Jr({mergeNames:e,mergeToName:t,mergeValues:n,resultToName:a}){return(s,i,r,c)=>{const l=r===void 0?i:r instanceof ne.Name?(i instanceof ne.Name?e(s,i,r):t(s,i,r),r):i instanceof ne.Name?(t(s,r,i),i):n(i,r);return c===ne.Name&&!(l instanceof ne.Name)?a(s,l):l}}I.mergeEvaluated={props:Jr({mergeNames:(e,t,n)=>e.if((0,ne._)`${n} !== true && ${t} !== undefined`,()=>{e.if((0,ne._)`${t} === true`,()=>e.assign(n,!0),()=>e.assign(n,(0,ne._)`${n} || {}`).code((0,ne._)`Object.assign(${n}, ${t})`))}),mergeToName:(e,t,n)=>e.if((0,ne._)`${n} !== true`,()=>{t===!0?e.assign(n,!0):(e.assign(n,(0,ne._)`${n} || {}`),ii(e,n,t))}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:al}),items:Jr({mergeNames:(e,t,n)=>e.if((0,ne._)`${n} !== true && ${t} !== undefined`,()=>e.assign(n,(0,ne._)`${t} === true ? true : ${n} > ${t} ? ${n} : ${t}`)),mergeToName:(e,t,n)=>e.if((0,ne._)`${n} !== true`,()=>e.assign(n,t===!0?!0:(0,ne._)`${n} > ${t} ? ${n} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function al(e,t){if(t===!0)return e.var("props",!0);const n=e.var("props",(0,ne._)`{}`);return t!==void 0&&ii(e,n,t),n}I.evaluatedPropsToName=al;function ii(e,t,n){Object.keys(n).forEach(a=>e.assign((0,ne._)`${t}${(0,ne.getProperty)(a)}`,!0))}I.setEvaluated=ii;const Yr={};function mf(e,t){return e.scopeValue("func",{ref:t,code:Yr[t.code]||(Yr[t.code]=new sf._Code(t.code))})}I.useFunc=mf;var Rs;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(Rs||(I.Type=Rs={}));function ff(e,t,n){if(e instanceof ne.Name){const a=t===Rs.Num;return n?a?(0,ne._)`"[" + ${e} + "]"`:(0,ne._)`"['" + ${e} + "']"`:a?(0,ne._)`"/" + ${e}`:(0,ne._)`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return n?(0,ne.getProperty)(e).toString():"/"+si(e)}I.getErrorPath=ff;function sl(e,t,n=e.opts.strictSchema){if(n){if(t=`strict mode: ${t}`,n===!0)throw new Error(t);e.self.logger.warn(t)}}I.checkStrictMode=sl;var Oe={};Object.defineProperty(Oe,"__esModule",{value:!0});const ye=G,hf={data:new ye.Name("data"),valCxt:new ye.Name("valCxt"),instancePath:new ye.Name("instancePath"),parentData:new ye.Name("parentData"),parentDataProperty:new ye.Name("parentDataProperty"),rootData:new ye.Name("rootData"),dynamicAnchors:new ye.Name("dynamicAnchors"),vErrors:new ye.Name("vErrors"),errors:new ye.Name("errors"),this:new ye.Name("this"),self:new ye.Name("self"),scope:new ye.Name("scope"),json:new ye.Name("json"),jsonPos:new ye.Name("jsonPos"),jsonLen:new ye.Name("jsonLen"),jsonPart:new ye.Name("jsonPart")};Oe.default=hf;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const t=G,n=I,a=Oe;e.keywordError={message:({keyword:x})=>(0,t.str)`must pass "${x}" keyword validation`},e.keyword$DataError={message:({keyword:x,schemaType:v})=>v?(0,t.str)`"${x}" keyword must be ${v} ($data)`:(0,t.str)`"${x}" keyword is invalid ($data)`};function s(x,v=e.keywordError,$,E){const{it:O}=x,{gen:P,compositeRule:K,allErrors:X}=O,ae=p(x,v,$);E??(K||X)?l(P,ae):o(O,(0,t._)`[${ae}]`)}e.reportError=s;function i(x,v=e.keywordError,$){const{it:E}=x,{gen:O,compositeRule:P,allErrors:K}=E,X=p(x,v,$);l(O,X),P||K||o(E,a.default.vErrors)}e.reportExtraError=i;function r(x,v){x.assign(a.default.errors,v),x.if((0,t._)`${a.default.vErrors} !== null`,()=>x.if(v,()=>x.assign((0,t._)`${a.default.vErrors}.length`,v),()=>x.assign(a.default.vErrors,null)))}e.resetErrorsCount=r;function c({gen:x,keyword:v,schemaValue:$,data:E,errsCount:O,it:P}){if(O===void 0)throw new Error("ajv implementation error");const K=x.name("err");x.forRange("i",O,a.default.errors,X=>{x.const(K,(0,t._)`${a.default.vErrors}[${X}]`),x.if((0,t._)`${K}.instancePath === undefined`,()=>x.assign((0,t._)`${K}.instancePath`,(0,t.strConcat)(a.default.instancePath,P.errorPath))),x.assign((0,t._)`${K}.schemaPath`,(0,t.str)`${P.errSchemaPath}/${v}`),P.opts.verbose&&(x.assign((0,t._)`${K}.schema`,$),x.assign((0,t._)`${K}.data`,E))})}e.extendErrors=c;function l(x,v){const $=x.const("err",v);x.if((0,t._)`${a.default.vErrors} === null`,()=>x.assign(a.default.vErrors,(0,t._)`[${$}]`),(0,t._)`${a.default.vErrors}.push(${$})`),x.code((0,t._)`${a.default.errors}++`)}function o(x,v){const{gen:$,validateName:E,schemaEnv:O}=x;O.$async?$.throw((0,t._)`new ${x.ValidationError}(${v})`):($.assign((0,t._)`${E}.errors`,v),$.return(!1))}const u={keyword:new t.Name("keyword"),schemaPath:new t.Name("schemaPath"),params:new t.Name("params"),propertyName:new t.Name("propertyName"),message:new t.Name("message"),schema:new t.Name("schema"),parentSchema:new t.Name("parentSchema")};function p(x,v,$){const{createErrors:E}=x.it;return E===!1?(0,t._)`{}`:f(x,v,$)}function f(x,v,$={}){const{gen:E,it:O}=x,P=[h(O,$),m(x,$)];return y(x,v,P),E.object(...P)}function h({errorPath:x},{instancePath:v}){const $=v?(0,t.str)`${x}${(0,n.getErrorPath)(v,n.Type.Str)}`:x;return[a.default.instancePath,(0,t.strConcat)(a.default.instancePath,$)]}function m({keyword:x,it:{errSchemaPath:v}},{schemaPath:$,parentSchema:E}){let O=E?v:(0,t.str)`${v}/${x}`;return $&&(O=(0,t.str)`${O}${(0,n.getErrorPath)($,n.Type.Str)}`),[u.schemaPath,O]}function y(x,{params:v,message:$},E){const{keyword:O,data:P,schemaValue:K,it:X}=x,{opts:ae,propertyName:re,topSchemaRef:de,schemaPath:M}=X;E.push([u.keyword,O],[u.params,typeof v=="function"?v(x):v||(0,t._)`{}`]),ae.messages&&E.push([u.message,typeof $=="function"?$(x):$]),ae.verbose&&E.push([u.schema,K],[u.parentSchema,(0,t._)`${de}${M}`],[a.default.data,P]),re&&E.push([u.propertyName,re])}})(fn);Object.defineProperty(Lt,"__esModule",{value:!0});Lt.boolOrEmptySchema=Lt.topBoolOrEmptySchema=void 0;const vf=fn,xf=G,gf=Oe,yf={message:"boolean schema is false"};function bf(e){const{gen:t,schema:n,validateName:a}=e;n===!1?il(e,!1):typeof n=="object"&&n.$async===!0?t.return(gf.default.data):(t.assign((0,xf._)`${a}.errors`,null),t.return(!0))}Lt.topBoolOrEmptySchema=bf;function $f(e,t){const{gen:n,schema:a}=e;a===!1?(n.var(t,!1),il(e)):n.var(t,!0)}Lt.boolOrEmptySchema=$f;function il(e,t){const{gen:n,data:a}=e,s={gen:n,keyword:"false schema",data:a,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,vf.reportError)(s,yf,void 0,t)}var pe={},bt={};Object.defineProperty(bt,"__esModule",{value:!0});bt.getRules=bt.isJSONType=void 0;const wf=["string","number","integer","boolean","null","object","array"],_f=new Set(wf);function Ef(e){return typeof e=="string"&&_f.has(e)}bt.isJSONType=Ef;function Sf(){const e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}bt.getRules=Sf;var He={};Object.defineProperty(He,"__esModule",{value:!0});He.shouldUseRule=He.shouldUseGroup=He.schemaHasRulesForType=void 0;function Rf({schema:e,self:t},n){const a=t.RULES.types[n];return a&&a!==!0&&rl(e,a)}He.schemaHasRulesForType=Rf;function rl(e,t){return t.rules.some(n=>ol(e,n))}He.shouldUseGroup=rl;function ol(e,t){var n;return e[t.keyword]!==void 0||((n=t.definition.implements)===null||n===void 0?void 0:n.some(a=>e[a]!==void 0))}He.shouldUseRule=ol;Object.defineProperty(pe,"__esModule",{value:!0});pe.reportTypeError=pe.checkDataTypes=pe.checkDataType=pe.coerceAndCheckDataType=pe.getJSONTypes=pe.getSchemaTypes=pe.DataType=void 0;const kf=bt,jf=He,Tf=fn,W=G,cl=I;var At;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(At||(pe.DataType=At={}));function Of(e){const t=ll(e.type);if(t.includes("null")){if(e.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');e.nullable===!0&&t.push("null")}return t}pe.getSchemaTypes=Of;function ll(e){const t=Array.isArray(e)?e:e?[e]:[];if(t.every(kf.isJSONType))return t;throw new Error("type must be JSONType or JSONType[]: "+t.join(","))}pe.getJSONTypes=ll;function Pf(e,t){const{gen:n,data:a,opts:s}=e,i=Nf(t,s.coerceTypes),r=t.length>0&&!(i.length===0&&t.length===1&&(0,jf.schemaHasRulesForType)(e,t[0]));if(r){const c=ri(t,a,s.strictNumbers,At.Wrong);n.if(c,()=>{i.length?Af(e,t,i):oi(e)})}return r}pe.coerceAndCheckDataType=Pf;const ul=new Set(["string","number","integer","boolean","null"]);function Nf(e,t){return t?e.filter(n=>ul.has(n)||t==="array"&&n==="array"):[]}function Af(e,t,n){const{gen:a,data:s,opts:i}=e,r=a.let("dataType",(0,W._)`typeof ${s}`),c=a.let("coerced",(0,W._)`undefined`);i.coerceTypes==="array"&&a.if((0,W._)`${r} == 'object' && Array.isArray(${s}) && ${s}.length == 1`,()=>a.assign(s,(0,W._)`${s}[0]`).assign(r,(0,W._)`typeof ${s}`).if(ri(t,s,i.strictNumbers),()=>a.assign(c,s))),a.if((0,W._)`${c} !== undefined`);for(const o of n)(ul.has(o)||o==="array"&&i.coerceTypes==="array")&&l(o);a.else(),oi(e),a.endIf(),a.if((0,W._)`${c} !== undefined`,()=>{a.assign(s,c),Cf(e,c)});function l(o){switch(o){case"string":a.elseIf((0,W._)`${r} == "number" || ${r} == "boolean"`).assign(c,(0,W._)`"" + ${s}`).elseIf((0,W._)`${s} === null`).assign(c,(0,W._)`""`);return;case"number":a.elseIf((0,W._)`${r} == "boolean" || ${s} === null
24
+ || (${r} == "string" && ${s} && ${s} == +${s})`).assign(c,(0,W._)`+${s}`);return;case"integer":a.elseIf((0,W._)`${r} === "boolean" || ${s} === null
25
+ || (${r} === "string" && ${s} && ${s} == +${s} && !(${s} % 1))`).assign(c,(0,W._)`+${s}`);return;case"boolean":a.elseIf((0,W._)`${s} === "false" || ${s} === 0 || ${s} === null`).assign(c,!1).elseIf((0,W._)`${s} === "true" || ${s} === 1`).assign(c,!0);return;case"null":a.elseIf((0,W._)`${s} === "" || ${s} === 0 || ${s} === false`),a.assign(c,null);return;case"array":a.elseIf((0,W._)`${r} === "string" || ${r} === "number"
26
+ || ${r} === "boolean" || ${s} === null`).assign(c,(0,W._)`[${s}]`)}}}function Cf({gen:e,parentData:t,parentDataProperty:n},a){e.if((0,W._)`${t} !== undefined`,()=>e.assign((0,W._)`${t}[${n}]`,a))}function ks(e,t,n,a=At.Correct){const s=a===At.Correct?W.operators.EQ:W.operators.NEQ;let i;switch(e){case"null":return(0,W._)`${t} ${s} null`;case"array":i=(0,W._)`Array.isArray(${t})`;break;case"object":i=(0,W._)`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=r((0,W._)`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=r();break;default:return(0,W._)`typeof ${t} ${s} ${e}`}return a===At.Correct?i:(0,W.not)(i);function r(c=W.nil){return(0,W.and)((0,W._)`typeof ${t} == "number"`,c,n?(0,W._)`isFinite(${t})`:W.nil)}}pe.checkDataType=ks;function ri(e,t,n,a){if(e.length===1)return ks(e[0],t,n,a);let s;const i=(0,cl.toHash)(e);if(i.array&&i.object){const r=(0,W._)`typeof ${t} != "object"`;s=i.null?r:(0,W._)`!${t} || ${r}`,delete i.null,delete i.array,delete i.object}else s=W.nil;i.number&&delete i.integer;for(const r in i)s=(0,W.and)(s,ks(r,t,n,a));return s}pe.checkDataTypes=ri;const If={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?(0,W._)`{type: ${e}}`:(0,W._)`{type: ${t}}`};function oi(e){const t=Lf(e);(0,Tf.reportError)(t,If)}pe.reportTypeError=oi;function Lf(e){const{gen:t,data:n,schema:a}=e,s=(0,cl.schemaRefOrVal)(e,a,"type");return{gen:t,keyword:"type",data:n,schema:a.type,schemaCode:s,schemaValue:s,parentSchema:a,params:{},it:e}}var ca={};Object.defineProperty(ca,"__esModule",{value:!0});ca.assignDefaults=void 0;const Et=G,Df=I;function Ff(e,t){const{properties:n,items:a}=e.schema;if(t==="object"&&n)for(const s in n)Zr(e,s,n[s].default);else t==="array"&&Array.isArray(a)&&a.forEach((s,i)=>Zr(e,i,s.default))}ca.assignDefaults=Ff;function Zr(e,t,n){const{gen:a,compositeRule:s,data:i,opts:r}=e;if(n===void 0)return;const c=(0,Et._)`${i}${(0,Et.getProperty)(t)}`;if(s){(0,Df.checkStrictMode)(e,`default is ignored for: ${c}`);return}let l=(0,Et._)`${c} === undefined`;r.useDefaults==="empty"&&(l=(0,Et._)`${l} || ${c} === null || ${c} === ""`),a.if(l,(0,Et._)`${c} = ${(0,Et.stringify)(n)}`)}var Ue={},J={};Object.defineProperty(J,"__esModule",{value:!0});J.validateUnion=J.validateArray=J.usePattern=J.callValidateCode=J.schemaProperties=J.allSchemaProperties=J.noPropertyInData=J.propertyInData=J.isOwnProperty=J.hasPropFunc=J.reportMissingProp=J.checkMissingProp=J.checkReportMissingProp=void 0;const se=G,ci=I,Qe=Oe,zf=I;function qf(e,t){const{gen:n,data:a,it:s}=e;n.if(ui(n,a,t,s.opts.ownProperties),()=>{e.setParams({missingProperty:(0,se._)`${t}`},!0),e.error()})}J.checkReportMissingProp=qf;function Mf({gen:e,data:t,it:{opts:n}},a,s){return(0,se.or)(...a.map(i=>(0,se.and)(ui(e,t,i,n.ownProperties),(0,se._)`${s} = ${i}`)))}J.checkMissingProp=Mf;function Uf(e,t){e.setParams({missingProperty:t},!0),e.error()}J.reportMissingProp=Uf;function pl(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,se._)`Object.prototype.hasOwnProperty`})}J.hasPropFunc=pl;function li(e,t,n){return(0,se._)`${pl(e)}.call(${t}, ${n})`}J.isOwnProperty=li;function Bf(e,t,n,a){const s=(0,se._)`${t}${(0,se.getProperty)(n)} !== undefined`;return a?(0,se._)`${s} && ${li(e,t,n)}`:s}J.propertyInData=Bf;function ui(e,t,n,a){const s=(0,se._)`${t}${(0,se.getProperty)(n)} === undefined`;return a?(0,se.or)(s,(0,se.not)(li(e,t,n))):s}J.noPropertyInData=ui;function dl(e){return e?Object.keys(e).filter(t=>t!=="__proto__"):[]}J.allSchemaProperties=dl;function Vf(e,t){return dl(t).filter(n=>!(0,ci.alwaysValidSchema)(e,t[n]))}J.schemaProperties=Vf;function Hf({schemaCode:e,data:t,it:{gen:n,topSchemaRef:a,schemaPath:s,errorPath:i},it:r},c,l,o){const u=o?(0,se._)`${e}, ${t}, ${a}${s}`:t,p=[[Qe.default.instancePath,(0,se.strConcat)(Qe.default.instancePath,i)],[Qe.default.parentData,r.parentData],[Qe.default.parentDataProperty,r.parentDataProperty],[Qe.default.rootData,Qe.default.rootData]];r.opts.dynamicRef&&p.push([Qe.default.dynamicAnchors,Qe.default.dynamicAnchors]);const f=(0,se._)`${u}, ${n.object(...p)}`;return l!==se.nil?(0,se._)`${c}.call(${l}, ${f})`:(0,se._)`${c}(${f})`}J.callValidateCode=Hf;const Gf=(0,se._)`new RegExp`;function Kf({gen:e,it:{opts:t}},n){const a=t.unicodeRegExp?"u":"",{regExp:s}=t.code,i=s(n,a);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:(0,se._)`${s.code==="new RegExp"?Gf:(0,zf.useFunc)(e,s)}(${n}, ${a})`})}J.usePattern=Kf;function Wf(e){const{gen:t,data:n,keyword:a,it:s}=e,i=t.name("valid");if(s.allErrors){const c=t.let("valid",!0);return r(()=>t.assign(c,!1)),c}return t.var(i,!0),r(()=>t.break()),i;function r(c){const l=t.const("len",(0,se._)`${n}.length`);t.forRange("i",0,l,o=>{e.subschema({keyword:a,dataProp:o,dataPropType:ci.Type.Num},i),t.if((0,se.not)(i),c)})}}J.validateArray=Wf;function Xf(e){const{gen:t,schema:n,keyword:a,it:s}=e;if(!Array.isArray(n))throw new Error("ajv implementation error");if(n.some(l=>(0,ci.alwaysValidSchema)(s,l))&&!s.opts.unevaluated)return;const r=t.let("valid",!1),c=t.name("_valid");t.block(()=>n.forEach((l,o)=>{const u=e.subschema({keyword:a,schemaProp:o,compositeRule:!0},c);t.assign(r,(0,se._)`${r} || ${c}`),e.mergeValidEvaluated(u,c)||t.if((0,se.not)(r))})),e.result(r,()=>e.reset(),()=>e.error(!0))}J.validateUnion=Xf;Object.defineProperty(Ue,"__esModule",{value:!0});Ue.validateKeywordUsage=Ue.validSchemaType=Ue.funcKeywordCode=Ue.macroKeywordCode=void 0;const we=G,ut=Oe,Jf=J,Yf=fn;function Zf(e,t){const{gen:n,keyword:a,schema:s,parentSchema:i,it:r}=e,c=t.macro.call(r.self,s,i,r),l=ml(n,a,c);r.opts.validateSchema!==!1&&r.self.validateSchema(c,!0);const o=n.name("valid");e.subschema({schema:c,schemaPath:we.nil,errSchemaPath:`${r.errSchemaPath}/${a}`,topSchemaRef:l,compositeRule:!0},o),e.pass(o,()=>e.error(!0))}Ue.macroKeywordCode=Zf;function Qf(e,t){var n;const{gen:a,keyword:s,schema:i,parentSchema:r,$data:c,it:l}=e;th(l,t);const o=!c&&t.compile?t.compile.call(l.self,i,r,l):t.validate,u=ml(a,s,o),p=a.let("valid");e.block$data(p,f),e.ok((n=t.valid)!==null&&n!==void 0?n:p);function f(){if(t.errors===!1)y(),t.modifying&&Qr(e),x(()=>e.error());else{const v=t.async?h():m();t.modifying&&Qr(e),x(()=>eh(e,v))}}function h(){const v=a.let("ruleErrs",null);return a.try(()=>y((0,we._)`await `),$=>a.assign(p,!1).if((0,we._)`${$} instanceof ${l.ValidationError}`,()=>a.assign(v,(0,we._)`${$}.errors`),()=>a.throw($))),v}function m(){const v=(0,we._)`${u}.errors`;return a.assign(v,null),y(we.nil),v}function y(v=t.async?(0,we._)`await `:we.nil){const $=l.opts.passContext?ut.default.this:ut.default.self,E=!("compile"in t&&!c||t.schema===!1);a.assign(p,(0,we._)`${v}${(0,Jf.callValidateCode)(e,u,$,E)}`,t.modifying)}function x(v){var $;a.if((0,we.not)(($=t.valid)!==null&&$!==void 0?$:p),v)}}Ue.funcKeywordCode=Qf;function Qr(e){const{gen:t,data:n,it:a}=e;t.if(a.parentData,()=>t.assign(n,(0,we._)`${a.parentData}[${a.parentDataProperty}]`))}function eh(e,t){const{gen:n}=e;n.if((0,we._)`Array.isArray(${t})`,()=>{n.assign(ut.default.vErrors,(0,we._)`${ut.default.vErrors} === null ? ${t} : ${ut.default.vErrors}.concat(${t})`).assign(ut.default.errors,(0,we._)`${ut.default.vErrors}.length`),(0,Yf.extendErrors)(e)},()=>e.error())}function th({schemaEnv:e},t){if(t.async&&!e.$async)throw new Error("async keyword in sync schema")}function ml(e,t,n){if(n===void 0)throw new Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof n=="function"?{ref:n}:{ref:n,code:(0,we.stringify)(n)})}function nh(e,t,n=!1){return!t.length||t.some(a=>a==="array"?Array.isArray(e):a==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==a||n&&typeof e>"u")}Ue.validSchemaType=nh;function ah({schema:e,opts:t,self:n,errSchemaPath:a},s,i){if(Array.isArray(s.keyword)?!s.keyword.includes(i):s.keyword!==i)throw new Error("ajv implementation error");const r=s.dependencies;if(r?.some(c=>!Object.prototype.hasOwnProperty.call(e,c)))throw new Error(`parent schema must have dependencies of ${i}: ${r.join(",")}`);if(s.validateSchema&&!s.validateSchema(e[i])){const l=`keyword "${i}" value is invalid at path "${a}": `+n.errorsText(s.validateSchema.errors);if(t.validateSchema==="log")n.logger.error(l);else throw new Error(l)}}Ue.validateKeywordUsage=ah;var rt={};Object.defineProperty(rt,"__esModule",{value:!0});rt.extendSubschemaMode=rt.extendSubschemaData=rt.getSubschema=void 0;const Me=G,fl=I;function sh(e,{keyword:t,schemaProp:n,schema:a,schemaPath:s,errSchemaPath:i,topSchemaRef:r}){if(t!==void 0&&a!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){const c=e.schema[t];return n===void 0?{schema:c,schemaPath:(0,Me._)`${e.schemaPath}${(0,Me.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:c[n],schemaPath:(0,Me._)`${e.schemaPath}${(0,Me.getProperty)(t)}${(0,Me.getProperty)(n)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,fl.escapeFragment)(n)}`}}if(a!==void 0){if(s===void 0||i===void 0||r===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:a,schemaPath:s,topSchemaRef:r,errSchemaPath:i}}throw new Error('either "keyword" or "schema" must be passed')}rt.getSubschema=sh;function ih(e,t,{dataProp:n,dataPropType:a,data:s,dataTypes:i,propertyName:r}){if(s!==void 0&&n!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:c}=t;if(n!==void 0){const{errorPath:o,dataPathArr:u,opts:p}=t,f=c.let("data",(0,Me._)`${t.data}${(0,Me.getProperty)(n)}`,!0);l(f),e.errorPath=(0,Me.str)`${o}${(0,fl.getErrorPath)(n,a,p.jsPropertySyntax)}`,e.parentDataProperty=(0,Me._)`${n}`,e.dataPathArr=[...u,e.parentDataProperty]}if(s!==void 0){const o=s instanceof Me.Name?s:c.let("data",s,!0);l(o),r!==void 0&&(e.propertyName=r)}i&&(e.dataTypes=i);function l(o){e.data=o,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,o]}}rt.extendSubschemaData=ih;function rh(e,{jtdDiscriminator:t,jtdMetadata:n,compositeRule:a,createErrors:s,allErrors:i}){a!==void 0&&(e.compositeRule=a),s!==void 0&&(e.createErrors=s),i!==void 0&&(e.allErrors=i),e.jtdDiscriminator=t,e.jtdMetadata=n}rt.extendSubschemaMode=rh;var xe={},hl=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var a,s,i;if(Array.isArray(t)){if(a=t.length,a!=n.length)return!1;for(s=a;s--!==0;)if(!e(t[s],n[s]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(i=Object.keys(t),a=i.length,a!==Object.keys(n).length)return!1;for(s=a;s--!==0;)if(!Object.prototype.hasOwnProperty.call(n,i[s]))return!1;for(s=a;s--!==0;){var r=i[s];if(!e(t[r],n[r]))return!1}return!0}return t!==t&&n!==n},vl={exports:{}},st=vl.exports=function(e,t,n){typeof t=="function"&&(n=t,t={}),n=t.cb||n;var a=typeof n=="function"?n:n.pre||function(){},s=n.post||function(){};Cn(t,a,s,e,"",e)};st.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};st.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};st.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};st.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Cn(e,t,n,a,s,i,r,c,l,o){if(a&&typeof a=="object"&&!Array.isArray(a)){t(a,s,i,r,c,l,o);for(var u in a){var p=a[u];if(Array.isArray(p)){if(u in st.arrayKeywords)for(var f=0;f<p.length;f++)Cn(e,t,n,p[f],s+"/"+u+"/"+f,i,s,u,a,f)}else if(u in st.propsKeywords){if(p&&typeof p=="object")for(var h in p)Cn(e,t,n,p[h],s+"/"+u+"/"+oh(h),i,s,u,a,h)}else(u in st.keywords||e.allKeys&&!(u in st.skipKeywords))&&Cn(e,t,n,p,s+"/"+u,i,s,u,a)}n(a,s,i,r,c,l,o)}}function oh(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}var ch=vl.exports;Object.defineProperty(xe,"__esModule",{value:!0});xe.getSchemaRefs=xe.resolveUrl=xe.normalizeId=xe._getFullPath=xe.getFullPath=xe.inlineRef=void 0;const lh=I,uh=hl,ph=ch,dh=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function mh(e,t=!0){return typeof e=="boolean"?!0:t===!0?!js(e):t?xl(e)<=t:!1}xe.inlineRef=mh;const fh=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function js(e){for(const t in e){if(fh.has(t))return!0;const n=e[t];if(Array.isArray(n)&&n.some(js)||typeof n=="object"&&js(n))return!0}return!1}function xl(e){let t=0;for(const n in e){if(n==="$ref")return 1/0;if(t++,!dh.has(n)&&(typeof e[n]=="object"&&(0,lh.eachItem)(e[n],a=>t+=xl(a)),t===1/0))return 1/0}return t}function gl(e,t="",n){n!==!1&&(t=Ct(t));const a=e.parse(t);return yl(e,a)}xe.getFullPath=gl;function yl(e,t){return e.serialize(t).split("#")[0]+"#"}xe._getFullPath=yl;const hh=/#\/?$/;function Ct(e){return e?e.replace(hh,""):""}xe.normalizeId=Ct;function vh(e,t,n){return n=Ct(n),e.resolve(t,n)}xe.resolveUrl=vh;const xh=/^[a-z_][-a-z0-9._]*$/i;function gh(e,t){if(typeof e=="boolean")return{};const{schemaId:n,uriResolver:a}=this.opts,s=Ct(e[n]||t),i={"":s},r=gl(a,s,!1),c={},l=new Set;return ph(e,{allKeys:!0},(p,f,h,m)=>{if(m===void 0)return;const y=r+f;let x=i[m];typeof p[n]=="string"&&(x=v.call(this,p[n])),$.call(this,p.$anchor),$.call(this,p.$dynamicAnchor),i[f]=x;function v(E){const O=this.opts.uriResolver.resolve;if(E=Ct(x?O(x,E):E),l.has(E))throw u(E);l.add(E);let P=this.refs[E];return typeof P=="string"&&(P=this.refs[P]),typeof P=="object"?o(p,P.schema,E):E!==Ct(y)&&(E[0]==="#"?(o(p,c[E],E),c[E]=p):this.refs[E]=y),E}function $(E){if(typeof E=="string"){if(!xh.test(E))throw new Error(`invalid anchor "${E}"`);v.call(this,`#${E}`)}}}),c;function o(p,f,h){if(f!==void 0&&!uh(p,f))throw u(h)}function u(p){return new Error(`reference "${p}" resolves to more than one schema`)}}xe.getSchemaRefs=gh;Object.defineProperty(Ne,"__esModule",{value:!0});Ne.getData=Ne.KeywordCxt=Ne.validateFunctionCode=void 0;const bl=Lt,eo=pe,pi=He,Vn=pe,yh=ca,en=Ue,Qa=rt,q=G,V=Oe,bh=xe,Ge=I,Xt=fn;function $h(e){if(_l(e)&&(El(e),wl(e))){Eh(e);return}$l(e,()=>(0,bl.topBoolOrEmptySchema)(e))}Ne.validateFunctionCode=$h;function $l({gen:e,validateName:t,schema:n,schemaEnv:a,opts:s},i){s.code.es5?e.func(t,(0,q._)`${V.default.data}, ${V.default.valCxt}`,a.$async,()=>{e.code((0,q._)`"use strict"; ${to(n,s)}`),_h(e,s),e.code(i)}):e.func(t,(0,q._)`${V.default.data}, ${wh(s)}`,a.$async,()=>e.code(to(n,s)).code(i))}function wh(e){return(0,q._)`{${V.default.instancePath}="", ${V.default.parentData}, ${V.default.parentDataProperty}, ${V.default.rootData}=${V.default.data}${e.dynamicRef?(0,q._)`, ${V.default.dynamicAnchors}={}`:q.nil}}={}`}function _h(e,t){e.if(V.default.valCxt,()=>{e.var(V.default.instancePath,(0,q._)`${V.default.valCxt}.${V.default.instancePath}`),e.var(V.default.parentData,(0,q._)`${V.default.valCxt}.${V.default.parentData}`),e.var(V.default.parentDataProperty,(0,q._)`${V.default.valCxt}.${V.default.parentDataProperty}`),e.var(V.default.rootData,(0,q._)`${V.default.valCxt}.${V.default.rootData}`),t.dynamicRef&&e.var(V.default.dynamicAnchors,(0,q._)`${V.default.valCxt}.${V.default.dynamicAnchors}`)},()=>{e.var(V.default.instancePath,(0,q._)`""`),e.var(V.default.parentData,(0,q._)`undefined`),e.var(V.default.parentDataProperty,(0,q._)`undefined`),e.var(V.default.rootData,V.default.data),t.dynamicRef&&e.var(V.default.dynamicAnchors,(0,q._)`{}`)})}function Eh(e){const{schema:t,opts:n,gen:a}=e;$l(e,()=>{n.$comment&&t.$comment&&Rl(e),Th(e),a.let(V.default.vErrors,null),a.let(V.default.errors,0),n.unevaluated&&Sh(e),Sl(e),Nh(e)})}function Sh(e){const{gen:t,validateName:n}=e;e.evaluated=t.const("evaluated",(0,q._)`${n}.evaluated`),t.if((0,q._)`${e.evaluated}.dynamicProps`,()=>t.assign((0,q._)`${e.evaluated}.props`,(0,q._)`undefined`)),t.if((0,q._)`${e.evaluated}.dynamicItems`,()=>t.assign((0,q._)`${e.evaluated}.items`,(0,q._)`undefined`))}function to(e,t){const n=typeof e=="object"&&e[t.schemaId];return n&&(t.code.source||t.code.process)?(0,q._)`/*# sourceURL=${n} */`:q.nil}function Rh(e,t){if(_l(e)&&(El(e),wl(e))){kh(e,t);return}(0,bl.boolOrEmptySchema)(e,t)}function wl({schema:e,self:t}){if(typeof e=="boolean")return!e;for(const n in e)if(t.RULES.all[n])return!0;return!1}function _l(e){return typeof e.schema!="boolean"}function kh(e,t){const{schema:n,gen:a,opts:s}=e;s.$comment&&n.$comment&&Rl(e),Oh(e),Ph(e);const i=a.const("_errs",V.default.errors);Sl(e,i),a.var(t,(0,q._)`${i} === ${V.default.errors}`)}function El(e){(0,Ge.checkUnknownRules)(e),jh(e)}function Sl(e,t){if(e.opts.jtd)return no(e,[],!1,t);const n=(0,eo.getSchemaTypes)(e.schema),a=(0,eo.coerceAndCheckDataType)(e,n);no(e,n,!a,t)}function jh(e){const{schema:t,errSchemaPath:n,opts:a,self:s}=e;t.$ref&&a.ignoreKeywordsWithRef&&(0,Ge.schemaHasRulesButRef)(t,s.RULES)&&s.logger.warn(`$ref: keywords ignored in schema at path "${n}"`)}function Th(e){const{schema:t,opts:n}=e;t.default!==void 0&&n.useDefaults&&n.strictSchema&&(0,Ge.checkStrictMode)(e,"default is ignored in the schema root")}function Oh(e){const t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,bh.resolveUrl)(e.opts.uriResolver,e.baseId,t))}function Ph(e){if(e.schema.$async&&!e.schemaEnv.$async)throw new Error("async schema in sync schema")}function Rl({gen:e,schemaEnv:t,schema:n,errSchemaPath:a,opts:s}){const i=n.$comment;if(s.$comment===!0)e.code((0,q._)`${V.default.self}.logger.log(${i})`);else if(typeof s.$comment=="function"){const r=(0,q.str)`${a}/$comment`,c=e.scopeValue("root",{ref:t.root});e.code((0,q._)`${V.default.self}.opts.$comment(${i}, ${r}, ${c}.schema)`)}}function Nh(e){const{gen:t,schemaEnv:n,validateName:a,ValidationError:s,opts:i}=e;n.$async?t.if((0,q._)`${V.default.errors} === 0`,()=>t.return(V.default.data),()=>t.throw((0,q._)`new ${s}(${V.default.vErrors})`)):(t.assign((0,q._)`${a}.errors`,V.default.vErrors),i.unevaluated&&Ah(e),t.return((0,q._)`${V.default.errors} === 0`))}function Ah({gen:e,evaluated:t,props:n,items:a}){n instanceof q.Name&&e.assign((0,q._)`${t}.props`,n),a instanceof q.Name&&e.assign((0,q._)`${t}.items`,a)}function no(e,t,n,a){const{gen:s,schema:i,data:r,allErrors:c,opts:l,self:o}=e,{RULES:u}=o;if(i.$ref&&(l.ignoreKeywordsWithRef||!(0,Ge.schemaHasRulesButRef)(i,u))){s.block(()=>Tl(e,"$ref",u.all.$ref.definition));return}l.jtd||Ch(e,t),s.block(()=>{for(const f of u.rules)p(f);p(u.post)});function p(f){(0,pi.shouldUseGroup)(i,f)&&(f.type?(s.if((0,Vn.checkDataType)(f.type,r,l.strictNumbers)),ao(e,f),t.length===1&&t[0]===f.type&&n&&(s.else(),(0,Vn.reportTypeError)(e)),s.endIf()):ao(e,f),c||s.if((0,q._)`${V.default.errors} === ${a||0}`))}}function ao(e,t){const{gen:n,schema:a,opts:{useDefaults:s}}=e;s&&(0,yh.assignDefaults)(e,t.type),n.block(()=>{for(const i of t.rules)(0,pi.shouldUseRule)(a,i)&&Tl(e,i.keyword,i.definition,t.type)})}function Ch(e,t){e.schemaEnv.meta||!e.opts.strictTypes||(Ih(e,t),e.opts.allowUnionTypes||Lh(e,t),Dh(e,e.dataTypes))}function Ih(e,t){if(t.length){if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach(n=>{kl(e.dataTypes,n)||di(e,`type "${n}" not allowed by context "${e.dataTypes.join(",")}"`)}),zh(e,t)}}function Lh(e,t){t.length>1&&!(t.length===2&&t.includes("null"))&&di(e,"use allowUnionTypes to allow union type keyword")}function Dh(e,t){const n=e.self.RULES.all;for(const a in n){const s=n[a];if(typeof s=="object"&&(0,pi.shouldUseRule)(e.schema,s)){const{type:i}=s.definition;i.length&&!i.some(r=>Fh(t,r))&&di(e,`missing type "${i.join(",")}" for keyword "${a}"`)}}}function Fh(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function kl(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function zh(e,t){const n=[];for(const a of e.dataTypes)kl(t,a)?n.push(a):t.includes("integer")&&a==="number"&&n.push("integer");e.dataTypes=n}function di(e,t){const n=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${n}" (strictTypes)`,(0,Ge.checkStrictMode)(e,t,e.opts.strictTypes)}class jl{constructor(t,n,a){if((0,en.validateKeywordUsage)(t,n,a),this.gen=t.gen,this.allErrors=t.allErrors,this.keyword=a,this.data=t.data,this.schema=t.schema[a],this.$data=n.$data&&t.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,Ge.schemaRefOrVal)(t,this.schema,a,this.$data),this.schemaType=n.schemaType,this.parentSchema=t.schema,this.params={},this.it=t,this.def=n,this.$data)this.schemaCode=t.gen.const("vSchema",Ol(this.$data,t));else if(this.schemaCode=this.schemaValue,!(0,en.validSchemaType)(this.schema,n.schemaType,n.allowUndefined))throw new Error(`${a} value must be ${JSON.stringify(n.schemaType)}`);("code"in n?n.trackErrors:n.errors!==!1)&&(this.errsCount=t.gen.const("_errs",V.default.errors))}result(t,n,a){this.failResult((0,q.not)(t),n,a)}failResult(t,n,a){this.gen.if(t),a?a():this.error(),n?(this.gen.else(),n(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(t,n){this.failResult((0,q.not)(t),void 0,n)}fail(t){if(t===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(t),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(t){if(!this.$data)return this.fail(t);const{schemaCode:n}=this;this.fail((0,q._)`${n} !== undefined && (${(0,q.or)(this.invalid$data(),t)})`)}error(t,n,a){if(n){this.setParams(n),this._error(t,a),this.setParams({});return}this._error(t,a)}_error(t,n){(t?Xt.reportExtraError:Xt.reportError)(this,this.def.error,n)}$dataError(){(0,Xt.reportError)(this,this.def.$dataError||Xt.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,Xt.resetErrorsCount)(this.gen,this.errsCount)}ok(t){this.allErrors||this.gen.if(t)}setParams(t,n){n?Object.assign(this.params,t):this.params=t}block$data(t,n,a=q.nil){this.gen.block(()=>{this.check$data(t,a),n()})}check$data(t=q.nil,n=q.nil){if(!this.$data)return;const{gen:a,schemaCode:s,schemaType:i,def:r}=this;a.if((0,q.or)((0,q._)`${s} === undefined`,n)),t!==q.nil&&a.assign(t,!0),(i.length||r.validateSchema)&&(a.elseIf(this.invalid$data()),this.$dataError(),t!==q.nil&&a.assign(t,!1)),a.else()}invalid$data(){const{gen:t,schemaCode:n,schemaType:a,def:s,it:i}=this;return(0,q.or)(r(),c());function r(){if(a.length){if(!(n instanceof q.Name))throw new Error("ajv implementation error");const l=Array.isArray(a)?a:[a];return(0,q._)`${(0,Vn.checkDataTypes)(l,n,i.opts.strictNumbers,Vn.DataType.Wrong)}`}return q.nil}function c(){if(s.validateSchema){const l=t.scopeValue("validate$data",{ref:s.validateSchema});return(0,q._)`!${l}(${n})`}return q.nil}}subschema(t,n){const a=(0,Qa.getSubschema)(this.it,t);(0,Qa.extendSubschemaData)(a,this.it,t),(0,Qa.extendSubschemaMode)(a,t);const s={...this.it,...a,items:void 0,props:void 0};return Rh(s,n),s}mergeEvaluated(t,n){const{it:a,gen:s}=this;a.opts.unevaluated&&(a.props!==!0&&t.props!==void 0&&(a.props=Ge.mergeEvaluated.props(s,t.props,a.props,n)),a.items!==!0&&t.items!==void 0&&(a.items=Ge.mergeEvaluated.items(s,t.items,a.items,n)))}mergeValidEvaluated(t,n){const{it:a,gen:s}=this;if(a.opts.unevaluated&&(a.props!==!0||a.items!==!0))return s.if(n,()=>this.mergeEvaluated(t,q.Name)),!0}}Ne.KeywordCxt=jl;function Tl(e,t,n,a){const s=new jl(e,n,t);"code"in n?n.code(s,a):s.$data&&n.validate?(0,en.funcKeywordCode)(s,n):"macro"in n?(0,en.macroKeywordCode)(s,n):(n.compile||n.validate)&&(0,en.funcKeywordCode)(s,n)}const qh=/^\/(?:[^~]|~0|~1)*$/,Mh=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Ol(e,{dataLevel:t,dataNames:n,dataPathArr:a}){let s,i;if(e==="")return V.default.rootData;if(e[0]==="/"){if(!qh.test(e))throw new Error(`Invalid JSON-pointer: ${e}`);s=e,i=V.default.rootData}else{const o=Mh.exec(e);if(!o)throw new Error(`Invalid JSON-pointer: ${e}`);const u=+o[1];if(s=o[2],s==="#"){if(u>=t)throw new Error(l("property/index",u));return a[t-u]}if(u>t)throw new Error(l("data",u));if(i=n[t-u],!s)return i}let r=i;const c=s.split("/");for(const o of c)o&&(i=(0,q._)`${i}${(0,q.getProperty)((0,Ge.unescapeJsonPointer)(o))}`,r=(0,q._)`${r} && ${i}`);return r;function l(o,u){return`Cannot access ${o} ${u} levels up, current level is ${t}`}}Ne.getData=Ol;var zt={};Object.defineProperty(zt,"__esModule",{value:!0});class Uh extends Error{constructor(t){super("validation failed"),this.errors=t,this.ajv=this.validation=!0}}zt.default=Uh;var wt={};Object.defineProperty(wt,"__esModule",{value:!0});const es=xe;class Bh extends Error{constructor(t,n,a,s){super(s||`can't resolve reference ${a} from id ${n}`),this.missingRef=(0,es.resolveUrl)(t,n,a),this.missingSchema=(0,es.normalizeId)((0,es.getFullPath)(t,this.missingRef))}}wt.default=Bh;var _e={};Object.defineProperty(_e,"__esModule",{value:!0});_e.resolveSchema=_e.getCompilingSchema=_e.resolveRef=_e.compileSchema=_e.SchemaEnv=void 0;const Ae=G,Vh=zt,lt=Oe,Ie=xe,so=I,Hh=Ne;class la{constructor(t){var n;this.refs={},this.dynamicAnchors={};let a;typeof t.schema=="object"&&(a=t.schema),this.schema=t.schema,this.schemaId=t.schemaId,this.root=t.root||this,this.baseId=(n=t.baseId)!==null&&n!==void 0?n:(0,Ie.normalizeId)(a?.[t.schemaId||"$id"]),this.schemaPath=t.schemaPath,this.localRefs=t.localRefs,this.meta=t.meta,this.$async=a?.$async,this.refs={}}}_e.SchemaEnv=la;function mi(e){const t=Pl.call(this,e);if(t)return t;const n=(0,Ie.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:a,lines:s}=this.opts.code,{ownProperties:i}=this.opts,r=new Ae.CodeGen(this.scope,{es5:a,lines:s,ownProperties:i});let c;e.$async&&(c=r.scopeValue("Error",{ref:Vh.default,code:(0,Ae._)`require("ajv/dist/runtime/validation_error").default`}));const l=r.scopeName("validate");e.validateName=l;const o={gen:r,allErrors:this.opts.allErrors,data:lt.default.data,parentData:lt.default.parentData,parentDataProperty:lt.default.parentDataProperty,dataNames:[lt.default.data],dataPathArr:[Ae.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:r.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:(0,Ae.stringify)(e.schema)}:{ref:e.schema}),validateName:l,ValidationError:c,schema:e.schema,schemaEnv:e,rootId:n,baseId:e.baseId||n,schemaPath:Ae.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,Ae._)`""`,opts:this.opts,self:this};let u;try{this._compilations.add(e),(0,Hh.validateFunctionCode)(o),r.optimize(this.opts.code.optimize);const p=r.toString();u=`${r.scopeRefs(lt.default.scope)}return ${p}`,this.opts.code.process&&(u=this.opts.code.process(u,e));const h=new Function(`${lt.default.self}`,`${lt.default.scope}`,u)(this,this.scope.get());if(this.scope.value(l,{ref:h}),h.errors=null,h.schema=e.schema,h.schemaEnv=e,e.$async&&(h.$async=!0),this.opts.code.source===!0&&(h.source={validateName:l,validateCode:p,scopeValues:r._values}),this.opts.unevaluated){const{props:m,items:y}=o;h.evaluated={props:m instanceof Ae.Name?void 0:m,items:y instanceof Ae.Name?void 0:y,dynamicProps:m instanceof Ae.Name,dynamicItems:y instanceof Ae.Name},h.source&&(h.source.evaluated=(0,Ae.stringify)(h.evaluated))}return e.validate=h,e}catch(p){throw delete e.validate,delete e.validateName,u&&this.logger.error("Error compiling schema, function code:",u),p}finally{this._compilations.delete(e)}}_e.compileSchema=mi;function Gh(e,t,n){var a;n=(0,Ie.resolveUrl)(this.opts.uriResolver,t,n);const s=e.refs[n];if(s)return s;let i=Xh.call(this,e,n);if(i===void 0){const r=(a=e.localRefs)===null||a===void 0?void 0:a[n],{schemaId:c}=this.opts;r&&(i=new la({schema:r,schemaId:c,root:e,baseId:t}))}if(i!==void 0)return e.refs[n]=Kh.call(this,i)}_e.resolveRef=Gh;function Kh(e){return(0,Ie.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:mi.call(this,e)}function Pl(e){for(const t of this._compilations)if(Wh(t,e))return t}_e.getCompilingSchema=Pl;function Wh(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function Xh(e,t){let n;for(;typeof(n=this.refs[t])=="string";)t=n;return n||this.schemas[t]||ua.call(this,e,t)}function ua(e,t){const n=this.opts.uriResolver.parse(t),a=(0,Ie._getFullPath)(this.opts.uriResolver,n);let s=(0,Ie.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&a===s)return ts.call(this,n,e);const i=(0,Ie.normalizeId)(a),r=this.refs[i]||this.schemas[i];if(typeof r=="string"){const c=ua.call(this,e,r);return typeof c?.schema!="object"?void 0:ts.call(this,n,c)}if(typeof r?.schema=="object"){if(r.validate||mi.call(this,r),i===(0,Ie.normalizeId)(t)){const{schema:c}=r,{schemaId:l}=this.opts,o=c[l];return o&&(s=(0,Ie.resolveUrl)(this.opts.uriResolver,s,o)),new la({schema:c,schemaId:l,root:e,baseId:s})}return ts.call(this,n,r)}}_e.resolveSchema=ua;const Jh=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function ts(e,{baseId:t,schema:n,root:a}){var s;if(((s=e.fragment)===null||s===void 0?void 0:s[0])!=="/")return;for(const c of e.fragment.slice(1).split("/")){if(typeof n=="boolean")return;const l=n[(0,so.unescapeFragment)(c)];if(l===void 0)return;n=l;const o=typeof n=="object"&&n[this.opts.schemaId];!Jh.has(c)&&o&&(t=(0,Ie.resolveUrl)(this.opts.uriResolver,t,o))}let i;if(typeof n!="boolean"&&n.$ref&&!(0,so.schemaHasRulesButRef)(n,this.RULES)){const c=(0,Ie.resolveUrl)(this.opts.uriResolver,t,n.$ref);i=ua.call(this,a,c)}const{schemaId:r}=this.opts;if(i=i||new la({schema:n,schemaId:r,root:a,baseId:t}),i.schema!==i.root.schema)return i}const Yh="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",Zh="Meta-schema for $data reference (JSON AnySchema extension proposal)",Qh="object",ev=["$data"],tv={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},nv=!1,av={$id:Yh,description:Zh,type:Qh,required:ev,properties:tv,additionalProperties:nv};var fi={},pa={exports:{}};const sv={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};var iv={HEX:sv};const{HEX:rv}=iv;function Nl(e){if(Cl(e,".")<3)return{host:e,isIPV4:!1};const t=e.match(/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/u)||[],[n]=t;return n?{host:cv(n,"."),isIPV4:!0}:{host:e,isIPV4:!1}}function Ts(e,t=!1){let n="",a=!0;for(const s of e){if(rv[s]===void 0)return;s!=="0"&&a===!0&&(a=!1),a||(n+=s)}return t&&n.length===0&&(n="0"),n}function ov(e){let t=0;const n={error:!1,address:"",zone:""},a=[],s=[];let i=!1,r=!1,c=!1;function l(){if(s.length){if(i===!1){const o=Ts(s);if(o!==void 0)a.push(o);else return n.error=!0,!1}s.length=0}return!0}for(let o=0;o<e.length;o++){const u=e[o];if(!(u==="["||u==="]"))if(u===":"){if(r===!0&&(c=!0),!l())break;if(t++,a.push(":"),t>7){n.error=!0;break}o-1>=0&&e[o-1]===":"&&(r=!0);continue}else if(u==="%"){if(!l())break;i=!0}else{s.push(u);continue}}return s.length&&(i?n.zone=s.join(""):c?a.push(s.join("")):a.push(Ts(s))),n.address=a.join(""),n}function Al(e,t={}){if(Cl(e,":")<2)return{host:e,isIPV6:!1};const n=ov(e);if(n.error)return{host:e,isIPV6:!1};{let a=n.address,s=n.address;return n.zone&&(a+="%"+n.zone,s+="%25"+n.zone),{host:a,escapedHost:s,isIPV6:!0}}}function cv(e,t){let n="",a=!0;const s=e.length;for(let i=0;i<s;i++){const r=e[i];r==="0"&&a?(i+1<=s&&e[i+1]===t||i+1===s)&&(n+=r,a=!1):(r===t?a=!0:a=!1,n+=r)}return n}function Cl(e,t){let n=0;for(let a=0;a<e.length;a++)e[a]===t&&n++;return n}const io=/^\.\.?\//u,ro=/^\/\.(?:\/|$)/u,oo=/^\/\.\.(?:\/|$)/u,lv=/^\/?(?:.|\n)*?(?=\/|$)/u;function uv(e){const t=[];for(;e.length;)if(e.match(io))e=e.replace(io,"");else if(e.match(ro))e=e.replace(ro,"/");else if(e.match(oo))e=e.replace(oo,"/"),t.pop();else if(e==="."||e==="..")e="";else{const n=e.match(lv);if(n){const a=n[0];e=e.slice(a.length),t.push(a)}else throw new Error("Unexpected dot segment condition")}return t.join("")}function pv(e,t){const n=t!==!0?escape:unescape;return e.scheme!==void 0&&(e.scheme=n(e.scheme)),e.userinfo!==void 0&&(e.userinfo=n(e.userinfo)),e.host!==void 0&&(e.host=n(e.host)),e.path!==void 0&&(e.path=n(e.path)),e.query!==void 0&&(e.query=n(e.query)),e.fragment!==void 0&&(e.fragment=n(e.fragment)),e}function dv(e,t){const n=[];if(e.userinfo!==void 0&&(n.push(e.userinfo),n.push("@")),e.host!==void 0){let a=unescape(e.host);const s=Nl(a);if(s.isIPV4)a=s.host;else{const i=Al(s.host,{isIPV4:!1});i.isIPV6===!0?a=`[${i.escapedHost}]`:a=e.host}n.push(a)}return(typeof e.port=="number"||typeof e.port=="string")&&(n.push(":"),n.push(String(e.port))),n.length?n.join(""):void 0}var mv={recomposeAuthority:dv,normalizeComponentEncoding:pv,removeDotSegments:uv,normalizeIPv4:Nl,normalizeIPv6:Al,stringArrayToHexStripped:Ts};const fv=/^[\da-f]{8}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{12}$/iu,hv=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;function Il(e){return typeof e.secure=="boolean"?e.secure:String(e.scheme).toLowerCase()==="wss"}function Ll(e){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e}function Dl(e){const t=String(e.scheme).toLowerCase()==="https";return(e.port===(t?443:80)||e.port==="")&&(e.port=void 0),e.path||(e.path="/"),e}function vv(e){return e.secure=Il(e),e.resourceName=(e.path||"/")+(e.query?"?"+e.query:""),e.path=void 0,e.query=void 0,e}function xv(e){if((e.port===(Il(e)?443:80)||e.port==="")&&(e.port=void 0),typeof e.secure=="boolean"&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){const[t,n]=e.resourceName.split("?");e.path=t&&t!=="/"?t:void 0,e.query=n,e.resourceName=void 0}return e.fragment=void 0,e}function gv(e,t){if(!e.path)return e.error="URN can not be parsed",e;const n=e.path.match(hv);if(n){const a=t.scheme||e.scheme||"urn";e.nid=n[1].toLowerCase(),e.nss=n[2];const s=`${a}:${t.nid||e.nid}`,i=hi[s];e.path=void 0,i&&(e=i.parse(e,t))}else e.error=e.error||"URN can not be parsed.";return e}function yv(e,t){const n=t.scheme||e.scheme||"urn",a=e.nid.toLowerCase(),s=`${n}:${t.nid||a}`,i=hi[s];i&&(e=i.serialize(e,t));const r=e,c=e.nss;return r.path=`${a||t.nid}:${c}`,t.skipEscape=!0,r}function bv(e,t){const n=e;return n.uuid=n.nss,n.nss=void 0,!t.tolerant&&(!n.uuid||!fv.test(n.uuid))&&(n.error=n.error||"UUID is not valid."),n}function $v(e){const t=e;return t.nss=(e.uuid||"").toLowerCase(),t}const Fl={scheme:"http",domainHost:!0,parse:Ll,serialize:Dl},wv={scheme:"https",domainHost:Fl.domainHost,parse:Ll,serialize:Dl},In={scheme:"ws",domainHost:!0,parse:vv,serialize:xv},_v={scheme:"wss",domainHost:In.domainHost,parse:In.parse,serialize:In.serialize},Ev={scheme:"urn",parse:gv,serialize:yv,skipNormalize:!0},Sv={scheme:"urn:uuid",parse:bv,serialize:$v,skipNormalize:!0},hi={http:Fl,https:wv,ws:In,wss:_v,urn:Ev,"urn:uuid":Sv};var Rv=hi;const{normalizeIPv6:kv,normalizeIPv4:jv,removeDotSegments:Zt,recomposeAuthority:Tv,normalizeComponentEncoding:$n}=mv,vi=Rv;function Ov(e,t){return typeof e=="string"?e=Be(Ke(e,t),t):typeof e=="object"&&(e=Ke(Be(e,t),t)),e}function Pv(e,t,n){const a=Object.assign({scheme:"null"},n),s=zl(Ke(e,a),Ke(t,a),a,!0);return Be(s,{...a,skipEscape:!0})}function zl(e,t,n,a){const s={};return a||(e=Ke(Be(e,n),n),t=Ke(Be(t,n),n)),n=n||{},!n.tolerant&&t.scheme?(s.scheme=t.scheme,s.userinfo=t.userinfo,s.host=t.host,s.port=t.port,s.path=Zt(t.path||""),s.query=t.query):(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0?(s.userinfo=t.userinfo,s.host=t.host,s.port=t.port,s.path=Zt(t.path||""),s.query=t.query):(t.path?(t.path.charAt(0)==="/"?s.path=Zt(t.path):((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path?s.path="/"+t.path:e.path?s.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:s.path=t.path,s.path=Zt(s.path)),s.query=t.query):(s.path=e.path,t.query!==void 0?s.query=t.query:s.query=e.query),s.userinfo=e.userinfo,s.host=e.host,s.port=e.port),s.scheme=e.scheme),s.fragment=t.fragment,s}function Nv(e,t,n){return typeof e=="string"?(e=unescape(e),e=Be($n(Ke(e,n),!0),{...n,skipEscape:!0})):typeof e=="object"&&(e=Be($n(e,!0),{...n,skipEscape:!0})),typeof t=="string"?(t=unescape(t),t=Be($n(Ke(t,n),!0),{...n,skipEscape:!0})):typeof t=="object"&&(t=Be($n(t,!0),{...n,skipEscape:!0})),e.toLowerCase()===t.toLowerCase()}function Be(e,t){const n={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:""},a=Object.assign({},t),s=[],i=vi[(a.scheme||n.scheme||"").toLowerCase()];i&&i.serialize&&i.serialize(n,a),n.path!==void 0&&(a.skipEscape?n.path=unescape(n.path):(n.path=escape(n.path),n.scheme!==void 0&&(n.path=n.path.split("%3A").join(":")))),a.reference!=="suffix"&&n.scheme&&s.push(n.scheme,":");const r=Tv(n,a);if(r!==void 0&&(a.reference!=="suffix"&&s.push("//"),s.push(r),n.path&&n.path.charAt(0)!=="/"&&s.push("/")),n.path!==void 0){let c=n.path;!a.absolutePath&&(!i||!i.absolutePath)&&(c=Zt(c)),r===void 0&&(c=c.replace(/^\/\//u,"/%2F")),s.push(c)}return n.query!==void 0&&s.push("?",n.query),n.fragment!==void 0&&s.push("#",n.fragment),s.join("")}const Av=Array.from({length:127},(e,t)=>/[^!"$&'()*+,\-.;=_`a-z{}~]/u.test(String.fromCharCode(t)));function Cv(e){let t=0;for(let n=0,a=e.length;n<a;++n)if(t=e.charCodeAt(n),t>126||Av[t])return!0;return!1}const Iv=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function Ke(e,t){const n=Object.assign({},t),a={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},s=e.indexOf("%")!==-1;let i=!1;n.reference==="suffix"&&(e=(n.scheme?n.scheme+":":"")+"//"+e);const r=e.match(Iv);if(r){if(a.scheme=r[1],a.userinfo=r[3],a.host=r[4],a.port=parseInt(r[5],10),a.path=r[6]||"",a.query=r[7],a.fragment=r[8],isNaN(a.port)&&(a.port=r[5]),a.host){const l=jv(a.host);if(l.isIPV4===!1){const o=kv(l.host,{isIPV4:!1});a.host=o.host.toLowerCase(),i=o.isIPV6}else a.host=l.host,i=!0}a.scheme===void 0&&a.userinfo===void 0&&a.host===void 0&&a.port===void 0&&!a.path&&a.query===void 0?a.reference="same-document":a.scheme===void 0?a.reference="relative":a.fragment===void 0?a.reference="absolute":a.reference="uri",n.reference&&n.reference!=="suffix"&&n.reference!==a.reference&&(a.error=a.error||"URI is not a "+n.reference+" reference.");const c=vi[(n.scheme||a.scheme||"").toLowerCase()];if(!n.unicodeSupport&&(!c||!c.unicodeSupport)&&a.host&&(n.domainHost||c&&c.domainHost)&&i===!1&&Cv(a.host))try{a.host=URL.domainToASCII(a.host.toLowerCase())}catch(l){a.error=a.error||"Host's domain name can not be converted to ASCII: "+l}(!c||c&&!c.skipNormalize)&&(s&&a.scheme!==void 0&&(a.scheme=unescape(a.scheme)),s&&a.host!==void 0&&(a.host=unescape(a.host)),a.path!==void 0&&a.path.length&&(a.path=escape(unescape(a.path))),a.fragment!==void 0&&a.fragment.length&&(a.fragment=encodeURI(decodeURIComponent(a.fragment)))),c&&c.parse&&c.parse(a,n)}else a.error=a.error||"URI can not be parsed.";return a}const xi={SCHEMES:vi,normalize:Ov,resolve:Pv,resolveComponents:zl,equal:Nv,serialize:Be,parse:Ke};pa.exports=xi;pa.exports.default=xi;pa.exports.fastUri=xi;var Lv=pa.exports;Object.defineProperty(fi,"__esModule",{value:!0});const ql=Lv;ql.code='require("ajv/dist/runtime/uri").default';fi.default=ql;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=Ne;Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return t.KeywordCxt}});var n=G;Object.defineProperty(e,"_",{enumerable:!0,get:function(){return n._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return n.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return n.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return n.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return n.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return n.CodeGen}});const a=zt,s=wt,i=bt,r=_e,c=G,l=xe,o=pe,u=I,p=av,f=fi,h=(R,b)=>new RegExp(R,b);h.code="new RegExp";const m=["removeAdditional","useDefaults","coerceTypes"],y=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),x={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},v={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},$=200;function E(R){var b,S,w,d,g,k,z,L,te,Q,me,_t,Sa,Ra,ka,ja,Ta,Oa,Pa,Na,Aa,Ca,Ia,La,Da;const Ht=R.strict,Fa=(b=R.code)===null||b===void 0?void 0:b.optimize,fr=Fa===!0||Fa===void 0?1:Fa||0,hr=(w=(S=R.code)===null||S===void 0?void 0:S.regExp)!==null&&w!==void 0?w:h,mu=(d=R.uriResolver)!==null&&d!==void 0?d:f.default;return{strictSchema:(k=(g=R.strictSchema)!==null&&g!==void 0?g:Ht)!==null&&k!==void 0?k:!0,strictNumbers:(L=(z=R.strictNumbers)!==null&&z!==void 0?z:Ht)!==null&&L!==void 0?L:!0,strictTypes:(Q=(te=R.strictTypes)!==null&&te!==void 0?te:Ht)!==null&&Q!==void 0?Q:"log",strictTuples:(_t=(me=R.strictTuples)!==null&&me!==void 0?me:Ht)!==null&&_t!==void 0?_t:"log",strictRequired:(Ra=(Sa=R.strictRequired)!==null&&Sa!==void 0?Sa:Ht)!==null&&Ra!==void 0?Ra:!1,code:R.code?{...R.code,optimize:fr,regExp:hr}:{optimize:fr,regExp:hr},loopRequired:(ka=R.loopRequired)!==null&&ka!==void 0?ka:$,loopEnum:(ja=R.loopEnum)!==null&&ja!==void 0?ja:$,meta:(Ta=R.meta)!==null&&Ta!==void 0?Ta:!0,messages:(Oa=R.messages)!==null&&Oa!==void 0?Oa:!0,inlineRefs:(Pa=R.inlineRefs)!==null&&Pa!==void 0?Pa:!0,schemaId:(Na=R.schemaId)!==null&&Na!==void 0?Na:"$id",addUsedSchema:(Aa=R.addUsedSchema)!==null&&Aa!==void 0?Aa:!0,validateSchema:(Ca=R.validateSchema)!==null&&Ca!==void 0?Ca:!0,validateFormats:(Ia=R.validateFormats)!==null&&Ia!==void 0?Ia:!0,unicodeRegExp:(La=R.unicodeRegExp)!==null&&La!==void 0?La:!0,int32range:(Da=R.int32range)!==null&&Da!==void 0?Da:!0,uriResolver:mu}}class O{constructor(b={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,b=this.opts={...b,...E(b)};const{es5:S,lines:w}=this.opts.code;this.scope=new c.ValueScope({scope:{},prefixes:y,es5:S,lines:w}),this.logger=B(b.logger);const d=b.validateFormats;b.validateFormats=!1,this.RULES=(0,i.getRules)(),P.call(this,x,b,"NOT SUPPORTED"),P.call(this,v,b,"DEPRECATED","warn"),this._metaOpts=de.call(this),b.formats&&ae.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),b.keywords&&re.call(this,b.keywords),typeof b.meta=="object"&&this.addMetaSchema(b.meta),X.call(this),b.validateFormats=d}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:b,meta:S,schemaId:w}=this.opts;let d=p;w==="id"&&(d={...p},d.id=d.$id,delete d.$id),S&&b&&this.addMetaSchema(d,d[w],!1)}defaultMeta(){const{meta:b,schemaId:S}=this.opts;return this.opts.defaultMeta=typeof b=="object"?b[S]||b:void 0}validate(b,S){let w;if(typeof b=="string"){if(w=this.getSchema(b),!w)throw new Error(`no schema with key or ref "${b}"`)}else w=this.compile(b);const d=w(S);return"$async"in w||(this.errors=w.errors),d}compile(b,S){const w=this._addSchema(b,S);return w.validate||this._compileSchemaEnv(w)}compileAsync(b,S){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:w}=this.opts;return d.call(this,b,S);async function d(Q,me){await g.call(this,Q.$schema);const _t=this._addSchema(Q,me);return _t.validate||k.call(this,_t)}async function g(Q){Q&&!this.getSchema(Q)&&await d.call(this,{$ref:Q},!0)}async function k(Q){try{return this._compileSchemaEnv(Q)}catch(me){if(!(me instanceof s.default))throw me;return z.call(this,me),await L.call(this,me.missingSchema),k.call(this,Q)}}function z({missingSchema:Q,missingRef:me}){if(this.refs[Q])throw new Error(`AnySchema ${Q} is loaded but ${me} cannot be resolved`)}async function L(Q){const me=await te.call(this,Q);this.refs[Q]||await g.call(this,me.$schema),this.refs[Q]||this.addSchema(me,Q,S)}async function te(Q){const me=this._loading[Q];if(me)return me;try{return await(this._loading[Q]=w(Q))}finally{delete this._loading[Q]}}}addSchema(b,S,w,d=this.opts.validateSchema){if(Array.isArray(b)){for(const k of b)this.addSchema(k,void 0,w,d);return this}let g;if(typeof b=="object"){const{schemaId:k}=this.opts;if(g=b[k],g!==void 0&&typeof g!="string")throw new Error(`schema ${k} must be string`)}return S=(0,l.normalizeId)(S||g),this._checkUnique(S),this.schemas[S]=this._addSchema(b,w,S,d,!0),this}addMetaSchema(b,S,w=this.opts.validateSchema){return this.addSchema(b,S,!0,w),this}validateSchema(b,S){if(typeof b=="boolean")return!0;let w;if(w=b.$schema,w!==void 0&&typeof w!="string")throw new Error("$schema must be a string");if(w=w||this.opts.defaultMeta||this.defaultMeta(),!w)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const d=this.validate(w,b);if(!d&&S){const g="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(g);else throw new Error(g)}return d}getSchema(b){let S;for(;typeof(S=K.call(this,b))=="string";)b=S;if(S===void 0){const{schemaId:w}=this.opts,d=new r.SchemaEnv({schema:{},schemaId:w});if(S=r.resolveSchema.call(this,d,b),!S)return;this.refs[b]=S}return S.validate||this._compileSchemaEnv(S)}removeSchema(b){if(b instanceof RegExp)return this._removeAllSchemas(this.schemas,b),this._removeAllSchemas(this.refs,b),this;switch(typeof b){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const S=K.call(this,b);return typeof S=="object"&&this._cache.delete(S.schema),delete this.schemas[b],delete this.refs[b],this}case"object":{const S=b;this._cache.delete(S);let w=b[this.opts.schemaId];return w&&(w=(0,l.normalizeId)(w),delete this.schemas[w],delete this.refs[w]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(b){for(const S of b)this.addKeyword(S);return this}addKeyword(b,S){let w;if(typeof b=="string")w=b,typeof S=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),S.keyword=w);else if(typeof b=="object"&&S===void 0){if(S=b,w=S.keyword,Array.isArray(w)&&!w.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(j.call(this,w,S),!S)return(0,u.eachItem)(w,g=>N.call(this,g)),this;T.call(this,S);const d={...S,type:(0,o.getJSONTypes)(S.type),schemaType:(0,o.getJSONTypes)(S.schemaType)};return(0,u.eachItem)(w,d.type.length===0?g=>N.call(this,g,d):g=>d.type.forEach(k=>N.call(this,g,d,k))),this}getKeyword(b){const S=this.RULES.all[b];return typeof S=="object"?S.definition:!!S}removeKeyword(b){const{RULES:S}=this;delete S.keywords[b],delete S.all[b];for(const w of S.rules){const d=w.rules.findIndex(g=>g.keyword===b);d>=0&&w.rules.splice(d,1)}return this}addFormat(b,S){return typeof S=="string"&&(S=new RegExp(S)),this.formats[b]=S,this}errorsText(b=this.errors,{separator:S=", ",dataVar:w="data"}={}){return!b||b.length===0?"No errors":b.map(d=>`${w}${d.instancePath} ${d.message}`).reduce((d,g)=>d+S+g)}$dataMetaSchema(b,S){const w=this.RULES.all;b=JSON.parse(JSON.stringify(b));for(const d of S){const g=d.split("/").slice(1);let k=b;for(const z of g)k=k[z];for(const z in w){const L=w[z];if(typeof L!="object")continue;const{$data:te}=L.definition,Q=k[z];te&&Q&&(k[z]=C(Q))}}return b}_removeAllSchemas(b,S){for(const w in b){const d=b[w];(!S||S.test(w))&&(typeof d=="string"?delete b[w]:d&&!d.meta&&(this._cache.delete(d.schema),delete b[w]))}}_addSchema(b,S,w,d=this.opts.validateSchema,g=this.opts.addUsedSchema){let k;const{schemaId:z}=this.opts;if(typeof b=="object")k=b[z];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof b!="boolean")throw new Error("schema must be object or boolean")}let L=this._cache.get(b);if(L!==void 0)return L;w=(0,l.normalizeId)(k||w);const te=l.getSchemaRefs.call(this,b,w);return L=new r.SchemaEnv({schema:b,schemaId:z,meta:S,baseId:w,localRefs:te}),this._cache.set(L.schema,L),g&&!w.startsWith("#")&&(w&&this._checkUnique(w),this.refs[w]=L),d&&this.validateSchema(b,!0),L}_checkUnique(b){if(this.schemas[b]||this.refs[b])throw new Error(`schema with key or id "${b}" already exists`)}_compileSchemaEnv(b){if(b.meta?this._compileMetaSchema(b):r.compileSchema.call(this,b),!b.validate)throw new Error("ajv implementation error");return b.validate}_compileMetaSchema(b){const S=this.opts;this.opts=this._metaOpts;try{r.compileSchema.call(this,b)}finally{this.opts=S}}}O.ValidationError=a.default,O.MissingRefError=s.default,e.default=O;function P(R,b,S,w="error"){for(const d in R){const g=d;g in b&&this.logger[w](`${S}: option ${d}. ${R[g]}`)}}function K(R){return R=(0,l.normalizeId)(R),this.schemas[R]||this.refs[R]}function X(){const R=this.opts.schemas;if(R)if(Array.isArray(R))this.addSchema(R);else for(const b in R)this.addSchema(R[b],b)}function ae(){for(const R in this.opts.formats){const b=this.opts.formats[R];b&&this.addFormat(R,b)}}function re(R){if(Array.isArray(R)){this.addVocabulary(R);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const b in R){const S=R[b];S.keyword||(S.keyword=b),this.addKeyword(S)}}function de(){const R={...this.opts};for(const b of m)delete R[b];return R}const M={log(){},warn(){},error(){}};function B(R){if(R===!1)return M;if(R===void 0)return console;if(R.log&&R.warn&&R.error)return R;throw new Error("logger must implement log, warn and error methods")}const ee=/^[a-z_$][a-z0-9_$:-]*$/i;function j(R,b){const{RULES:S}=this;if((0,u.eachItem)(R,w=>{if(S.keywords[w])throw new Error(`Keyword ${w} is already defined`);if(!ee.test(w))throw new Error(`Keyword ${w} has invalid name`)}),!!b&&b.$data&&!("code"in b||"validate"in b))throw new Error('$data keyword must have "code" or "validate" function')}function N(R,b,S){var w;const d=b?.post;if(S&&d)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:g}=this;let k=d?g.post:g.rules.find(({type:L})=>L===S);if(k||(k={type:S,rules:[]},g.rules.push(k)),g.keywords[R]=!0,!b)return;const z={keyword:R,definition:{...b,type:(0,o.getJSONTypes)(b.type),schemaType:(0,o.getJSONTypes)(b.schemaType)}};b.before?F.call(this,k,z,b.before):k.rules.push(z),g.all[R]=z,(w=b.implements)===null||w===void 0||w.forEach(L=>this.addKeyword(L))}function F(R,b,S){const w=R.rules.findIndex(d=>d.keyword===S);w>=0?R.rules.splice(w,0,b):(R.rules.push(b),this.logger.warn(`rule ${S} is not defined`))}function T(R){let{metaSchema:b}=R;b!==void 0&&(R.$data&&this.opts.$data&&(b=C(b)),R.validateSchema=this.compile(b,!0))}const A={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function C(R){return{anyOf:[R,A]}}})(ai);var gi={},da={},yi={};Object.defineProperty(yi,"__esModule",{value:!0});const Dv={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};yi.default=Dv;var We={};Object.defineProperty(We,"__esModule",{value:!0});We.callRef=We.getValidate=void 0;const Fv=wt,co=J,Se=G,St=Oe,lo=_e,wn=I,zv={keyword:"$ref",schemaType:"string",code(e){const{gen:t,schema:n,it:a}=e,{baseId:s,schemaEnv:i,validateName:r,opts:c,self:l}=a,{root:o}=i;if((n==="#"||n==="#/")&&s===o.baseId)return p();const u=lo.resolveRef.call(l,o,s,n);if(u===void 0)throw new Fv.default(a.opts.uriResolver,s,n);if(u instanceof lo.SchemaEnv)return f(u);return h(u);function p(){if(i===o)return Ln(e,r,i,i.$async);const m=t.scopeValue("root",{ref:o});return Ln(e,(0,Se._)`${m}.validate`,o,o.$async)}function f(m){const y=Ml(e,m);Ln(e,y,m,m.$async)}function h(m){const y=t.scopeValue("schema",c.code.source===!0?{ref:m,code:(0,Se.stringify)(m)}:{ref:m}),x=t.name("valid"),v=e.subschema({schema:m,dataTypes:[],schemaPath:Se.nil,topSchemaRef:y,errSchemaPath:n},x);e.mergeEvaluated(v),e.ok(x)}}};function Ml(e,t){const{gen:n}=e;return t.validate?n.scopeValue("validate",{ref:t.validate}):(0,Se._)`${n.scopeValue("wrapper",{ref:t})}.validate`}We.getValidate=Ml;function Ln(e,t,n,a){const{gen:s,it:i}=e,{allErrors:r,schemaEnv:c,opts:l}=i,o=l.passContext?St.default.this:Se.nil;a?u():p();function u(){if(!c.$async)throw new Error("async schema referenced by sync schema");const m=s.let("valid");s.try(()=>{s.code((0,Se._)`await ${(0,co.callValidateCode)(e,t,o)}`),h(t),r||s.assign(m,!0)},y=>{s.if((0,Se._)`!(${y} instanceof ${i.ValidationError})`,()=>s.throw(y)),f(y),r||s.assign(m,!1)}),e.ok(m)}function p(){e.result((0,co.callValidateCode)(e,t,o),()=>h(t),()=>f(t))}function f(m){const y=(0,Se._)`${m}.errors`;s.assign(St.default.vErrors,(0,Se._)`${St.default.vErrors} === null ? ${y} : ${St.default.vErrors}.concat(${y})`),s.assign(St.default.errors,(0,Se._)`${St.default.vErrors}.length`)}function h(m){var y;if(!i.opts.unevaluated)return;const x=(y=n?.validate)===null||y===void 0?void 0:y.evaluated;if(i.props!==!0)if(x&&!x.dynamicProps)x.props!==void 0&&(i.props=wn.mergeEvaluated.props(s,x.props,i.props));else{const v=s.var("props",(0,Se._)`${m}.evaluated.props`);i.props=wn.mergeEvaluated.props(s,v,i.props,Se.Name)}if(i.items!==!0)if(x&&!x.dynamicItems)x.items!==void 0&&(i.items=wn.mergeEvaluated.items(s,x.items,i.items));else{const v=s.var("items",(0,Se._)`${m}.evaluated.items`);i.items=wn.mergeEvaluated.items(s,v,i.items,Se.Name)}}}We.callRef=Ln;We.default=zv;Object.defineProperty(da,"__esModule",{value:!0});const qv=yi,Mv=We,Uv=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",qv.default,Mv.default];da.default=Uv;var ma={},bi={};Object.defineProperty(bi,"__esModule",{value:!0});const Hn=G,et=Hn.operators,Gn={maximum:{okStr:"<=",ok:et.LTE,fail:et.GT},minimum:{okStr:">=",ok:et.GTE,fail:et.LT},exclusiveMaximum:{okStr:"<",ok:et.LT,fail:et.GTE},exclusiveMinimum:{okStr:">",ok:et.GT,fail:et.LTE}},Bv={message:({keyword:e,schemaCode:t})=>(0,Hn.str)`must be ${Gn[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>(0,Hn._)`{comparison: ${Gn[e].okStr}, limit: ${t}}`},Vv={keyword:Object.keys(Gn),type:"number",schemaType:"number",$data:!0,error:Bv,code(e){const{keyword:t,data:n,schemaCode:a}=e;e.fail$data((0,Hn._)`${n} ${Gn[t].fail} ${a} || isNaN(${n})`)}};bi.default=Vv;var $i={};Object.defineProperty($i,"__esModule",{value:!0});const tn=G,Hv={message:({schemaCode:e})=>(0,tn.str)`must be multiple of ${e}`,params:({schemaCode:e})=>(0,tn._)`{multipleOf: ${e}}`},Gv={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:Hv,code(e){const{gen:t,data:n,schemaCode:a,it:s}=e,i=s.opts.multipleOfPrecision,r=t.let("res"),c=i?(0,tn._)`Math.abs(Math.round(${r}) - ${r}) > 1e-${i}`:(0,tn._)`${r} !== parseInt(${r})`;e.fail$data((0,tn._)`(${a} === 0 || (${r} = ${n}/${a}, ${c}))`)}};$i.default=Gv;var wi={},_i={};Object.defineProperty(_i,"__esModule",{value:!0});function Ul(e){const t=e.length;let n=0,a=0,s;for(;a<t;)n++,s=e.charCodeAt(a++),s>=55296&&s<=56319&&a<t&&(s=e.charCodeAt(a),(s&64512)===56320&&a++);return n}_i.default=Ul;Ul.code='require("ajv/dist/runtime/ucs2length").default';Object.defineProperty(wi,"__esModule",{value:!0});const pt=G,Kv=I,Wv=_i,Xv={message({keyword:e,schemaCode:t}){const n=e==="maxLength"?"more":"fewer";return(0,pt.str)`must NOT have ${n} than ${t} characters`},params:({schemaCode:e})=>(0,pt._)`{limit: ${e}}`},Jv={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:Xv,code(e){const{keyword:t,data:n,schemaCode:a,it:s}=e,i=t==="maxLength"?pt.operators.GT:pt.operators.LT,r=s.opts.unicode===!1?(0,pt._)`${n}.length`:(0,pt._)`${(0,Kv.useFunc)(e.gen,Wv.default)}(${n})`;e.fail$data((0,pt._)`${r} ${i} ${a}`)}};wi.default=Jv;var Ei={};Object.defineProperty(Ei,"__esModule",{value:!0});const Yv=J,Kn=G,Zv={message:({schemaCode:e})=>(0,Kn.str)`must match pattern "${e}"`,params:({schemaCode:e})=>(0,Kn._)`{pattern: ${e}}`},Qv={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:Zv,code(e){const{data:t,$data:n,schema:a,schemaCode:s,it:i}=e,r=i.opts.unicodeRegExp?"u":"",c=n?(0,Kn._)`(new RegExp(${s}, ${r}))`:(0,Yv.usePattern)(e,a);e.fail$data((0,Kn._)`!${c}.test(${t})`)}};Ei.default=Qv;var Si={};Object.defineProperty(Si,"__esModule",{value:!0});const nn=G,ex={message({keyword:e,schemaCode:t}){const n=e==="maxProperties"?"more":"fewer";return(0,nn.str)`must NOT have ${n} than ${t} properties`},params:({schemaCode:e})=>(0,nn._)`{limit: ${e}}`},tx={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:ex,code(e){const{keyword:t,data:n,schemaCode:a}=e,s=t==="maxProperties"?nn.operators.GT:nn.operators.LT;e.fail$data((0,nn._)`Object.keys(${n}).length ${s} ${a}`)}};Si.default=tx;var Ri={};Object.defineProperty(Ri,"__esModule",{value:!0});const Jt=J,an=G,nx=I,ax={message:({params:{missingProperty:e}})=>(0,an.str)`must have required property '${e}'`,params:({params:{missingProperty:e}})=>(0,an._)`{missingProperty: ${e}}`},sx={keyword:"required",type:"object",schemaType:"array",$data:!0,error:ax,code(e){const{gen:t,schema:n,schemaCode:a,data:s,$data:i,it:r}=e,{opts:c}=r;if(!i&&n.length===0)return;const l=n.length>=c.loopRequired;if(r.allErrors?o():u(),c.strictRequired){const h=e.parentSchema.properties,{definedProperties:m}=e.it;for(const y of n)if(h?.[y]===void 0&&!m.has(y)){const x=r.schemaEnv.baseId+r.errSchemaPath,v=`required property "${y}" is not defined at "${x}" (strictRequired)`;(0,nx.checkStrictMode)(r,v,r.opts.strictRequired)}}function o(){if(l||i)e.block$data(an.nil,p);else for(const h of n)(0,Jt.checkReportMissingProp)(e,h)}function u(){const h=t.let("missing");if(l||i){const m=t.let("valid",!0);e.block$data(m,()=>f(h,m)),e.ok(m)}else t.if((0,Jt.checkMissingProp)(e,n,h)),(0,Jt.reportMissingProp)(e,h),t.else()}function p(){t.forOf("prop",a,h=>{e.setParams({missingProperty:h}),t.if((0,Jt.noPropertyInData)(t,s,h,c.ownProperties),()=>e.error())})}function f(h,m){e.setParams({missingProperty:h}),t.forOf(h,a,()=>{t.assign(m,(0,Jt.propertyInData)(t,s,h,c.ownProperties)),t.if((0,an.not)(m),()=>{e.error(),t.break()})},an.nil)}}};Ri.default=sx;var ki={};Object.defineProperty(ki,"__esModule",{value:!0});const sn=G,ix={message({keyword:e,schemaCode:t}){const n=e==="maxItems"?"more":"fewer";return(0,sn.str)`must NOT have ${n} than ${t} items`},params:({schemaCode:e})=>(0,sn._)`{limit: ${e}}`},rx={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:ix,code(e){const{keyword:t,data:n,schemaCode:a}=e,s=t==="maxItems"?sn.operators.GT:sn.operators.LT;e.fail$data((0,sn._)`${n}.length ${s} ${a}`)}};ki.default=rx;var ji={},hn={};Object.defineProperty(hn,"__esModule",{value:!0});const Bl=hl;Bl.code='require("ajv/dist/runtime/equal").default';hn.default=Bl;Object.defineProperty(ji,"__esModule",{value:!0});const ns=pe,ve=G,ox=I,cx=hn,lx={message:({params:{i:e,j:t}})=>(0,ve.str)`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>(0,ve._)`{i: ${e}, j: ${t}}`},ux={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:lx,code(e){const{gen:t,data:n,$data:a,schema:s,parentSchema:i,schemaCode:r,it:c}=e;if(!a&&!s)return;const l=t.let("valid"),o=i.items?(0,ns.getSchemaTypes)(i.items):[];e.block$data(l,u,(0,ve._)`${r} === false`),e.ok(l);function u(){const m=t.let("i",(0,ve._)`${n}.length`),y=t.let("j");e.setParams({i:m,j:y}),t.assign(l,!0),t.if((0,ve._)`${m} > 1`,()=>(p()?f:h)(m,y))}function p(){return o.length>0&&!o.some(m=>m==="object"||m==="array")}function f(m,y){const x=t.name("item"),v=(0,ns.checkDataTypes)(o,x,c.opts.strictNumbers,ns.DataType.Wrong),$=t.const("indices",(0,ve._)`{}`);t.for((0,ve._)`;${m}--;`,()=>{t.let(x,(0,ve._)`${n}[${m}]`),t.if(v,(0,ve._)`continue`),o.length>1&&t.if((0,ve._)`typeof ${x} == "string"`,(0,ve._)`${x} += "_"`),t.if((0,ve._)`typeof ${$}[${x}] == "number"`,()=>{t.assign(y,(0,ve._)`${$}[${x}]`),e.error(),t.assign(l,!1).break()}).code((0,ve._)`${$}[${x}] = ${m}`)})}function h(m,y){const x=(0,ox.useFunc)(t,cx.default),v=t.name("outer");t.label(v).for((0,ve._)`;${m}--;`,()=>t.for((0,ve._)`${y} = ${m}; ${y}--;`,()=>t.if((0,ve._)`${x}(${n}[${m}], ${n}[${y}])`,()=>{e.error(),t.assign(l,!1).break(v)})))}}};ji.default=ux;var Ti={};Object.defineProperty(Ti,"__esModule",{value:!0});const Os=G,px=I,dx=hn,mx={message:"must be equal to constant",params:({schemaCode:e})=>(0,Os._)`{allowedValue: ${e}}`},fx={keyword:"const",$data:!0,error:mx,code(e){const{gen:t,data:n,$data:a,schemaCode:s,schema:i}=e;a||i&&typeof i=="object"?e.fail$data((0,Os._)`!${(0,px.useFunc)(t,dx.default)}(${n}, ${s})`):e.fail((0,Os._)`${i} !== ${n}`)}};Ti.default=fx;var Oi={};Object.defineProperty(Oi,"__esModule",{value:!0});const Qt=G,hx=I,vx=hn,xx={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>(0,Qt._)`{allowedValues: ${e}}`},gx={keyword:"enum",schemaType:"array",$data:!0,error:xx,code(e){const{gen:t,data:n,$data:a,schema:s,schemaCode:i,it:r}=e;if(!a&&s.length===0)throw new Error("enum must have non-empty array");const c=s.length>=r.opts.loopEnum;let l;const o=()=>l??(l=(0,hx.useFunc)(t,vx.default));let u;if(c||a)u=t.let("valid"),e.block$data(u,p);else{if(!Array.isArray(s))throw new Error("ajv implementation error");const h=t.const("vSchema",i);u=(0,Qt.or)(...s.map((m,y)=>f(h,y)))}e.pass(u);function p(){t.assign(u,!1),t.forOf("v",i,h=>t.if((0,Qt._)`${o()}(${n}, ${h})`,()=>t.assign(u,!0).break()))}function f(h,m){const y=s[m];return typeof y=="object"&&y!==null?(0,Qt._)`${o()}(${n}, ${h}[${m}])`:(0,Qt._)`${n} === ${y}`}}};Oi.default=gx;Object.defineProperty(ma,"__esModule",{value:!0});const yx=bi,bx=$i,$x=wi,wx=Ei,_x=Si,Ex=Ri,Sx=ki,Rx=ji,kx=Ti,jx=Oi,Tx=[yx.default,bx.default,$x.default,wx.default,_x.default,Ex.default,Sx.default,Rx.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},kx.default,jx.default];ma.default=Tx;var fa={},qt={};Object.defineProperty(qt,"__esModule",{value:!0});qt.validateAdditionalItems=void 0;const dt=G,Ps=I,Ox={message:({params:{len:e}})=>(0,dt.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,dt._)`{limit: ${e}}`},Px={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:Ox,code(e){const{parentSchema:t,it:n}=e,{items:a}=t;if(!Array.isArray(a)){(0,Ps.checkStrictMode)(n,'"additionalItems" is ignored when "items" is not an array of schemas');return}Vl(e,a)}};function Vl(e,t){const{gen:n,schema:a,data:s,keyword:i,it:r}=e;r.items=!0;const c=n.const("len",(0,dt._)`${s}.length`);if(a===!1)e.setParams({len:t.length}),e.pass((0,dt._)`${c} <= ${t.length}`);else if(typeof a=="object"&&!(0,Ps.alwaysValidSchema)(r,a)){const o=n.var("valid",(0,dt._)`${c} <= ${t.length}`);n.if((0,dt.not)(o),()=>l(o)),e.ok(o)}function l(o){n.forRange("i",t.length,c,u=>{e.subschema({keyword:i,dataProp:u,dataPropType:Ps.Type.Num},o),r.allErrors||n.if((0,dt.not)(o),()=>n.break())})}}qt.validateAdditionalItems=Vl;qt.default=Px;var Pi={},Mt={};Object.defineProperty(Mt,"__esModule",{value:!0});Mt.validateTuple=void 0;const uo=G,Dn=I,Nx=J,Ax={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){const{schema:t,it:n}=e;if(Array.isArray(t))return Hl(e,"additionalItems",t);n.items=!0,!(0,Dn.alwaysValidSchema)(n,t)&&e.ok((0,Nx.validateArray)(e))}};function Hl(e,t,n=e.schema){const{gen:a,parentSchema:s,data:i,keyword:r,it:c}=e;u(s),c.opts.unevaluated&&n.length&&c.items!==!0&&(c.items=Dn.mergeEvaluated.items(a,n.length,c.items));const l=a.name("valid"),o=a.const("len",(0,uo._)`${i}.length`);n.forEach((p,f)=>{(0,Dn.alwaysValidSchema)(c,p)||(a.if((0,uo._)`${o} > ${f}`,()=>e.subschema({keyword:r,schemaProp:f,dataProp:f},l)),e.ok(l))});function u(p){const{opts:f,errSchemaPath:h}=c,m=n.length,y=m===p.minItems&&(m===p.maxItems||p[t]===!1);if(f.strictTuples&&!y){const x=`"${r}" is ${m}-tuple, but minItems or maxItems/${t} are not specified or different at path "${h}"`;(0,Dn.checkStrictMode)(c,x,f.strictTuples)}}}Mt.validateTuple=Hl;Mt.default=Ax;Object.defineProperty(Pi,"__esModule",{value:!0});const Cx=Mt,Ix={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:e=>(0,Cx.validateTuple)(e,"items")};Pi.default=Ix;var Ni={};Object.defineProperty(Ni,"__esModule",{value:!0});const po=G,Lx=I,Dx=J,Fx=qt,zx={message:({params:{len:e}})=>(0,po.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,po._)`{limit: ${e}}`},qx={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:zx,code(e){const{schema:t,parentSchema:n,it:a}=e,{prefixItems:s}=n;a.items=!0,!(0,Lx.alwaysValidSchema)(a,t)&&(s?(0,Fx.validateAdditionalItems)(e,s):e.ok((0,Dx.validateArray)(e)))}};Ni.default=qx;var Ai={};Object.defineProperty(Ai,"__esModule",{value:!0});const Pe=G,_n=I,Mx={message:({params:{min:e,max:t}})=>t===void 0?(0,Pe.str)`must contain at least ${e} valid item(s)`:(0,Pe.str)`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?(0,Pe._)`{minContains: ${e}}`:(0,Pe._)`{minContains: ${e}, maxContains: ${t}}`},Ux={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:Mx,code(e){const{gen:t,schema:n,parentSchema:a,data:s,it:i}=e;let r,c;const{minContains:l,maxContains:o}=a;i.opts.next?(r=l===void 0?1:l,c=o):r=1;const u=t.const("len",(0,Pe._)`${s}.length`);if(e.setParams({min:r,max:c}),c===void 0&&r===0){(0,_n.checkStrictMode)(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(c!==void 0&&r>c){(0,_n.checkStrictMode)(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if((0,_n.alwaysValidSchema)(i,n)){let y=(0,Pe._)`${u} >= ${r}`;c!==void 0&&(y=(0,Pe._)`${y} && ${u} <= ${c}`),e.pass(y);return}i.items=!0;const p=t.name("valid");c===void 0&&r===1?h(p,()=>t.if(p,()=>t.break())):r===0?(t.let(p,!0),c!==void 0&&t.if((0,Pe._)`${s}.length > 0`,f)):(t.let(p,!1),f()),e.result(p,()=>e.reset());function f(){const y=t.name("_valid"),x=t.let("count",0);h(y,()=>t.if(y,()=>m(x)))}function h(y,x){t.forRange("i",0,u,v=>{e.subschema({keyword:"contains",dataProp:v,dataPropType:_n.Type.Num,compositeRule:!0},y),x()})}function m(y){t.code((0,Pe._)`${y}++`),c===void 0?t.if((0,Pe._)`${y} >= ${r}`,()=>t.assign(p,!0).break()):(t.if((0,Pe._)`${y} > ${c}`,()=>t.assign(p,!1).break()),r===1?t.assign(p,!0):t.if((0,Pe._)`${y} >= ${r}`,()=>t.assign(p,!0)))}}};Ai.default=Ux;var ha={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;const t=G,n=I,a=J;e.error={message:({params:{property:l,depsCount:o,deps:u}})=>{const p=o===1?"property":"properties";return(0,t.str)`must have ${p} ${u} when property ${l} is present`},params:({params:{property:l,depsCount:o,deps:u,missingProperty:p}})=>(0,t._)`{property: ${l},
27
+ missingProperty: ${p},
28
+ depsCount: ${o},
29
+ deps: ${u}}`};const s={keyword:"dependencies",type:"object",schemaType:"object",error:e.error,code(l){const[o,u]=i(l);r(l,o),c(l,u)}};function i({schema:l}){const o={},u={};for(const p in l){if(p==="__proto__")continue;const f=Array.isArray(l[p])?o:u;f[p]=l[p]}return[o,u]}function r(l,o=l.schema){const{gen:u,data:p,it:f}=l;if(Object.keys(o).length===0)return;const h=u.let("missing");for(const m in o){const y=o[m];if(y.length===0)continue;const x=(0,a.propertyInData)(u,p,m,f.opts.ownProperties);l.setParams({property:m,depsCount:y.length,deps:y.join(", ")}),f.allErrors?u.if(x,()=>{for(const v of y)(0,a.checkReportMissingProp)(l,v)}):(u.if((0,t._)`${x} && (${(0,a.checkMissingProp)(l,y,h)})`),(0,a.reportMissingProp)(l,h),u.else())}}e.validatePropertyDeps=r;function c(l,o=l.schema){const{gen:u,data:p,keyword:f,it:h}=l,m=u.name("valid");for(const y in o)(0,n.alwaysValidSchema)(h,o[y])||(u.if((0,a.propertyInData)(u,p,y,h.opts.ownProperties),()=>{const x=l.subschema({keyword:f,schemaProp:y},m);l.mergeValidEvaluated(x,m)},()=>u.var(m,!0)),l.ok(m))}e.validateSchemaDeps=c,e.default=s})(ha);var Ci={};Object.defineProperty(Ci,"__esModule",{value:!0});const Gl=G,Bx=I,Vx={message:"property name must be valid",params:({params:e})=>(0,Gl._)`{propertyName: ${e.propertyName}}`},Hx={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:Vx,code(e){const{gen:t,schema:n,data:a,it:s}=e;if((0,Bx.alwaysValidSchema)(s,n))return;const i=t.name("valid");t.forIn("key",a,r=>{e.setParams({propertyName:r}),e.subschema({keyword:"propertyNames",data:r,dataTypes:["string"],propertyName:r,compositeRule:!0},i),t.if((0,Gl.not)(i),()=>{e.error(!0),s.allErrors||t.break()})}),e.ok(i)}};Ci.default=Hx;var va={};Object.defineProperty(va,"__esModule",{value:!0});const En=J,Ce=G,Gx=Oe,Sn=I,Kx={message:"must NOT have additional properties",params:({params:e})=>(0,Ce._)`{additionalProperty: ${e.additionalProperty}}`},Wx={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:Kx,code(e){const{gen:t,schema:n,parentSchema:a,data:s,errsCount:i,it:r}=e;if(!i)throw new Error("ajv implementation error");const{allErrors:c,opts:l}=r;if(r.props=!0,l.removeAdditional!=="all"&&(0,Sn.alwaysValidSchema)(r,n))return;const o=(0,En.allSchemaProperties)(a.properties),u=(0,En.allSchemaProperties)(a.patternProperties);p(),e.ok((0,Ce._)`${i} === ${Gx.default.errors}`);function p(){t.forIn("key",s,x=>{!o.length&&!u.length?m(x):t.if(f(x),()=>m(x))})}function f(x){let v;if(o.length>8){const $=(0,Sn.schemaRefOrVal)(r,a.properties,"properties");v=(0,En.isOwnProperty)(t,$,x)}else o.length?v=(0,Ce.or)(...o.map($=>(0,Ce._)`${x} === ${$}`)):v=Ce.nil;return u.length&&(v=(0,Ce.or)(v,...u.map($=>(0,Ce._)`${(0,En.usePattern)(e,$)}.test(${x})`))),(0,Ce.not)(v)}function h(x){t.code((0,Ce._)`delete ${s}[${x}]`)}function m(x){if(l.removeAdditional==="all"||l.removeAdditional&&n===!1){h(x);return}if(n===!1){e.setParams({additionalProperty:x}),e.error(),c||t.break();return}if(typeof n=="object"&&!(0,Sn.alwaysValidSchema)(r,n)){const v=t.name("valid");l.removeAdditional==="failing"?(y(x,v,!1),t.if((0,Ce.not)(v),()=>{e.reset(),h(x)})):(y(x,v),c||t.if((0,Ce.not)(v),()=>t.break()))}}function y(x,v,$){const E={keyword:"additionalProperties",dataProp:x,dataPropType:Sn.Type.Str};$===!1&&Object.assign(E,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(E,v)}}};va.default=Wx;var Ii={};Object.defineProperty(Ii,"__esModule",{value:!0});const Xx=Ne,mo=J,as=I,fo=va,Jx={keyword:"properties",type:"object",schemaType:"object",code(e){const{gen:t,schema:n,parentSchema:a,data:s,it:i}=e;i.opts.removeAdditional==="all"&&a.additionalProperties===void 0&&fo.default.code(new Xx.KeywordCxt(i,fo.default,"additionalProperties"));const r=(0,mo.allSchemaProperties)(n);for(const p of r)i.definedProperties.add(p);i.opts.unevaluated&&r.length&&i.props!==!0&&(i.props=as.mergeEvaluated.props(t,(0,as.toHash)(r),i.props));const c=r.filter(p=>!(0,as.alwaysValidSchema)(i,n[p]));if(c.length===0)return;const l=t.name("valid");for(const p of c)o(p)?u(p):(t.if((0,mo.propertyInData)(t,s,p,i.opts.ownProperties)),u(p),i.allErrors||t.else().var(l,!0),t.endIf()),e.it.definedProperties.add(p),e.ok(l);function o(p){return i.opts.useDefaults&&!i.compositeRule&&n[p].default!==void 0}function u(p){e.subschema({keyword:"properties",schemaProp:p,dataProp:p},l)}}};Ii.default=Jx;var Li={};Object.defineProperty(Li,"__esModule",{value:!0});const ho=J,Rn=G,vo=I,xo=I,Yx={keyword:"patternProperties",type:"object",schemaType:"object",code(e){const{gen:t,schema:n,data:a,parentSchema:s,it:i}=e,{opts:r}=i,c=(0,ho.allSchemaProperties)(n),l=c.filter(y=>(0,vo.alwaysValidSchema)(i,n[y]));if(c.length===0||l.length===c.length&&(!i.opts.unevaluated||i.props===!0))return;const o=r.strictSchema&&!r.allowMatchingProperties&&s.properties,u=t.name("valid");i.props!==!0&&!(i.props instanceof Rn.Name)&&(i.props=(0,xo.evaluatedPropsToName)(t,i.props));const{props:p}=i;f();function f(){for(const y of c)o&&h(y),i.allErrors?m(y):(t.var(u,!0),m(y),t.if(u))}function h(y){for(const x in o)new RegExp(y).test(x)&&(0,vo.checkStrictMode)(i,`property ${x} matches pattern ${y} (use allowMatchingProperties)`)}function m(y){t.forIn("key",a,x=>{t.if((0,Rn._)`${(0,ho.usePattern)(e,y)}.test(${x})`,()=>{const v=l.includes(y);v||e.subschema({keyword:"patternProperties",schemaProp:y,dataProp:x,dataPropType:xo.Type.Str},u),i.opts.unevaluated&&p!==!0?t.assign((0,Rn._)`${p}[${x}]`,!0):!v&&!i.allErrors&&t.if((0,Rn.not)(u),()=>t.break())})})}}};Li.default=Yx;var Di={};Object.defineProperty(Di,"__esModule",{value:!0});const Zx=I,Qx={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){const{gen:t,schema:n,it:a}=e;if((0,Zx.alwaysValidSchema)(a,n)){e.fail();return}const s=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},s),e.failResult(s,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};Di.default=Qx;var Fi={};Object.defineProperty(Fi,"__esModule",{value:!0});const eg=J,tg={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:eg.validateUnion,error:{message:"must match a schema in anyOf"}};Fi.default=tg;var zi={};Object.defineProperty(zi,"__esModule",{value:!0});const Fn=G,ng=I,ag={message:"must match exactly one schema in oneOf",params:({params:e})=>(0,Fn._)`{passingSchemas: ${e.passing}}`},sg={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:ag,code(e){const{gen:t,schema:n,parentSchema:a,it:s}=e;if(!Array.isArray(n))throw new Error("ajv implementation error");if(s.opts.discriminator&&a.discriminator)return;const i=n,r=t.let("valid",!1),c=t.let("passing",null),l=t.name("_valid");e.setParams({passing:c}),t.block(o),e.result(r,()=>e.reset(),()=>e.error(!0));function o(){i.forEach((u,p)=>{let f;(0,ng.alwaysValidSchema)(s,u)?t.var(l,!0):f=e.subschema({keyword:"oneOf",schemaProp:p,compositeRule:!0},l),p>0&&t.if((0,Fn._)`${l} && ${r}`).assign(r,!1).assign(c,(0,Fn._)`[${c}, ${p}]`).else(),t.if(l,()=>{t.assign(r,!0),t.assign(c,p),f&&e.mergeEvaluated(f,Fn.Name)})})}}};zi.default=sg;var qi={};Object.defineProperty(qi,"__esModule",{value:!0});const ig=I,rg={keyword:"allOf",schemaType:"array",code(e){const{gen:t,schema:n,it:a}=e;if(!Array.isArray(n))throw new Error("ajv implementation error");const s=t.name("valid");n.forEach((i,r)=>{if((0,ig.alwaysValidSchema)(a,i))return;const c=e.subschema({keyword:"allOf",schemaProp:r},s);e.ok(s),e.mergeEvaluated(c)})}};qi.default=rg;var Mi={};Object.defineProperty(Mi,"__esModule",{value:!0});const Wn=G,Kl=I,og={message:({params:e})=>(0,Wn.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,Wn._)`{failingKeyword: ${e.ifClause}}`},cg={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:og,code(e){const{gen:t,parentSchema:n,it:a}=e;n.then===void 0&&n.else===void 0&&(0,Kl.checkStrictMode)(a,'"if" without "then" and "else" is ignored');const s=go(a,"then"),i=go(a,"else");if(!s&&!i)return;const r=t.let("valid",!0),c=t.name("_valid");if(l(),e.reset(),s&&i){const u=t.let("ifClause");e.setParams({ifClause:u}),t.if(c,o("then",u),o("else",u))}else s?t.if(c,o("then")):t.if((0,Wn.not)(c),o("else"));e.pass(r,()=>e.error(!0));function l(){const u=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},c);e.mergeEvaluated(u)}function o(u,p){return()=>{const f=e.subschema({keyword:u},c);t.assign(r,c),e.mergeValidEvaluated(f,r),p?t.assign(p,(0,Wn._)`${u}`):e.setParams({ifClause:u})}}}};function go(e,t){const n=e.schema[t];return n!==void 0&&!(0,Kl.alwaysValidSchema)(e,n)}Mi.default=cg;var Ui={};Object.defineProperty(Ui,"__esModule",{value:!0});const lg=I,ug={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:n}){t.if===void 0&&(0,lg.checkStrictMode)(n,`"${e}" without "if" is ignored`)}};Ui.default=ug;Object.defineProperty(fa,"__esModule",{value:!0});const pg=qt,dg=Pi,mg=Mt,fg=Ni,hg=Ai,vg=ha,xg=Ci,gg=va,yg=Ii,bg=Li,$g=Di,wg=Fi,_g=zi,Eg=qi,Sg=Mi,Rg=Ui;function kg(e=!1){const t=[$g.default,wg.default,_g.default,Eg.default,Sg.default,Rg.default,xg.default,gg.default,vg.default,yg.default,bg.default];return e?t.push(dg.default,fg.default):t.push(pg.default,mg.default),t.push(hg.default),t}fa.default=kg;var Bi={},Ut={};Object.defineProperty(Ut,"__esModule",{value:!0});Ut.dynamicAnchor=void 0;const ss=G,jg=Oe,yo=_e,Tg=We,Og={keyword:"$dynamicAnchor",schemaType:"string",code:e=>Wl(e,e.schema)};function Wl(e,t){const{gen:n,it:a}=e;a.schemaEnv.root.dynamicAnchors[t]=!0;const s=(0,ss._)`${jg.default.dynamicAnchors}${(0,ss.getProperty)(t)}`,i=a.errSchemaPath==="#"?a.validateName:Pg(e);n.if((0,ss._)`!${s}`,()=>n.assign(s,i))}Ut.dynamicAnchor=Wl;function Pg(e){const{schemaEnv:t,schema:n,self:a}=e.it,{root:s,baseId:i,localRefs:r,meta:c}=t.root,{schemaId:l}=a.opts,o=new yo.SchemaEnv({schema:n,schemaId:l,root:s,baseId:i,localRefs:r,meta:c});return yo.compileSchema.call(a,o),(0,Tg.getValidate)(e,o)}Ut.default=Og;var Bt={};Object.defineProperty(Bt,"__esModule",{value:!0});Bt.dynamicRef=void 0;const bo=G,Ng=Oe,$o=We,Ag={keyword:"$dynamicRef",schemaType:"string",code:e=>Xl(e,e.schema)};function Xl(e,t){const{gen:n,keyword:a,it:s}=e;if(t[0]!=="#")throw new Error(`"${a}" only supports hash fragment reference`);const i=t.slice(1);if(s.allErrors)r();else{const l=n.let("valid",!1);r(l),e.ok(l)}function r(l){if(s.schemaEnv.root.dynamicAnchors[i]){const o=n.let("_v",(0,bo._)`${Ng.default.dynamicAnchors}${(0,bo.getProperty)(i)}`);n.if(o,c(o,l),c(s.validateName,l))}else c(s.validateName,l)()}function c(l,o){return o?()=>n.block(()=>{(0,$o.callRef)(e,l),n.let(o,!0)}):()=>(0,$o.callRef)(e,l)}}Bt.dynamicRef=Xl;Bt.default=Ag;var Vi={};Object.defineProperty(Vi,"__esModule",{value:!0});const Cg=Ut,Ig=I,Lg={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){e.schema?(0,Cg.dynamicAnchor)(e,""):(0,Ig.checkStrictMode)(e.it,"$recursiveAnchor: false is ignored")}};Vi.default=Lg;var Hi={};Object.defineProperty(Hi,"__esModule",{value:!0});const Dg=Bt,Fg={keyword:"$recursiveRef",schemaType:"string",code:e=>(0,Dg.dynamicRef)(e,e.schema)};Hi.default=Fg;Object.defineProperty(Bi,"__esModule",{value:!0});const zg=Ut,qg=Bt,Mg=Vi,Ug=Hi,Bg=[zg.default,qg.default,Mg.default,Ug.default];Bi.default=Bg;var Gi={},Ki={};Object.defineProperty(Ki,"__esModule",{value:!0});const wo=ha,Vg={keyword:"dependentRequired",type:"object",schemaType:"object",error:wo.error,code:e=>(0,wo.validatePropertyDeps)(e)};Ki.default=Vg;var Wi={};Object.defineProperty(Wi,"__esModule",{value:!0});const Hg=ha,Gg={keyword:"dependentSchemas",type:"object",schemaType:"object",code:e=>(0,Hg.validateSchemaDeps)(e)};Wi.default=Gg;var Xi={};Object.defineProperty(Xi,"__esModule",{value:!0});const Kg=I,Wg={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:n}){t.contains===void 0&&(0,Kg.checkStrictMode)(n,`"${e}" without "contains" is ignored`)}};Xi.default=Wg;Object.defineProperty(Gi,"__esModule",{value:!0});const Xg=Ki,Jg=Wi,Yg=Xi,Zg=[Xg.default,Jg.default,Yg.default];Gi.default=Zg;var Ji={},Yi={};Object.defineProperty(Yi,"__esModule",{value:!0});const tt=G,_o=I,Qg=Oe,ey={message:"must NOT have unevaluated properties",params:({params:e})=>(0,tt._)`{unevaluatedProperty: ${e.unevaluatedProperty}}`},ty={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:ey,code(e){const{gen:t,schema:n,data:a,errsCount:s,it:i}=e;if(!s)throw new Error("ajv implementation error");const{allErrors:r,props:c}=i;c instanceof tt.Name?t.if((0,tt._)`${c} !== true`,()=>t.forIn("key",a,p=>t.if(o(c,p),()=>l(p)))):c!==!0&&t.forIn("key",a,p=>c===void 0?l(p):t.if(u(c,p),()=>l(p))),i.props=!0,e.ok((0,tt._)`${s} === ${Qg.default.errors}`);function l(p){if(n===!1){e.setParams({unevaluatedProperty:p}),e.error(),r||t.break();return}if(!(0,_o.alwaysValidSchema)(i,n)){const f=t.name("valid");e.subschema({keyword:"unevaluatedProperties",dataProp:p,dataPropType:_o.Type.Str},f),r||t.if((0,tt.not)(f),()=>t.break())}}function o(p,f){return(0,tt._)`!${p} || !${p}[${f}]`}function u(p,f){const h=[];for(const m in p)p[m]===!0&&h.push((0,tt._)`${f} !== ${m}`);return(0,tt.and)(...h)}}};Yi.default=ty;var Zi={};Object.defineProperty(Zi,"__esModule",{value:!0});const mt=G,Eo=I,ny={message:({params:{len:e}})=>(0,mt.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,mt._)`{limit: ${e}}`},ay={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:ny,code(e){const{gen:t,schema:n,data:a,it:s}=e,i=s.items||0;if(i===!0)return;const r=t.const("len",(0,mt._)`${a}.length`);if(n===!1)e.setParams({len:i}),e.fail((0,mt._)`${r} > ${i}`);else if(typeof n=="object"&&!(0,Eo.alwaysValidSchema)(s,n)){const l=t.var("valid",(0,mt._)`${r} <= ${i}`);t.if((0,mt.not)(l),()=>c(l,i)),e.ok(l)}s.items=!0;function c(l,o){t.forRange("i",o,r,u=>{e.subschema({keyword:"unevaluatedItems",dataProp:u,dataPropType:Eo.Type.Num},l),s.allErrors||t.if((0,mt.not)(l),()=>t.break())})}}};Zi.default=ay;Object.defineProperty(Ji,"__esModule",{value:!0});const sy=Yi,iy=Zi,ry=[sy.default,iy.default];Ji.default=ry;var xa={},Qi={};Object.defineProperty(Qi,"__esModule",{value:!0});const ce=G,oy={message:({schemaCode:e})=>(0,ce.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,ce._)`{format: ${e}}`},cy={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:oy,code(e,t){const{gen:n,data:a,$data:s,schema:i,schemaCode:r,it:c}=e,{opts:l,errSchemaPath:o,schemaEnv:u,self:p}=c;if(!l.validateFormats)return;s?f():h();function f(){const m=n.scopeValue("formats",{ref:p.formats,code:l.code.formats}),y=n.const("fDef",(0,ce._)`${m}[${r}]`),x=n.let("fType"),v=n.let("format");n.if((0,ce._)`typeof ${y} == "object" && !(${y} instanceof RegExp)`,()=>n.assign(x,(0,ce._)`${y}.type || "string"`).assign(v,(0,ce._)`${y}.validate`),()=>n.assign(x,(0,ce._)`"string"`).assign(v,y)),e.fail$data((0,ce.or)($(),E()));function $(){return l.strictSchema===!1?ce.nil:(0,ce._)`${r} && !${v}`}function E(){const O=u.$async?(0,ce._)`(${y}.async ? await ${v}(${a}) : ${v}(${a}))`:(0,ce._)`${v}(${a})`,P=(0,ce._)`(typeof ${v} == "function" ? ${O} : ${v}.test(${a}))`;return(0,ce._)`${v} && ${v} !== true && ${x} === ${t} && !${P}`}}function h(){const m=p.formats[i];if(!m){$();return}if(m===!0)return;const[y,x,v]=E(m);y===t&&e.pass(O());function $(){if(l.strictSchema===!1){p.logger.warn(P());return}throw new Error(P());function P(){return`unknown format "${i}" ignored in schema at path "${o}"`}}function E(P){const K=P instanceof RegExp?(0,ce.regexpCode)(P):l.code.formats?(0,ce._)`${l.code.formats}${(0,ce.getProperty)(i)}`:void 0,X=n.scopeValue("formats",{key:i,ref:P,code:K});return typeof P=="object"&&!(P instanceof RegExp)?[P.type||"string",P.validate,(0,ce._)`${X}.validate`]:["string",P,X]}function O(){if(typeof m=="object"&&!(m instanceof RegExp)&&m.async){if(!u.$async)throw new Error("async format in sync schema");return(0,ce._)`await ${v}(${a})`}return typeof x=="function"?(0,ce._)`${v}(${a})`:(0,ce._)`${v}.test(${a})`}}}};Qi.default=cy;Object.defineProperty(xa,"__esModule",{value:!0});const ly=Qi,uy=[ly.default];xa.default=uy;var $t={};Object.defineProperty($t,"__esModule",{value:!0});$t.contentVocabulary=$t.metadataVocabulary=void 0;$t.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];$t.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"];Object.defineProperty(gi,"__esModule",{value:!0});const py=da,dy=ma,my=fa,fy=Bi,hy=Gi,vy=Ji,xy=xa,So=$t,gy=[fy.default,py.default,dy.default,(0,my.default)(!0),xy.default,So.metadataVocabulary,So.contentVocabulary,hy.default,vy.default];gi.default=gy;var ga={},ya={};Object.defineProperty(ya,"__esModule",{value:!0});ya.DiscrError=void 0;var Ro;(function(e){e.Tag="tag",e.Mapping="mapping"})(Ro||(ya.DiscrError=Ro={}));Object.defineProperty(ga,"__esModule",{value:!0});const Tt=G,Ns=ya,ko=_e,yy=wt,by=I,$y={message:({params:{discrError:e,tagName:t}})=>e===Ns.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:n}})=>(0,Tt._)`{error: ${e}, tag: ${n}, tagValue: ${t}}`},wy={keyword:"discriminator",type:"object",schemaType:"object",error:$y,code(e){const{gen:t,data:n,schema:a,parentSchema:s,it:i}=e,{oneOf:r}=s;if(!i.opts.discriminator)throw new Error("discriminator: requires discriminator option");const c=a.propertyName;if(typeof c!="string")throw new Error("discriminator: requires propertyName");if(a.mapping)throw new Error("discriminator: mapping is not supported");if(!r)throw new Error("discriminator: requires oneOf keyword");const l=t.let("valid",!1),o=t.const("tag",(0,Tt._)`${n}${(0,Tt.getProperty)(c)}`);t.if((0,Tt._)`typeof ${o} == "string"`,()=>u(),()=>e.error(!1,{discrError:Ns.DiscrError.Tag,tag:o,tagName:c})),e.ok(l);function u(){const h=f();t.if(!1);for(const m in h)t.elseIf((0,Tt._)`${o} === ${m}`),t.assign(l,p(h[m]));t.else(),e.error(!1,{discrError:Ns.DiscrError.Mapping,tag:o,tagName:c}),t.endIf()}function p(h){const m=t.name("valid"),y=e.subschema({keyword:"oneOf",schemaProp:h},m);return e.mergeEvaluated(y,Tt.Name),m}function f(){var h;const m={},y=v(s);let x=!0;for(let O=0;O<r.length;O++){let P=r[O];if(P?.$ref&&!(0,by.schemaHasRulesButRef)(P,i.self.RULES)){const X=P.$ref;if(P=ko.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,X),P instanceof ko.SchemaEnv&&(P=P.schema),P===void 0)throw new yy.default(i.opts.uriResolver,i.baseId,X)}const K=(h=P?.properties)===null||h===void 0?void 0:h[c];if(typeof K!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${c}"`);x=x&&(y||v(P)),$(K,O)}if(!x)throw new Error(`discriminator: "${c}" must be required`);return m;function v({required:O}){return Array.isArray(O)&&O.includes(c)}function $(O,P){if(O.const)E(O.const,P);else if(O.enum)for(const K of O.enum)E(K,P);else throw new Error(`discriminator: "properties/${c}" must have "const" or "enum"`)}function E(O,P){if(typeof O!="string"||O in m)throw new Error(`discriminator: "${c}" values must be unique strings`);m[O]=P}}}};ga.default=wy;var er={};const _y="https://json-schema.org/draft/2020-12/schema",Ey="https://json-schema.org/draft/2020-12/schema",Sy={"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},Ry="meta",ky="Core and Validation specifications meta-schema",jy=[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],Ty=["object","boolean"],Oy="This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",Py={definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}},Ny={$schema:_y,$id:Ey,$vocabulary:Sy,$dynamicAnchor:Ry,title:ky,allOf:jy,type:Ty,$comment:Oy,properties:Py},Ay="https://json-schema.org/draft/2020-12/schema",Cy="https://json-schema.org/draft/2020-12/meta/applicator",Iy={"https://json-schema.org/draft/2020-12/vocab/applicator":!0},Ly="meta",Dy="Applicator vocabulary meta-schema",Fy=["object","boolean"],zy={prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},qy={schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}},My={$schema:Ay,$id:Cy,$vocabulary:Iy,$dynamicAnchor:Ly,title:Dy,type:Fy,properties:zy,$defs:qy},Uy="https://json-schema.org/draft/2020-12/schema",By="https://json-schema.org/draft/2020-12/meta/unevaluated",Vy={"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},Hy="meta",Gy="Unevaluated applicator vocabulary meta-schema",Ky=["object","boolean"],Wy={unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}},Xy={$schema:Uy,$id:By,$vocabulary:Vy,$dynamicAnchor:Hy,title:Gy,type:Ky,properties:Wy},Jy="https://json-schema.org/draft/2020-12/schema",Yy="https://json-schema.org/draft/2020-12/meta/content",Zy={"https://json-schema.org/draft/2020-12/vocab/content":!0},Qy="meta",eb="Content vocabulary meta-schema",tb=["object","boolean"],nb={contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}},ab={$schema:Jy,$id:Yy,$vocabulary:Zy,$dynamicAnchor:Qy,title:eb,type:tb,properties:nb},sb="https://json-schema.org/draft/2020-12/schema",ib="https://json-schema.org/draft/2020-12/meta/core",rb={"https://json-schema.org/draft/2020-12/vocab/core":!0},ob="meta",cb="Core vocabulary meta-schema",lb=["object","boolean"],ub={$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},pb={anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}},db={$schema:sb,$id:ib,$vocabulary:rb,$dynamicAnchor:ob,title:cb,type:lb,properties:ub,$defs:pb},mb="https://json-schema.org/draft/2020-12/schema",fb="https://json-schema.org/draft/2020-12/meta/format-annotation",hb={"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},vb="meta",xb="Format vocabulary meta-schema for annotation results",gb=["object","boolean"],yb={format:{type:"string"}},bb={$schema:mb,$id:fb,$vocabulary:hb,$dynamicAnchor:vb,title:xb,type:gb,properties:yb},$b="https://json-schema.org/draft/2020-12/schema",wb="https://json-schema.org/draft/2020-12/meta/meta-data",_b={"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},Eb="meta",Sb="Meta-data vocabulary meta-schema",Rb=["object","boolean"],kb={title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}},jb={$schema:$b,$id:wb,$vocabulary:_b,$dynamicAnchor:Eb,title:Sb,type:Rb,properties:kb},Tb="https://json-schema.org/draft/2020-12/schema",Ob="https://json-schema.org/draft/2020-12/meta/validation",Pb={"https://json-schema.org/draft/2020-12/vocab/validation":!0},Nb="meta",Ab="Validation vocabulary meta-schema",Cb=["object","boolean"],Ib={type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},Lb={nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},Db={$schema:Tb,$id:Ob,$vocabulary:Pb,$dynamicAnchor:Nb,title:Ab,type:Cb,properties:Ib,$defs:Lb};Object.defineProperty(er,"__esModule",{value:!0});const Fb=Ny,zb=My,qb=Xy,Mb=ab,Ub=db,Bb=bb,Vb=jb,Hb=Db,Gb=["/properties"];function Kb(e){return[Fb,zb,qb,Mb,Ub,t(this,Bb),Vb,t(this,Hb)].forEach(n=>this.addMetaSchema(n,void 0,!1)),this;function t(n,a){return e?n.$dataMetaSchema(a,Gb):a}}er.default=Kb;(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.MissingRefError=t.ValidationError=t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=t.Ajv2020=void 0;const n=ai,a=gi,s=ga,i=er,r="https://json-schema.org/draft/2020-12/schema";class c extends n.default{constructor(h={}){super({...h,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){super._addVocabularies(),a.default.forEach(h=>this.addVocabulary(h)),this.opts.discriminator&&this.addKeyword(s.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();const{$data:h,meta:m}=this.opts;m&&(i.default.call(this,h),this.refs["http://json-schema.org/schema"]=r)}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(r)?r:void 0)}}t.Ajv2020=c,e.exports=t=c,e.exports.Ajv2020=c,Object.defineProperty(t,"__esModule",{value:!0}),t.default=c;var l=Ne;Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}});var o=G;Object.defineProperty(t,"_",{enumerable:!0,get:function(){return o._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return o.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return o.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return o.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return o.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return o.CodeGen}});var u=zt;Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return u.default}});var p=wt;Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return p.default}})})(Es,Es.exports);var Wb=Es.exports,As={exports:{}},Jl={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.formatNames=e.fastFormats=e.fullFormats=void 0;function t(M,B){return{validate:M,compare:B}}e.fullFormats={date:t(i,r),time:t(l(!0),o),"date-time":t(f(!0),h),"iso-time":t(l(),u),"iso-date-time":t(f(),m),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:v,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:de,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:E,int32:{type:"number",validate:K},int64:{type:"number",validate:X},float:{type:"number",validate:ae},double:{type:"number",validate:ae},password:!0,binary:!0},e.fastFormats={...e.fullFormats,date:t(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,r),time:t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,o),"date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,h),"iso-time":t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,u),"iso-date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,m),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},e.formatNames=Object.keys(e.fullFormats);function n(M){return M%4===0&&(M%100!==0||M%400===0)}const a=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,s=[0,31,28,31,30,31,30,31,31,30,31,30,31];function i(M){const B=a.exec(M);if(!B)return!1;const ee=+B[1],j=+B[2],N=+B[3];return j>=1&&j<=12&&N>=1&&N<=(j===2&&n(ee)?29:s[j])}function r(M,B){if(M&&B)return M>B?1:M<B?-1:0}const c=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function l(M){return function(ee){const j=c.exec(ee);if(!j)return!1;const N=+j[1],F=+j[2],T=+j[3],A=j[4],C=j[5]==="-"?-1:1,R=+(j[6]||0),b=+(j[7]||0);if(R>23||b>59||M&&!A)return!1;if(N<=23&&F<=59&&T<60)return!0;const S=F-b*C,w=N-R*C-(S<0?1:0);return(w===23||w===-1)&&(S===59||S===-1)&&T<61}}function o(M,B){if(!(M&&B))return;const ee=new Date("2020-01-01T"+M).valueOf(),j=new Date("2020-01-01T"+B).valueOf();if(ee&&j)return ee-j}function u(M,B){if(!(M&&B))return;const ee=c.exec(M),j=c.exec(B);if(ee&&j)return M=ee[1]+ee[2]+ee[3],B=j[1]+j[2]+j[3],M>B?1:M<B?-1:0}const p=/t|\s/i;function f(M){const B=l(M);return function(j){const N=j.split(p);return N.length===2&&i(N[0])&&B(N[1])}}function h(M,B){if(!(M&&B))return;const ee=new Date(M).valueOf(),j=new Date(B).valueOf();if(ee&&j)return ee-j}function m(M,B){if(!(M&&B))return;const[ee,j]=M.split(p),[N,F]=B.split(p),T=r(ee,N);if(T!==void 0)return T||o(j,F)}const y=/\/|:/,x=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function v(M){return y.test(M)&&x.test(M)}const $=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function E(M){return $.lastIndex=0,$.test(M)}const O=-(2**31),P=2**31-1;function K(M){return Number.isInteger(M)&&M<=P&&M>=O}function X(M){return Number.isInteger(M)}function ae(){return!0}const re=/[^\\]\\Z/;function de(M){if(re.test(M))return!1;try{return new RegExp(M),!0}catch{return!1}}})(Jl);var Yl={},Cs={exports:{}},tr={};Object.defineProperty(tr,"__esModule",{value:!0});const Xb=da,Jb=ma,Yb=fa,Zb=xa,jo=$t,Qb=[Xb.default,Jb.default,(0,Yb.default)(),Zb.default,jo.metadataVocabulary,jo.contentVocabulary];tr.default=Qb;const e0="http://json-schema.org/draft-07/schema#",t0="http://json-schema.org/draft-07/schema#",n0="Core schema meta-schema",a0={schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},s0=["object","boolean"],i0={$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},r0={$schema:e0,$id:t0,title:n0,definitions:a0,type:s0,properties:i0,default:!0};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.MissingRefError=t.ValidationError=t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=t.Ajv=void 0;const n=ai,a=tr,s=ga,i=r0,r=["/properties"],c="http://json-schema.org/draft-07/schema";class l extends n.default{_addVocabularies(){super._addVocabularies(),a.default.forEach(m=>this.addVocabulary(m)),this.opts.discriminator&&this.addKeyword(s.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const m=this.opts.$data?this.$dataMetaSchema(i,r):i;this.addMetaSchema(m,c,!1),this.refs["http://json-schema.org/schema"]=c}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(c)?c:void 0)}}t.Ajv=l,e.exports=t=l,e.exports.Ajv=l,Object.defineProperty(t,"__esModule",{value:!0}),t.default=l;var o=Ne;Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return o.KeywordCxt}});var u=G;Object.defineProperty(t,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});var p=zt;Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return p.default}});var f=wt;Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return f.default}})})(Cs,Cs.exports);var o0=Cs.exports;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.formatLimitDefinition=void 0;const t=o0,n=G,a=n.operators,s={formatMaximum:{okStr:"<=",ok:a.LTE,fail:a.GT},formatMinimum:{okStr:">=",ok:a.GTE,fail:a.LT},formatExclusiveMaximum:{okStr:"<",ok:a.LT,fail:a.GTE},formatExclusiveMinimum:{okStr:">",ok:a.GT,fail:a.LTE}},i={message:({keyword:c,schemaCode:l})=>(0,n.str)`should be ${s[c].okStr} ${l}`,params:({keyword:c,schemaCode:l})=>(0,n._)`{comparison: ${s[c].okStr}, limit: ${l}}`};e.formatLimitDefinition={keyword:Object.keys(s),type:"string",schemaType:"string",$data:!0,error:i,code(c){const{gen:l,data:o,schemaCode:u,keyword:p,it:f}=c,{opts:h,self:m}=f;if(!h.validateFormats)return;const y=new t.KeywordCxt(f,m.RULES.all.format.definition,"format");y.$data?x():v();function x(){const E=l.scopeValue("formats",{ref:m.formats,code:h.code.formats}),O=l.const("fmt",(0,n._)`${E}[${y.schemaCode}]`);c.fail$data((0,n.or)((0,n._)`typeof ${O} != "object"`,(0,n._)`${O} instanceof RegExp`,(0,n._)`typeof ${O}.compare != "function"`,$(O)))}function v(){const E=y.schema,O=m.formats[E];if(!O||O===!0)return;if(typeof O!="object"||O instanceof RegExp||typeof O.compare!="function")throw new Error(`"${p}": format "${E}" does not define "compare" function`);const P=l.scopeValue("formats",{key:E,ref:O,code:h.code.formats?(0,n._)`${h.code.formats}${(0,n.getProperty)(E)}`:void 0});c.fail$data($(P))}function $(E){return(0,n._)`${E}.compare(${o}, ${u}) ${s[p].fail} 0`}},dependencies:["format"]};const r=c=>(c.addKeyword(e.formatLimitDefinition),c);e.default=r})(Yl);(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});const n=Jl,a=Yl,s=G,i=new s.Name("fullFormats"),r=new s.Name("fastFormats"),c=(o,u={keywords:!0})=>{if(Array.isArray(u))return l(o,u,n.fullFormats,i),o;const[p,f]=u.mode==="fast"?[n.fastFormats,r]:[n.fullFormats,i],h=u.formats||n.formatNames;return l(o,h,p,f),u.keywords&&(0,a.default)(o),o};c.get=(o,u="full")=>{const f=(u==="fast"?n.fastFormats:n.fullFormats)[o];if(!f)throw new Error(`Unknown format "${o}"`);return f};function l(o,u,p,f){var h,m;(h=(m=o.opts.code).formats)!==null&&h!==void 0||(m.formats=(0,s._)`require("ajv-formats/dist/formats").${f}`);for(const y of u)o.addFormat(y,p[y])}e.exports=t=c,Object.defineProperty(t,"__esModule",{value:!0}),t.default=c})(As,As.exports);var c0=As.exports;const l0=aa(c0),u0=(e,t,n,a)=>{if(n==="length"||n==="prototype"||n==="arguments"||n==="caller")return;const s=Object.getOwnPropertyDescriptor(e,n),i=Object.getOwnPropertyDescriptor(t,n);!p0(s,i)&&a||Object.defineProperty(e,n,i)},p0=function(e,t){return e===void 0||e.configurable||e.writable===t.writable&&e.enumerable===t.enumerable&&e.configurable===t.configurable&&(e.writable||e.value===t.value)},d0=(e,t)=>{const n=Object.getPrototypeOf(t);n!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,n)},m0=(e,t)=>`/* Wrapped ${e}*/
30
+ ${t}`,f0=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),h0=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),v0=(e,t,n)=>{const a=n===""?"":`with ${n.trim()}() `,s=m0.bind(null,a,t.toString());Object.defineProperty(s,"name",h0);const{writable:i,enumerable:r,configurable:c}=f0;Object.defineProperty(e,"toString",{value:s,writable:i,enumerable:r,configurable:c})};function x0(e,t,{ignoreNonConfigurable:n=!1}={}){const{name:a}=e;for(const s of Reflect.ownKeys(t))u0(e,t,s,n);return d0(e,t),v0(e,t,a),e}const To=(e,t={})=>{if(typeof e!="function")throw new TypeError(`Expected the first argument to be a function, got \`${typeof e}\``);const{wait:n=0,maxWait:a=Number.POSITIVE_INFINITY,before:s=!1,after:i=!0}=t;if(n<0||a<0)throw new RangeError("`wait` and `maxWait` must not be negative.");if(!s&&!i)throw new Error("Both `before` and `after` are false, function wouldn't be called.");let r,c,l;const o=function(...u){const p=this,f=()=>{r=void 0,c&&(clearTimeout(c),c=void 0),i&&(l=e.apply(p,u))},h=()=>{c=void 0,r&&(clearTimeout(r),r=void 0),i&&(l=e.apply(p,u))},m=s&&!r;return clearTimeout(r),r=setTimeout(f,n),a>0&&a!==Number.POSITIVE_INFINITY&&!c&&(c=setTimeout(h,a)),m&&(l=e.apply(p,u)),l};return x0(o,e),o.cancel=()=>{r&&(clearTimeout(r),r=void 0),c&&(clearTimeout(c),c=void 0)},o};var Is={exports:{}};const g0="2.0.0",Zl=256,y0=Number.MAX_SAFE_INTEGER||9007199254740991,b0=16,$0=Zl-6,w0=["major","premajor","minor","preminor","patch","prepatch","prerelease"];var ba={MAX_LENGTH:Zl,MAX_SAFE_COMPONENT_LENGTH:b0,MAX_SAFE_BUILD_LENGTH:$0,MAX_SAFE_INTEGER:y0,RELEASE_TYPES:w0,SEMVER_SPEC_VERSION:g0,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2};const _0=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};var $a=_0;(function(e,t){const{MAX_SAFE_COMPONENT_LENGTH:n,MAX_SAFE_BUILD_LENGTH:a,MAX_LENGTH:s}=ba,i=$a;t=e.exports={};const r=t.re=[],c=t.safeRe=[],l=t.src=[],o=t.t={};let u=0;const p="[a-zA-Z0-9-]",f=[["\\s",1],["\\d",s],[p,a]],h=y=>{for(const[x,v]of f)y=y.split(`${x}*`).join(`${x}{0,${v}}`).split(`${x}+`).join(`${x}{1,${v}}`);return y},m=(y,x,v)=>{const $=h(x),E=u++;i(y,E,x),o[y]=E,l[E]=x,r[E]=new RegExp(x,v?"g":void 0),c[E]=new RegExp($,v?"g":void 0)};m("NUMERICIDENTIFIER","0|[1-9]\\d*"),m("NUMERICIDENTIFIERLOOSE","\\d+"),m("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${p}*`),m("MAINVERSION",`(${l[o.NUMERICIDENTIFIER]})\\.(${l[o.NUMERICIDENTIFIER]})\\.(${l[o.NUMERICIDENTIFIER]})`),m("MAINVERSIONLOOSE",`(${l[o.NUMERICIDENTIFIERLOOSE]})\\.(${l[o.NUMERICIDENTIFIERLOOSE]})\\.(${l[o.NUMERICIDENTIFIERLOOSE]})`),m("PRERELEASEIDENTIFIER",`(?:${l[o.NUMERICIDENTIFIER]}|${l[o.NONNUMERICIDENTIFIER]})`),m("PRERELEASEIDENTIFIERLOOSE",`(?:${l[o.NUMERICIDENTIFIERLOOSE]}|${l[o.NONNUMERICIDENTIFIER]})`),m("PRERELEASE",`(?:-(${l[o.PRERELEASEIDENTIFIER]}(?:\\.${l[o.PRERELEASEIDENTIFIER]})*))`),m("PRERELEASELOOSE",`(?:-?(${l[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${l[o.PRERELEASEIDENTIFIERLOOSE]})*))`),m("BUILDIDENTIFIER",`${p}+`),m("BUILD",`(?:\\+(${l[o.BUILDIDENTIFIER]}(?:\\.${l[o.BUILDIDENTIFIER]})*))`),m("FULLPLAIN",`v?${l[o.MAINVERSION]}${l[o.PRERELEASE]}?${l[o.BUILD]}?`),m("FULL",`^${l[o.FULLPLAIN]}$`),m("LOOSEPLAIN",`[v=\\s]*${l[o.MAINVERSIONLOOSE]}${l[o.PRERELEASELOOSE]}?${l[o.BUILD]}?`),m("LOOSE",`^${l[o.LOOSEPLAIN]}$`),m("GTLT","((?:<|>)?=?)"),m("XRANGEIDENTIFIERLOOSE",`${l[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),m("XRANGEIDENTIFIER",`${l[o.NUMERICIDENTIFIER]}|x|X|\\*`),m("XRANGEPLAIN",`[v=\\s]*(${l[o.XRANGEIDENTIFIER]})(?:\\.(${l[o.XRANGEIDENTIFIER]})(?:\\.(${l[o.XRANGEIDENTIFIER]})(?:${l[o.PRERELEASE]})?${l[o.BUILD]}?)?)?`),m("XRANGEPLAINLOOSE",`[v=\\s]*(${l[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${l[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${l[o.XRANGEIDENTIFIERLOOSE]})(?:${l[o.PRERELEASELOOSE]})?${l[o.BUILD]}?)?)?`),m("XRANGE",`^${l[o.GTLT]}\\s*${l[o.XRANGEPLAIN]}$`),m("XRANGELOOSE",`^${l[o.GTLT]}\\s*${l[o.XRANGEPLAINLOOSE]}$`),m("COERCEPLAIN",`(^|[^\\d])(\\d{1,${n}})(?:\\.(\\d{1,${n}}))?(?:\\.(\\d{1,${n}}))?`),m("COERCE",`${l[o.COERCEPLAIN]}(?:$|[^\\d])`),m("COERCEFULL",l[o.COERCEPLAIN]+`(?:${l[o.PRERELEASE]})?(?:${l[o.BUILD]})?(?:$|[^\\d])`),m("COERCERTL",l[o.COERCE],!0),m("COERCERTLFULL",l[o.COERCEFULL],!0),m("LONETILDE","(?:~>?)"),m("TILDETRIM",`(\\s*)${l[o.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",m("TILDE",`^${l[o.LONETILDE]}${l[o.XRANGEPLAIN]}$`),m("TILDELOOSE",`^${l[o.LONETILDE]}${l[o.XRANGEPLAINLOOSE]}$`),m("LONECARET","(?:\\^)"),m("CARETTRIM",`(\\s*)${l[o.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",m("CARET",`^${l[o.LONECARET]}${l[o.XRANGEPLAIN]}$`),m("CARETLOOSE",`^${l[o.LONECARET]}${l[o.XRANGEPLAINLOOSE]}$`),m("COMPARATORLOOSE",`^${l[o.GTLT]}\\s*(${l[o.LOOSEPLAIN]})$|^$`),m("COMPARATOR",`^${l[o.GTLT]}\\s*(${l[o.FULLPLAIN]})$|^$`),m("COMPARATORTRIM",`(\\s*)${l[o.GTLT]}\\s*(${l[o.LOOSEPLAIN]}|${l[o.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",m("HYPHENRANGE",`^\\s*(${l[o.XRANGEPLAIN]})\\s+-\\s+(${l[o.XRANGEPLAIN]})\\s*$`),m("HYPHENRANGELOOSE",`^\\s*(${l[o.XRANGEPLAINLOOSE]})\\s+-\\s+(${l[o.XRANGEPLAINLOOSE]})\\s*$`),m("STAR","(<|>)?=?\\s*\\*"),m("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),m("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(Is,Is.exports);var vn=Is.exports;const E0=Object.freeze({loose:!0}),S0=Object.freeze({}),R0=e=>e?typeof e!="object"?E0:e:S0;var nr=R0;const Oo=/^[0-9]+$/,Ql=(e,t)=>{const n=Oo.test(e),a=Oo.test(t);return n&&a&&(e=+e,t=+t),e===t?0:n&&!a?-1:a&&!n?1:e<t?-1:1},k0=(e,t)=>Ql(t,e);var eu={compareIdentifiers:Ql,rcompareIdentifiers:k0};const kn=$a,{MAX_LENGTH:Po,MAX_SAFE_INTEGER:jn}=ba,{safeRe:No,t:Ao}=vn,j0=nr,{compareIdentifiers:Rt}=eu;let T0=class qe{constructor(t,n){if(n=j0(n),t instanceof qe){if(t.loose===!!n.loose&&t.includePrerelease===!!n.includePrerelease)return t;t=t.version}else if(typeof t!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof t}".`);if(t.length>Po)throw new TypeError(`version is longer than ${Po} characters`);kn("SemVer",t,n),this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease;const a=t.trim().match(n.loose?No[Ao.LOOSE]:No[Ao.FULL]);if(!a)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+a[1],this.minor=+a[2],this.patch=+a[3],this.major>jn||this.major<0)throw new TypeError("Invalid major version");if(this.minor>jn||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>jn||this.patch<0)throw new TypeError("Invalid patch version");a[4]?this.prerelease=a[4].split(".").map(s=>{if(/^[0-9]+$/.test(s)){const i=+s;if(i>=0&&i<jn)return i}return s}):this.prerelease=[],this.build=a[5]?a[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(t){if(kn("SemVer.compare",this.version,this.options,t),!(t instanceof qe)){if(typeof t=="string"&&t===this.version)return 0;t=new qe(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(t){return t instanceof qe||(t=new qe(t,this.options)),Rt(this.major,t.major)||Rt(this.minor,t.minor)||Rt(this.patch,t.patch)}comparePre(t){if(t instanceof qe||(t=new qe(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let n=0;do{const a=this.prerelease[n],s=t.prerelease[n];if(kn("prerelease compare",n,a,s),a===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(a===void 0)return-1;if(a===s)continue;return Rt(a,s)}while(++n)}compareBuild(t){t instanceof qe||(t=new qe(t,this.options));let n=0;do{const a=this.build[n],s=t.build[n];if(kn("build compare",n,a,s),a===void 0&&s===void 0)return 0;if(s===void 0)return 1;if(a===void 0)return-1;if(a===s)continue;return Rt(a,s)}while(++n)}inc(t,n,a){switch(t){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",n,a);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",n,a);break;case"prepatch":this.prerelease.length=0,this.inc("patch",n,a),this.inc("pre",n,a);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",n,a),this.inc("pre",n,a);break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const s=Number(a)?1:0;if(!n&&a===!1)throw new Error("invalid increment argument: identifier is empty");if(this.prerelease.length===0)this.prerelease=[s];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);if(i===-1){if(n===this.prerelease.join(".")&&a===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(s)}}if(n){let i=[n,s];a===!1&&(i=[n]),Rt(this.prerelease[0],n)===0?isNaN(this.prerelease[1])&&(this.prerelease=i):this.prerelease=i}break}default:throw new Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};var Ee=T0;const Co=Ee,O0=(e,t,n=!1)=>{if(e instanceof Co)return e;try{return new Co(e,t)}catch(a){if(!n)return null;throw a}};var Vt=O0;const P0=Vt,N0=(e,t)=>{const n=P0(e,t);return n?n.version:null};var A0=N0;const C0=Vt,I0=(e,t)=>{const n=C0(e.trim().replace(/^[=v]+/,""),t);return n?n.version:null};var L0=I0;const Io=Ee,D0=(e,t,n,a,s)=>{typeof n=="string"&&(s=a,a=n,n=void 0);try{return new Io(e instanceof Io?e.version:e,n).inc(t,a,s).version}catch{return null}};var F0=D0;const Lo=Vt,z0=(e,t)=>{const n=Lo(e,null,!0),a=Lo(t,null,!0),s=n.compare(a);if(s===0)return null;const i=s>0,r=i?n:a,c=i?a:n,l=!!r.prerelease.length;if(!!c.prerelease.length&&!l)return!c.patch&&!c.minor?"major":r.patch?"patch":r.minor?"minor":"major";const u=l?"pre":"";return n.major!==a.major?u+"major":n.minor!==a.minor?u+"minor":n.patch!==a.patch?u+"patch":"prerelease"};var q0=z0;const M0=Ee,U0=(e,t)=>new M0(e,t).major;var B0=U0;const V0=Ee,H0=(e,t)=>new V0(e,t).minor;var G0=H0;const K0=Ee,W0=(e,t)=>new K0(e,t).patch;var X0=W0;const J0=Vt,Y0=(e,t)=>{const n=J0(e,t);return n&&n.prerelease.length?n.prerelease:null};var Z0=Y0;const Do=Ee,Q0=(e,t,n)=>new Do(e,n).compare(new Do(t,n));var Fe=Q0;const e$=Fe,t$=(e,t,n)=>e$(t,e,n);var n$=t$;const a$=Fe,s$=(e,t)=>a$(e,t,!0);var i$=s$;const Fo=Ee,r$=(e,t,n)=>{const a=new Fo(e,n),s=new Fo(t,n);return a.compare(s)||a.compareBuild(s)};var ar=r$;const o$=ar,c$=(e,t)=>e.sort((n,a)=>o$(n,a,t));var l$=c$;const u$=ar,p$=(e,t)=>e.sort((n,a)=>u$(a,n,t));var d$=p$;const m$=Fe,f$=(e,t,n)=>m$(e,t,n)>0;var wa=f$;const h$=Fe,v$=(e,t,n)=>h$(e,t,n)<0;var sr=v$;const x$=Fe,g$=(e,t,n)=>x$(e,t,n)===0;var tu=g$;const y$=Fe,b$=(e,t,n)=>y$(e,t,n)!==0;var nu=b$;const $$=Fe,w$=(e,t,n)=>$$(e,t,n)>=0;var ir=w$;const _$=Fe,E$=(e,t,n)=>_$(e,t,n)<=0;var rr=E$;const S$=tu,R$=nu,k$=wa,j$=ir,T$=sr,O$=rr,P$=(e,t,n,a)=>{switch(t){case"===":return typeof e=="object"&&(e=e.version),typeof n=="object"&&(n=n.version),e===n;case"!==":return typeof e=="object"&&(e=e.version),typeof n=="object"&&(n=n.version),e!==n;case"":case"=":case"==":return S$(e,n,a);case"!=":return R$(e,n,a);case">":return k$(e,n,a);case">=":return j$(e,n,a);case"<":return T$(e,n,a);case"<=":return O$(e,n,a);default:throw new TypeError(`Invalid operator: ${t}`)}};var au=P$;const N$=Ee,A$=Vt,{safeRe:Tn,t:On}=vn,C$=(e,t)=>{if(e instanceof N$)return e;if(typeof e=="number"&&(e=String(e)),typeof e!="string")return null;t=t||{};let n=null;if(!t.rtl)n=e.match(t.includePrerelease?Tn[On.COERCEFULL]:Tn[On.COERCE]);else{const l=t.includePrerelease?Tn[On.COERCERTLFULL]:Tn[On.COERCERTL];let o;for(;(o=l.exec(e))&&(!n||n.index+n[0].length!==e.length);)(!n||o.index+o[0].length!==n.index+n[0].length)&&(n=o),l.lastIndex=o.index+o[1].length+o[2].length;l.lastIndex=-1}if(n===null)return null;const a=n[2],s=n[3]||"0",i=n[4]||"0",r=t.includePrerelease&&n[5]?`-${n[5]}`:"",c=t.includePrerelease&&n[6]?`+${n[6]}`:"";return A$(`${a}.${s}.${i}${r}${c}`,t)};var I$=C$;class L${constructor(){this.max=1e3,this.map=new Map}get(t){const n=this.map.get(t);if(n!==void 0)return this.map.delete(t),this.map.set(t,n),n}delete(t){return this.map.delete(t)}set(t,n){if(!this.delete(t)&&n!==void 0){if(this.map.size>=this.max){const s=this.map.keys().next().value;this.delete(s)}this.map.set(t,n)}return this}}var D$=L$,is,zo;function ze(){if(zo)return is;zo=1;const e=/\s+/g;class t{constructor(N,F){if(F=s(F),N instanceof t)return N.loose===!!F.loose&&N.includePrerelease===!!F.includePrerelease?N:new t(N.raw,F);if(N instanceof i)return this.raw=N.value,this.set=[[N]],this.formatted=void 0,this;if(this.options=F,this.loose=!!F.loose,this.includePrerelease=!!F.includePrerelease,this.raw=N.trim().replace(e," "),this.set=this.raw.split("||").map(T=>this.parseRange(T.trim())).filter(T=>T.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const T=this.set[0];if(this.set=this.set.filter(A=>!y(A[0])),this.set.length===0)this.set=[T];else if(this.set.length>1){for(const A of this.set)if(A.length===1&&x(A[0])){this.set=[A];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let N=0;N<this.set.length;N++){N>0&&(this.formatted+="||");const F=this.set[N];for(let T=0;T<F.length;T++)T>0&&(this.formatted+=" "),this.formatted+=F[T].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(N){const T=((this.options.includePrerelease&&h)|(this.options.loose&&m))+":"+N,A=a.get(T);if(A)return A;const C=this.options.loose,R=C?l[o.HYPHENRANGELOOSE]:l[o.HYPHENRANGE];N=N.replace(R,B(this.options.includePrerelease)),r("hyphen replace",N),N=N.replace(l[o.COMPARATORTRIM],u),r("comparator trim",N),N=N.replace(l[o.TILDETRIM],p),r("tilde trim",N),N=N.replace(l[o.CARETTRIM],f),r("caret trim",N);let b=N.split(" ").map(g=>$(g,this.options)).join(" ").split(/\s+/).map(g=>M(g,this.options));C&&(b=b.filter(g=>(r("loose invalid filter",g,this.options),!!g.match(l[o.COMPARATORLOOSE])))),r("range list",b);const S=new Map,w=b.map(g=>new i(g,this.options));for(const g of w){if(y(g))return[g];S.set(g.value,g)}S.size>1&&S.has("")&&S.delete("");const d=[...S.values()];return a.set(T,d),d}intersects(N,F){if(!(N instanceof t))throw new TypeError("a Range is required");return this.set.some(T=>v(T,F)&&N.set.some(A=>v(A,F)&&T.every(C=>A.every(R=>C.intersects(R,F)))))}test(N){if(!N)return!1;if(typeof N=="string")try{N=new c(N,this.options)}catch{return!1}for(let F=0;F<this.set.length;F++)if(ee(this.set[F],N,this.options))return!0;return!1}}is=t;const n=D$,a=new n,s=nr,i=_a(),r=$a,c=Ee,{safeRe:l,t:o,comparatorTrimReplace:u,tildeTrimReplace:p,caretTrimReplace:f}=vn,{FLAG_INCLUDE_PRERELEASE:h,FLAG_LOOSE:m}=ba,y=j=>j.value==="<0.0.0-0",x=j=>j.value==="",v=(j,N)=>{let F=!0;const T=j.slice();let A=T.pop();for(;F&&T.length;)F=T.every(C=>A.intersects(C,N)),A=T.pop();return F},$=(j,N)=>(r("comp",j,N),j=K(j,N),r("caret",j),j=O(j,N),r("tildes",j),j=ae(j,N),r("xrange",j),j=de(j,N),r("stars",j),j),E=j=>!j||j.toLowerCase()==="x"||j==="*",O=(j,N)=>j.trim().split(/\s+/).map(F=>P(F,N)).join(" "),P=(j,N)=>{const F=N.loose?l[o.TILDELOOSE]:l[o.TILDE];return j.replace(F,(T,A,C,R,b)=>{r("tilde",j,T,A,C,R,b);let S;return E(A)?S="":E(C)?S=`>=${A}.0.0 <${+A+1}.0.0-0`:E(R)?S=`>=${A}.${C}.0 <${A}.${+C+1}.0-0`:b?(r("replaceTilde pr",b),S=`>=${A}.${C}.${R}-${b} <${A}.${+C+1}.0-0`):S=`>=${A}.${C}.${R} <${A}.${+C+1}.0-0`,r("tilde return",S),S})},K=(j,N)=>j.trim().split(/\s+/).map(F=>X(F,N)).join(" "),X=(j,N)=>{r("caret",j,N);const F=N.loose?l[o.CARETLOOSE]:l[o.CARET],T=N.includePrerelease?"-0":"";return j.replace(F,(A,C,R,b,S)=>{r("caret",j,A,C,R,b,S);let w;return E(C)?w="":E(R)?w=`>=${C}.0.0${T} <${+C+1}.0.0-0`:E(b)?C==="0"?w=`>=${C}.${R}.0${T} <${C}.${+R+1}.0-0`:w=`>=${C}.${R}.0${T} <${+C+1}.0.0-0`:S?(r("replaceCaret pr",S),C==="0"?R==="0"?w=`>=${C}.${R}.${b}-${S} <${C}.${R}.${+b+1}-0`:w=`>=${C}.${R}.${b}-${S} <${C}.${+R+1}.0-0`:w=`>=${C}.${R}.${b}-${S} <${+C+1}.0.0-0`):(r("no pr"),C==="0"?R==="0"?w=`>=${C}.${R}.${b}${T} <${C}.${R}.${+b+1}-0`:w=`>=${C}.${R}.${b}${T} <${C}.${+R+1}.0-0`:w=`>=${C}.${R}.${b} <${+C+1}.0.0-0`),r("caret return",w),w})},ae=(j,N)=>(r("replaceXRanges",j,N),j.split(/\s+/).map(F=>re(F,N)).join(" ")),re=(j,N)=>{j=j.trim();const F=N.loose?l[o.XRANGELOOSE]:l[o.XRANGE];return j.replace(F,(T,A,C,R,b,S)=>{r("xRange",j,T,A,C,R,b,S);const w=E(C),d=w||E(R),g=d||E(b),k=g;return A==="="&&k&&(A=""),S=N.includePrerelease?"-0":"",w?A===">"||A==="<"?T="<0.0.0-0":T="*":A&&k?(d&&(R=0),b=0,A===">"?(A=">=",d?(C=+C+1,R=0,b=0):(R=+R+1,b=0)):A==="<="&&(A="<",d?C=+C+1:R=+R+1),A==="<"&&(S="-0"),T=`${A+C}.${R}.${b}${S}`):d?T=`>=${C}.0.0${S} <${+C+1}.0.0-0`:g&&(T=`>=${C}.${R}.0${S} <${C}.${+R+1}.0-0`),r("xRange return",T),T})},de=(j,N)=>(r("replaceStars",j,N),j.trim().replace(l[o.STAR],"")),M=(j,N)=>(r("replaceGTE0",j,N),j.trim().replace(l[N.includePrerelease?o.GTE0PRE:o.GTE0],"")),B=j=>(N,F,T,A,C,R,b,S,w,d,g,k)=>(E(T)?F="":E(A)?F=`>=${T}.0.0${j?"-0":""}`:E(C)?F=`>=${T}.${A}.0${j?"-0":""}`:R?F=`>=${F}`:F=`>=${F}${j?"-0":""}`,E(w)?S="":E(d)?S=`<${+w+1}.0.0-0`:E(g)?S=`<${w}.${+d+1}.0-0`:k?S=`<=${w}.${d}.${g}-${k}`:j?S=`<${w}.${d}.${+g+1}-0`:S=`<=${S}`,`${F} ${S}`.trim()),ee=(j,N,F)=>{for(let T=0;T<j.length;T++)if(!j[T].test(N))return!1;if(N.prerelease.length&&!F.includePrerelease){for(let T=0;T<j.length;T++)if(r(j[T].semver),j[T].semver!==i.ANY&&j[T].semver.prerelease.length>0){const A=j[T].semver;if(A.major===N.major&&A.minor===N.minor&&A.patch===N.patch)return!0}return!1}return!0};return is}var rs,qo;function _a(){if(qo)return rs;qo=1;const e=Symbol("SemVer ANY");class t{static get ANY(){return e}constructor(u,p){if(p=n(p),u instanceof t){if(u.loose===!!p.loose)return u;u=u.value}u=u.trim().split(/\s+/).join(" "),r("comparator",u,p),this.options=p,this.loose=!!p.loose,this.parse(u),this.semver===e?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}parse(u){const p=this.options.loose?a[s.COMPARATORLOOSE]:a[s.COMPARATOR],f=u.match(p);if(!f)throw new TypeError(`Invalid comparator: ${u}`);this.operator=f[1]!==void 0?f[1]:"",this.operator==="="&&(this.operator=""),f[2]?this.semver=new c(f[2],this.options.loose):this.semver=e}toString(){return this.value}test(u){if(r("Comparator.test",u,this.options.loose),this.semver===e||u===e)return!0;if(typeof u=="string")try{u=new c(u,this.options)}catch{return!1}return i(u,this.operator,this.semver,this.options)}intersects(u,p){if(!(u instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new l(u.value,p).test(this.value):u.operator===""?u.value===""?!0:new l(this.value,p).test(u.semver):(p=n(p),p.includePrerelease&&(this.value==="<0.0.0-0"||u.value==="<0.0.0-0")||!p.includePrerelease&&(this.value.startsWith("<0.0.0")||u.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&u.operator.startsWith(">")||this.operator.startsWith("<")&&u.operator.startsWith("<")||this.semver.version===u.semver.version&&this.operator.includes("=")&&u.operator.includes("=")||i(this.semver,"<",u.semver,p)&&this.operator.startsWith(">")&&u.operator.startsWith("<")||i(this.semver,">",u.semver,p)&&this.operator.startsWith("<")&&u.operator.startsWith(">")))}}rs=t;const n=nr,{safeRe:a,t:s}=vn,i=au,r=$a,c=Ee,l=ze();return rs}const F$=ze(),z$=(e,t,n)=>{try{t=new F$(t,n)}catch{return!1}return t.test(e)};var Ea=z$;const q$=ze(),M$=(e,t)=>new q$(e,t).set.map(n=>n.map(a=>a.value).join(" ").trim().split(" "));var U$=M$;const B$=Ee,V$=ze(),H$=(e,t,n)=>{let a=null,s=null,i=null;try{i=new V$(t,n)}catch{return null}return e.forEach(r=>{i.test(r)&&(!a||s.compare(r)===-1)&&(a=r,s=new B$(a,n))}),a};var G$=H$;const K$=Ee,W$=ze(),X$=(e,t,n)=>{let a=null,s=null,i=null;try{i=new W$(t,n)}catch{return null}return e.forEach(r=>{i.test(r)&&(!a||s.compare(r)===1)&&(a=r,s=new K$(a,n))}),a};var J$=X$;const os=Ee,Y$=ze(),Mo=wa,Z$=(e,t)=>{e=new Y$(e,t);let n=new os("0.0.0");if(e.test(n)||(n=new os("0.0.0-0"),e.test(n)))return n;n=null;for(let a=0;a<e.set.length;++a){const s=e.set[a];let i=null;s.forEach(r=>{const c=new os(r.semver.version);switch(r.operator){case">":c.prerelease.length===0?c.patch++:c.prerelease.push(0),c.raw=c.format();case"":case">=":(!i||Mo(c,i))&&(i=c);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${r.operator}`)}}),i&&(!n||Mo(n,i))&&(n=i)}return n&&e.test(n)?n:null};var Q$=Z$;const ew=ze(),tw=(e,t)=>{try{return new ew(e,t).range||"*"}catch{return null}};var nw=tw;const aw=Ee,su=_a(),{ANY:sw}=su,iw=ze(),rw=Ea,Uo=wa,Bo=sr,ow=rr,cw=ir,lw=(e,t,n,a)=>{e=new aw(e,a),t=new iw(t,a);let s,i,r,c,l;switch(n){case">":s=Uo,i=ow,r=Bo,c=">",l=">=";break;case"<":s=Bo,i=cw,r=Uo,c="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(rw(e,t,a))return!1;for(let o=0;o<t.set.length;++o){const u=t.set[o];let p=null,f=null;if(u.forEach(h=>{h.semver===sw&&(h=new su(">=0.0.0")),p=p||h,f=f||h,s(h.semver,p.semver,a)?p=h:r(h.semver,f.semver,a)&&(f=h)}),p.operator===c||p.operator===l||(!f.operator||f.operator===c)&&i(e,f.semver))return!1;if(f.operator===l&&r(e,f.semver))return!1}return!0};var or=lw;const uw=or,pw=(e,t,n)=>uw(e,t,">",n);var dw=pw;const mw=or,fw=(e,t,n)=>mw(e,t,"<",n);var hw=fw;const Vo=ze(),vw=(e,t,n)=>(e=new Vo(e,n),t=new Vo(t,n),e.intersects(t,n));var xw=vw;const gw=Ea,yw=Fe;var bw=(e,t,n)=>{const a=[];let s=null,i=null;const r=e.sort((u,p)=>yw(u,p,n));for(const u of r)gw(u,t,n)?(i=u,s||(s=u)):(i&&a.push([s,i]),i=null,s=null);s&&a.push([s,null]);const c=[];for(const[u,p]of a)u===p?c.push(u):!p&&u===r[0]?c.push("*"):p?u===r[0]?c.push(`<=${p}`):c.push(`${u} - ${p}`):c.push(`>=${u}`);const l=c.join(" || "),o=typeof t.raw=="string"?t.raw:String(t);return l.length<o.length?l:t};const Ho=ze(),cr=_a(),{ANY:cs}=cr,Yt=Ea,lr=Fe,$w=(e,t,n={})=>{if(e===t)return!0;e=new Ho(e,n),t=new Ho(t,n);let a=!1;e:for(const s of e.set){for(const i of t.set){const r=_w(s,i,n);if(a=a||r!==null,r)continue e}if(a)return!1}return!0},ww=[new cr(">=0.0.0-0")],Go=[new cr(">=0.0.0")],_w=(e,t,n)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===cs){if(t.length===1&&t[0].semver===cs)return!0;n.includePrerelease?e=ww:e=Go}if(t.length===1&&t[0].semver===cs){if(n.includePrerelease)return!0;t=Go}const a=new Set;let s,i;for(const h of e)h.operator===">"||h.operator===">="?s=Ko(s,h,n):h.operator==="<"||h.operator==="<="?i=Wo(i,h,n):a.add(h.semver);if(a.size>1)return null;let r;if(s&&i){if(r=lr(s.semver,i.semver,n),r>0)return null;if(r===0&&(s.operator!==">="||i.operator!=="<="))return null}for(const h of a){if(s&&!Yt(h,String(s),n)||i&&!Yt(h,String(i),n))return null;for(const m of t)if(!Yt(h,String(m),n))return!1;return!0}let c,l,o,u,p=i&&!n.includePrerelease&&i.semver.prerelease.length?i.semver:!1,f=s&&!n.includePrerelease&&s.semver.prerelease.length?s.semver:!1;p&&p.prerelease.length===1&&i.operator==="<"&&p.prerelease[0]===0&&(p=!1);for(const h of t){if(u=u||h.operator===">"||h.operator===">=",o=o||h.operator==="<"||h.operator==="<=",s){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(c=Ko(s,h,n),c===h&&c!==s)return!1}else if(s.operator===">="&&!Yt(s.semver,String(h),n))return!1}if(i){if(p&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===p.major&&h.semver.minor===p.minor&&h.semver.patch===p.patch&&(p=!1),h.operator==="<"||h.operator==="<="){if(l=Wo(i,h,n),l===h&&l!==i)return!1}else if(i.operator==="<="&&!Yt(i.semver,String(h),n))return!1}if(!h.operator&&(i||s)&&r!==0)return!1}return!(s&&o&&!i&&r!==0||i&&u&&!s&&r!==0||f||p)},Ko=(e,t,n)=>{if(!e)return t;const a=lr(e.semver,t.semver,n);return a>0?e:a<0||t.operator===">"&&e.operator===">="?t:e},Wo=(e,t,n)=>{if(!e)return t;const a=lr(e.semver,t.semver,n);return a<0?e:a>0||t.operator==="<"&&e.operator==="<="?t:e};var Ew=$w;const ls=vn,Xo=ba,Sw=Ee,Jo=eu,Rw=Vt,kw=A0,jw=L0,Tw=F0,Ow=q0,Pw=B0,Nw=G0,Aw=X0,Cw=Z0,Iw=Fe,Lw=n$,Dw=i$,Fw=ar,zw=l$,qw=d$,Mw=wa,Uw=sr,Bw=tu,Vw=nu,Hw=ir,Gw=rr,Kw=au,Ww=I$,Xw=_a(),Jw=ze(),Yw=Ea,Zw=U$,Qw=G$,e_=J$,t_=Q$,n_=nw,a_=or,s_=dw,i_=hw,r_=xw,o_=bw,c_=Ew;var l_={parse:Rw,valid:kw,clean:jw,inc:Tw,diff:Ow,major:Pw,minor:Nw,patch:Aw,prerelease:Cw,compare:Iw,rcompare:Lw,compareLoose:Dw,compareBuild:Fw,sort:zw,rsort:qw,gt:Mw,lt:Uw,eq:Bw,neq:Vw,gte:Hw,lte:Gw,cmp:Kw,coerce:Ww,Comparator:Xw,Range:Jw,satisfies:Yw,toComparators:Zw,maxSatisfying:Qw,minSatisfying:e_,minVersion:t_,validRange:n_,outside:a_,gtr:s_,ltr:i_,intersects:r_,simplifyRange:o_,subset:c_,SemVer:Sw,re:ls.re,src:ls.src,tokens:ls.t,SEMVER_SPEC_VERSION:Xo.SEMVER_SPEC_VERSION,RELEASE_TYPES:Xo.RELEASE_TYPES,compareIdentifiers:Jo.compareIdentifiers,rcompareIdentifiers:Jo.rcompareIdentifiers};const kt=aa(l_),u_=Object.prototype.toString,p_="[object Uint8Array]",d_="[object ArrayBuffer]";function iu(e,t,n){return e?e.constructor===t?!0:u_.call(e)===n:!1}function ru(e){return iu(e,Uint8Array,p_)}function m_(e){return iu(e,ArrayBuffer,d_)}function f_(e){return ru(e)||m_(e)}function h_(e){if(!ru(e))throw new TypeError(`Expected \`Uint8Array\`, got \`${typeof e}\``)}function v_(e){if(!f_(e))throw new TypeError(`Expected \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof e}\``)}function Yo(e,t){if(e.length===0)return new Uint8Array(0);t??=e.reduce((s,i)=>s+i.length,0);const n=new Uint8Array(t);let a=0;for(const s of e)h_(s),n.set(s,a),a+=s.length;return n}const Zo={utf8:new globalThis.TextDecoder("utf8")};function Qo(e,t="utf8"){return v_(e),Zo[t]??=new globalThis.TextDecoder(t),Zo[t].decode(e)}function x_(e){if(typeof e!="string")throw new TypeError(`Expected \`string\`, got \`${typeof e}\``)}const g_=new globalThis.TextEncoder;function us(e){return x_(e),g_.encode(e)}Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));const y_=l0.default,ec="aes-256-cbc",jt=()=>Object.create(null),b_=e=>e!=null,$_=(e,t)=>{const n=new Set(["undefined","symbol","function"]),a=typeof t;if(n.has(a))throw new TypeError(`Setting a value of type \`${a}\` for key \`${e}\` is not allowed as it's not supported by JSON`)},zn="__internal__",ps=`${zn}.migrations.version`;class w_{path;events;#a;#t;#e;#n={};constructor(t={}){const n={configName:"config",fileExtension:"json",projectSuffix:"nodejs",clearInvalidConfig:!1,accessPropertiesByDotNotation:!0,configFileMode:438,...t};if(!n.cwd){if(!n.projectName)throw new Error("Please specify the `projectName` option.");n.cwd=Mm(n.projectName,{suffix:n.projectSuffix}).config}if(this.#e=n,n.schema){if(typeof n.schema!="object")throw new TypeError("The `schema` option must be an object.");const r=new Wb.Ajv2020({allErrors:!0,useDefaults:!0});y_(r);const c={type:"object",properties:n.schema};this.#a=r.compile(c);for(const[l,o]of Object.entries(n.schema))o?.default&&(this.#n[l]=o.default)}n.defaults&&(this.#n={...this.#n,...n.defaults}),n.serialize&&(this._serialize=n.serialize),n.deserialize&&(this._deserialize=n.deserialize),this.events=new EventTarget,this.#t=n.encryptionKey;const a=n.fileExtension?`.${n.fileExtension}`:"";this.path=Y.resolve(n.cwd,`${n.configName??"config"}${a}`);const s=this.store,i=Object.assign(jt(),n.defaults,s);if(n.migrations){if(!n.projectVersion)throw new Error("Please specify the `projectVersion` option.");this._migrate(n.migrations,n.projectVersion,n.beforeEachMigration)}this._validate(i);try{yu.deepEqual(s,i)}catch{this.store=i}n.watch&&this._watch()}get(t,n){if(this.#e.accessPropertiesByDotNotation)return this._get(t,n);const{store:a}=this;return t in a?a[t]:n}set(t,n){if(typeof t!="string"&&typeof t!="object")throw new TypeError(`Expected \`key\` to be of type \`string\` or \`object\`, got ${typeof t}`);if(typeof t!="object"&&n===void 0)throw new TypeError("Use `delete()` to clear values");if(this._containsReservedKey(t))throw new TypeError(`Please don't use the ${zn} key, as it's used to manage this module internal operations.`);const{store:a}=this,s=(i,r)=>{$_(i,r),this.#e.accessPropertiesByDotNotation?Gr(a,i,r):a[i]=r};if(typeof t=="object"){const i=t;for(const[r,c]of Object.entries(i))s(r,c)}else s(t,n);this.store=a}has(t){return this.#e.accessPropertiesByDotNotation?Dm(this.store,t):t in this.store}reset(...t){for(const n of t)b_(this.#n[n])&&this.set(n,this.#n[n])}delete(t){const{store:n}=this;this.#e.accessPropertiesByDotNotation?Lm(n,t):delete n[t],this.store=n}clear(){this.store=jt();for(const t of Object.keys(this.#n))this.reset(t)}onDidChange(t,n){if(typeof t!="string")throw new TypeError(`Expected \`key\` to be of type \`string\`, got ${typeof t}`);if(typeof n!="function")throw new TypeError(`Expected \`callback\` to be of type \`function\`, got ${typeof n}`);return this._handleChange(()=>this.get(t),n)}onDidAnyChange(t){if(typeof t!="function")throw new TypeError(`Expected \`callback\` to be of type \`function\`, got ${typeof t}`);return this._handleChange(()=>this.store,t)}get size(){return Object.keys(this.store).length}get store(){try{const t=U.readFileSync(this.path,this.#t?null:"utf8"),n=this._encryptData(t),a=this._deserialize(n);return this._validate(a),Object.assign(jt(),a)}catch(t){if(t?.code==="ENOENT")return this._ensureDirectory(),jt();if(this.#e.clearInvalidConfig&&t.name==="SyntaxError")return jt();throw t}}set store(t){this._ensureDirectory(),this._validate(t),this._write(t),this.events.dispatchEvent(new Event("change"))}*[Symbol.iterator](){for(const[t,n]of Object.entries(this.store))yield[t,n]}_encryptData(t){if(!this.#t)return typeof t=="string"?t:Qo(t);try{const n=t.slice(0,16),a=Gt.pbkdf2Sync(this.#t,n.toString(),1e4,32,"sha512"),s=Gt.createDecipheriv(ec,a,n),i=t.slice(17),r=typeof i=="string"?us(i):i;return Qo(Yo([s.update(r),s.final()]))}catch{}return t.toString()}_handleChange(t,n){let a=t();const s=()=>{const i=a,r=t();he.isDeepStrictEqual(r,i)||(a=r,n.call(this,r,i))};return this.events.addEventListener("change",s),()=>{this.events.removeEventListener("change",s)}}_deserialize=t=>JSON.parse(t);_serialize=t=>JSON.stringify(t,void 0," ");_validate(t){if(!this.#a||this.#a(t)||!this.#a.errors)return;const a=this.#a.errors.map(({instancePath:s,message:i=""})=>`\`${s.slice(1)}\` ${i}`);throw new Error("Config schema violation: "+a.join("; "))}_ensureDirectory(){U.mkdirSync(Y.dirname(this.path),{recursive:!0})}_write(t){let n=this._serialize(t);if(this.#t){const a=Gt.randomBytes(16),s=Gt.pbkdf2Sync(this.#t,a.toString(),1e4,32,"sha512"),i=Gt.createCipheriv(ec,s,a);n=Yo([a,us(":"),i.update(us(n)),i.final()])}if(ue.env.SNAP)U.writeFileSync(this.path,n,{mode:this.#e.configFileMode});else try{Qc(this.path,n,{mode:this.#e.configFileMode})}catch(a){if(a?.code==="EXDEV"){U.writeFileSync(this.path,n,{mode:this.#e.configFileMode});return}throw a}}_watch(){this._ensureDirectory(),U.existsSync(this.path)||this._write(jt()),ue.platform==="win32"?U.watch(this.path,{persistent:!1},To(()=>{this.events.dispatchEvent(new Event("change"))},{wait:100})):U.watchFile(this.path,{persistent:!1},To(()=>{this.events.dispatchEvent(new Event("change"))},{wait:5e3}))}_migrate(t,n,a){let s=this._get(ps,"0.0.0");const i=Object.keys(t).filter(c=>this._shouldPerformMigration(c,s,n));let r={...this.store};for(const c of i)try{a&&a(this,{fromVersion:s,toVersion:c,finalVersion:n,versions:i});const l=t[c];l?.(this),this._set(ps,c),s=c,r={...this.store}}catch(l){throw this.store=r,new Error(`Something went wrong during the migration! Changes applied to the store until this failed migration will be restored. ${l}`)}(this._isVersionInRangeFormat(s)||!kt.eq(s,n))&&this._set(ps,n)}_containsReservedKey(t){return typeof t=="object"&&Object.keys(t)[0]===zn?!0:typeof t!="string"?!1:this.#e.accessPropertiesByDotNotation?!!t.startsWith(`${zn}.`):!1}_isVersionInRangeFormat(t){return kt.clean(t)===null}_shouldPerformMigration(t,n,a){return this._isVersionInRangeFormat(t)?n!=="0.0.0"&&kt.satisfies(n,t)?!1:kt.satisfies(a,t):!(kt.lte(t,n)||kt.gt(t,a))}_get(t,n){return Im(this.store,t,n)}_set(t,n){const{store:a}=this;Gr(a,t,n),this.store=a}}let tc=!1;const nc=()=>{if(!H.ipcMain||!H.app)throw new Error("Electron Store: You need to call `.initRenderer()` from the main process.");const e={defaultCwd:H.app.getPath("userData"),appVersion:H.app.getVersion()};return tc||(H.ipcMain.on("electron-store-get-data",t=>{t.returnValue=e}),tc=!0),e};class __ extends w_{constructor(t){let n,a;if(ue.type==="renderer"){const s=H.ipcRenderer.sendSync("electron-store-get-data");if(!s)throw new Error("Electron Store: You need to call `.initRenderer()` from the main process.");({defaultCwd:n,appVersion:a}=s)}else H.ipcMain&&H.app&&({defaultCwd:n,appVersion:a}=nc());t={name:"config",...t},t.projectVersion||=a,t.cwd?t.cwd=Y.isAbsolute(t.cwd)?t.cwd:Y.join(n,t.cwd):t.cwd=n,t.configName=t.name,delete t.name,super(t)}static initRenderer(){nc()}async openInEditor(){const t=await H.shell.openPath(this.path);if(t)throw new Error(t)}}const ur="tokenType",pr="accessToken",E_={tokenType:{type:"string"},accessToken:{type:"string"}},dr=new __({name:"authentication-xwiki-main",schema:E_});function ou(e,t){dr.set(e,t)}function cu(e){return dr.get(e)}function lu(e){dr.delete(e)}function S_(e){ou(ur,e)}function R_(e){ou(pr,e)}function uu(){return cu(ur)}function pu(){return cu(pr)}function k_(){lu(ur)}function j_(){lu(pr)}const mr="http://callback/",du="abcd";async function T_(e,t){const n=`${t}/oidc/token`,a={grant_type:"authorization_code",code:e,redirect_uri:mr,client_id:du};return le.post(n,a,{url:n,headers:{"Content-Type":"application/x-www-form-urlencoded"}})}function O_(e,t,n){e.webContents.session.webRequest.onBeforeRequest({urls:[`${mr}*`]},async({url:a},s)=>{if(a.startsWith(n))s({cancel:!1});else{const i=new URL(a),r=await T_(i.searchParams.get("code"),n);S_(r.data.token_type),R_(r.data.access_token),Xn.show(),t(Xn),e?.close()}})}async function P_(e){const t=new H.BrowserWindow({width:800,height:600,webPreferences:{nodeIntegration:!1}});return await t.loadURL(e),t}let ac,Xn;function sc(){return`${uu()} ${pu()}`}function N_(e,t){H.ipcMain.handle("authentication:xwiki:login",async(n,{oidcUrl:a})=>{const s=new URL(`${a}/oidc/authorization`);s.searchParams.set("response_type","code"),s.searchParams.set("client_id",du),s.searchParams.set("redirect_uri",mr),Xn=e,ac=await P_(s.toString()),O_(ac,t,a),Xn.hide()}),H.ipcMain.handle("authentication:xwiki:isLoggedIn",()=>{const n=uu(),a=pu();return n&&a}),H.ipcMain.handle("authentication:xwiki:userDetails",async(n,{baseURL:a})=>{const s=`${a}/oidc/userinfo`,i={headers:{Authorization:sc()}},{data:{profile:r,name:c}}=await le.get(s,i);return{profile:r,name:c}}),H.ipcMain.handle("authentication:xwiki:authorizationValue",()=>sc()),H.ipcMain.handle("authentication:xwiki:logout",()=>{j_(),k_()})}const A_=H.app.requestSingleInstanceLock();A_||(H.app.quit(),process.exit(0));H.app.on("second-instance",ds);H.app.disableHardwareAcceleration();H.app.on("window-all-closed",()=>{ue.platform!=="darwin"&&H.app.quit()});H.app.whenReady().then(()=>{Pu(),ds().then(e=>{Au(e),N_(e,rc)}),H.app.on("activate",()=>{H.BrowserWindow.getAllWindows().length===0&&ds()})}).catch(e=>console.error("Failed create window:",e));H.app.whenReady().then(()=>require("electron-updater").autoUpdater.checkForUpdatesAndNotify()).catch(e=>console.error("Failed check and install updates:",e));
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9zcmMvc2VjdXJpdHktcmVzdHJpY3Rpb25zLnRzIiwiLi4vc3JjL3JlbG9hZC50cyIsIi4uL3NyYy9tYWluV2luZG93LnRzIiwiLi4vLi4vc3RvcmFnZS9zcmMvZWxlY3Ryb24vbWFpbi9pbmRleC50cyIsIi4uLy4uL2Jyb3dzZXIvc3JjL2VsZWN0cm9uL21haW4vaW5kZXgudHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9kZWxheWVkLXN0cmVhbUAxLjAuMC9ub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbWJpbmVkLXN0cmVhbUAxLjAuOC9ub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtL2xpYi9jb21iaW5lZF9zdHJlYW0uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vbWltZS1kYkAxLjUyLjAvbm9kZV9tb2R1bGVzL21pbWUtZGIvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vbWltZS10eXBlc0AyLjEuMzUvbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXN5bmNraXRAMC40LjAvbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9kZWZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc3luY2tpdEAwLjQuMC9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2FzeW5jLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzeW5ja2l0QDAuNC4wL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXN5bmNraXRAMC40LjAvbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9pdGVyYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzeW5ja2l0QDAuNC4wL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXN5bmNraXRAMC40LjAvbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzeW5ja2l0QDAuNC4wL25vZGVfbW9kdWxlcy9hc3luY2tpdC9wYXJhbGxlbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc3luY2tpdEAwLjQuMC9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc3luY2tpdEAwLjQuMC9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzeW5ja2l0QDAuNC4wL25vZGVfbW9kdWxlcy9hc3luY2tpdC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9mb3JtLWRhdGFANC4wLjAvbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZm9ybS1kYXRhQDQuMC4wL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Zvcm1fZGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3h5LWZyb20tZW52QDEuMS4wL25vZGVfbW9kdWxlcy9wcm94eS1mcm9tLWVudi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9tc0AyLjEuMi9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZGVidWdANC4zLjRfc3VwcG9ydHMtY29sb3JANS41LjAvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZGVidWdANC4zLjRfc3VwcG9ydHMtY29sb3JANS41LjAvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2hhcy1mbGFnQDMuMC4wL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdXBwb3J0cy1jb2xvckA1LjUuMC9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZGVidWdANC4zLjRfc3VwcG9ydHMtY29sb3JANS41LjAvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RlYnVnQDQuMy40X3N1cHBvcnRzLWNvbG9yQDUuNS4wL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZm9sbG93LXJlZGlyZWN0c0AxLjE1Ljkvbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvZGVidWcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZm9sbG93LXJlZGlyZWN0c0AxLjE1Ljkvbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZnJvbURhdGFVUkkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVHJhbnNmb3JtU3RyZWFtLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZWFkQmxvYi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb1N0cmVhbS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY2FsbGJhY2tpZnkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90aHJvdHRsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9odHRwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYXhpb3NAMS43Ljcvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F4aW9zQDEuNy43L25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9heGlvc0AxLjcuNy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RvdC1wcm9wQDkuMC4wL25vZGVfbW9kdWxlcy9kb3QtcHJvcC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9lbnYtcGF0aHNAMy4wLjAvbm9kZV9tb2R1bGVzL2Vudi1wYXRocy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHViYm9ybi1mc0AxLjIuNS9ub2RlX21vZHVsZXMvc3R1YmJvcm4tZnMvZGlzdC9hdHRlbXB0aWZ5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0dWJib3JuLWZzQDEuMi41L25vZGVfbW9kdWxlcy9zdHViYm9ybi1mcy9kaXN0L2NvbnN0YW50cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHViYm9ybi1mc0AxLjIuNS9ub2RlX21vZHVsZXMvc3R1YmJvcm4tZnMvZGlzdC9oYW5kbGVycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHViYm9ybi1mc0AxLjIuNS9ub2RlX21vZHVsZXMvc3R1YmJvcm4tZnMvZGlzdC9yZXRyeWlmeV9xdWV1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHViYm9ybi1mc0AxLjIuNS9ub2RlX21vZHVsZXMvc3R1YmJvcm4tZnMvZGlzdC9yZXRyeWlmeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHViYm9ybi1mc0AxLjIuNS9ub2RlX21vZHVsZXMvc3R1YmJvcm4tZnMvZGlzdC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hdG9taWNhbGx5QDIuMC4zL25vZGVfbW9kdWxlcy9hdG9taWNhbGx5L2Rpc3QvY29uc3RhbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2F0b21pY2FsbHlAMi4wLjMvbm9kZV9tb2R1bGVzL2F0b21pY2FsbHkvZGlzdC91dGlscy9sYW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3doZW4tZXhpdEAyLjEuMy9ub2RlX21vZHVsZXMvd2hlbi1leGl0L2Rpc3Qvbm9kZS9jb25zdGFudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vd2hlbi1leGl0QDIuMS4zL25vZGVfbW9kdWxlcy93aGVuLWV4aXQvZGlzdC9ub2RlL3NpZ25hbHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vd2hlbi1leGl0QDIuMS4zL25vZGVfbW9kdWxlcy93aGVuLWV4aXQvZGlzdC9ub2RlL2ludGVyY2VwdG9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3doZW4tZXhpdEAyLjEuMy9ub2RlX21vZHVsZXMvd2hlbi1leGl0L2Rpc3Qvbm9kZS9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hdG9taWNhbGx5QDIuMC4zL25vZGVfbW9kdWxlcy9hdG9taWNhbGx5L2Rpc3QvdXRpbHMvdGVtcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hdG9taWNhbGx5QDIuMC4zL25vZGVfbW9kdWxlcy9hdG9taWNhbGx5L2Rpc3QvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL2NvZGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL3Njb3BlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3V0aWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9uYW1lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2Vycm9ycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2Jvb2xTY2hlbWEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9ydWxlcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9kYXRhVHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RlZmF1bHRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb2RlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUva2V5d29yZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL3N1YnNjaGVtYS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LWRlZXAtZXF1YWxAMy4xLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9qc29uLXNjaGVtYS10cmF2ZXJzZUAxLjAuMC9ub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9yZXNvbHZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS92YWxpZGF0aW9uX2Vycm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvcmVmX2Vycm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC11cmlAMy4wLjIvbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2xpYi9zY29wZWRDaGFycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXVyaUAzLjAuMi9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3V0aWxzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtdXJpQDMuMC4yL25vZGVfbW9kdWxlcy9mYXN0LXVyaS9saWIvc2NoZW1lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXVyaUAzLjAuMi9ub2RlX21vZHVsZXMvZmFzdC11cmkvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS91cmkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29yZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9yZWYuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXROdW1iZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbXVsdGlwbGVPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRMZW5ndGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vcGF0dGVybi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdFByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vcmVxdWlyZWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRJdGVtcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL2VxdWFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3VuaXF1ZUl0ZW1zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2NvbnN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2VudW0uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYWRkaXRpb25hbEl0ZW1zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3ByZWZpeEl0ZW1zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zMjAyMC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9jb250YWlucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9kZXBlbmRlbmNpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydHlOYW1lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3BhdHRlcm5Qcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL25vdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbnlPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9vbmVPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbGxPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZHluYW1pYy9keW5hbWljQW5jaG9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9keW5hbWljL2R5bmFtaWNSZWYuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2R5bmFtaWMvcmVjdXJzaXZlQW5jaG9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9keW5hbWljL3JlY3Vyc2l2ZVJlZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZHluYW1pYy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9kZXBlbmRlbnRSZXF1aXJlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9kZXBlbmRlbnRTY2hlbWFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE3LjEvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0Q29udGFpbnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL25leHQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3VuZXZhbHVhdGVkL3VuZXZhbHVhdGVkUHJvcGVydGllcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdW5ldmFsdWF0ZWQvdW5ldmFsdWF0ZWRJdGVtcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdW5ldmFsdWF0ZWQvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvbWV0YWRhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0MjAyMC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvci90eXBlcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvci9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9yZWZzL2pzb24tc2NoZW1hLTIwMjAtMTIvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvMjAyMC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanYtZm9ybWF0c0AzLjAuMV9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9kaXN0L2Zvcm1hdHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYWp2LWZvcm1hdHNAMy4wLjFfYWp2QDguMTcuMS9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvZGlzdC9saW1pdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hanYtZm9ybWF0c0AzLjAuMV9hanZAOC4xNy4xL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9kaXN0L2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbWljLWZ1bmN0aW9uQDUuMC4xL25vZGVfbW9kdWxlcy9taW1pYy1mdW5jdGlvbi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9kZWJvdW5jZS1mbkA2LjAuMC9ub2RlX21vZHVsZXMvZGVib3VuY2UtZm4vaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvY29uc3RhbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL3JlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL3BhcnNlLW9wdGlvbnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvaWRlbnRpZmllcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9zZW12ZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3BhcnNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy92YWxpZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY2xlYW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2luYy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZGlmZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbWFqb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL21pbm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXRjaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcHJlcmVsZWFzZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcmNvbXBhcmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvbXBhcmUtbG9vc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvbXBhcmUtYnVpbGQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NvcnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3Jzb3J0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9ndC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9uZXEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jbXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvZXJjZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9scnVjYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9jbGFzc2VzL3JhbmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvY29tcGFyYXRvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvc2F0aXNmaWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy90by1jb21wYXJhdG9ycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWF4LXNhdGlzZnlpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL21pbi1zYXRpc2Z5aW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9taW4tdmVyc2lvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdmFsaWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL291dHNpZGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4zL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL2d0ci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbHRyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9pbnRlcnNlY3RzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9zaW1wbGlmeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc3Vic2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VpbnQ4YXJyYXktZXh0cmFzQDEuNC4wL25vZGVfbW9kdWxlcy91aW50OGFycmF5LWV4dHJhcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb25mQDEzLjAuMS9ub2RlX21vZHVsZXMvY29uZi9kaXN0L3NvdXJjZS9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9lbGVjdHJvbi1zdG9yZUAxMC4wLjAvbm9kZV9tb2R1bGVzL2VsZWN0cm9uLXN0b3JlL2luZGV4LmpzIiwiLi4vLi4vYXV0aGVudGljYXRpb24vYXV0aGVudGljYXRpb24teHdpa2kvYXV0aGVudGljYXRpb24teHdpa2ktbWFpbi9zcmMvc3RvcmFnZS50cyIsIi4uLy4uL2F1dGhlbnRpY2F0aW9uL2F1dGhlbnRpY2F0aW9uLXh3aWtpL2F1dGhlbnRpY2F0aW9uLXh3aWtpLW1haW4vc3JjL2luZGV4LnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFwcCwgc2hlbGwgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG4vKipcbiAqIFVuaW9uIGZvciBhbGwgZXhpc3RpbmcgcGVybWlzc2lvbnMgaW4gZWxlY3Ryb25cbiAqL1xudHlwZSBQZXJtaXNzaW9uID0gUGFyYW1ldGVyczxcbiAgRXhjbHVkZTxQYXJhbWV0ZXJzPFNlc3Npb25bXCJzZXRQZXJtaXNzaW9uUmVxdWVzdEhhbmRsZXJcIl0+WzBdLCBudWxsPlxuPlsxXTtcblxuLyoqXG4gKiBBIGxpc3Qgb2Ygb3JpZ2lucyB0aGF0IHlvdSBhbGxvdyBvcGVuIElOU0lERSB0aGUgYXBwbGljYXRpb24gYW5kIHBlcm1pc3Npb25zIGZvciB0aGVtLlxuICpcbiAqIEluIGRldmVsb3BtZW50IG1vZGUgeW91IG5lZWQgYWxsb3cgb3BlbiBgVklURV9ERVZfU0VSVkVSX1VSTGAuXG4gKi9cbmNvbnN0IEFMTE9XRURfT1JJR0lOU19BTkRfUEVSTUlTU0lPTlM6IE1hcDxzdHJpbmcsIFNldDxQZXJtaXNzaW9uPj4gPSBuZXcgTWFwPFxuICBzdHJpbmcsXG4gIFNldDxQZXJtaXNzaW9uPlxuPihcbiAgaW1wb3J0Lm1ldGEuZW52LkRFViAmJiBpbXBvcnQubWV0YS5lbnYuVklURV9ERVZfU0VSVkVSX1VSTFxuICAgID8gW1tuZXcgVVJMKGltcG9ydC5tZXRhLmVudi5WSVRFX0RFVl9TRVJWRVJfVVJMKS5vcmlnaW4sIG5ldyBTZXQoKV1dXG4gICAgOiBbXSxcbik7XG4vLyBUT0RPOiBDUklTVEFMLTI1MyByZXBsYWNlIHRoaXMgaGFyZGNvZGVkIG1hcHBpbmcgd2l0aCBsaXN0IG9mIHZhbHVlcyBkcmF3blxuLy8gZnJvbSB0aGUgY29uZmlndXJhdGlvbi5cbkFMTE9XRURfT1JJR0lOU19BTkRfUEVSTUlTU0lPTlMuc2V0KFwiaHR0cDovL2xvY2FsaG9zdDoxNTY4MFwiLCBuZXcgU2V0KCkpO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBvcmlnaW5zIHRoYXQgeW91IGFsbG93IG9wZW4gSU4gQlJPV1NFUi5cbiAqIE5hdmlnYXRpb24gdG8gdGhlIG9yaWdpbnMgYmVsb3cgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgbGluayBvcGVucyBpbiBhIG5ldyB3aW5kb3cuXG4gKlxuICogQGV4YW1wbGVcbiAqIDxhXG4gKiAgIHRhcmdldD1cIl9ibGFua1wiXG4gKiAgIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vXCJcbiAqID5cbiAqL1xuY29uc3QgQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TID0gbmV3IFNldDxgaHR0cHM6Ly8ke3N0cmluZ31gPihbXG4gIFwiaHR0cHM6Ly9naXRodWIuY29tXCIsXG5dKTtcblxuYXBwLm9uKFwid2ViLWNvbnRlbnRzLWNyZWF0ZWRcIiwgKF8sIGNvbnRlbnRzKSA9PiB7XG4gIC8qKlxuICAgKiBCbG9jayBuYXZpZ2F0aW9uIHRvIG9yaWdpbnMgbm90IG9uIHRoZSBhbGxvd2xpc3QuXG4gICAqXG4gICAqIE5hdmlnYXRpb24gZXhwbG9pdHMgYXJlIHF1aXRlIGNvbW1vbi4gSWYgYW4gYXR0YWNrZXIgY2FuIGNvbnZpbmNlIHRoZSBhcHAgdG8gbmF2aWdhdGUgYXdheSBmcm9tIGl0cyBjdXJyZW50IHBhZ2UsXG4gICAqIHRoZXkgY2FuIHBvc3NpYmx5IGZvcmNlIHRoZSBhcHAgdG8gb3BlbiBhcmJpdHJhcnkgd2ViIHJlc291cmNlcy93ZWJzaXRlcyBvbiB0aGUgd2ViLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L3R1dG9yaWFsL3NlY3VyaXR5IzEzLWRpc2FibGUtb3ItbGltaXQtbmF2aWdhdGlvblxuICAgKi9cbiAgY29udGVudHMub24oXCJ3aWxsLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XG4gICAgY29uc3QgeyBvcmlnaW4gfSA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAoQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUy5oYXMob3JpZ2luKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgbmF2aWdhdGlvblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKGBCbG9ja2VkIG5hdmlnYXRpbmcgdG8gZGlzYWxsb3dlZCBvcmlnaW46ICR7b3JpZ2lufWApO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEJsb2NrIHJlcXVlc3RzIGZvciBkaXNhbGxvd2VkIHBlcm1pc3Npb25zLlxuICAgKiBCeSBkZWZhdWx0LCBFbGVjdHJvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwcm92ZSBhbGwgcGVybWlzc2lvbiByZXF1ZXN0cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSM1LWhhbmRsZS1zZXNzaW9uLXBlcm1pc3Npb24tcmVxdWVzdHMtZnJvbS1yZW1vdGUtY29udGVudFxuICAgKi9cbiAgY29udGVudHMuc2Vzc2lvbi5zZXRQZXJtaXNzaW9uUmVxdWVzdEhhbmRsZXIoXG4gICAgKHdlYkNvbnRlbnRzLCBwZXJtaXNzaW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgeyBvcmlnaW4gfSA9IG5ldyBVUkwod2ViQ29udGVudHMuZ2V0VVJMKCkpO1xuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uR3JhbnRlZCA9XG4gICAgICAgICEhQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUy5nZXQob3JpZ2luKT8uaGFzKHBlcm1pc3Npb24pO1xuICAgICAgY2FsbGJhY2socGVybWlzc2lvbkdyYW50ZWQpO1xuXG4gICAgICBpZiAoIXBlcm1pc3Npb25HcmFudGVkICYmIGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGAke29yaWdpbn0gcmVxdWVzdGVkIHBlcm1pc3Npb24gZm9yICcke3Blcm1pc3Npb259JywgYnV0IHdhcyByZWplY3RlZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIEh5cGVybGlua3MgbGVhZGluZyB0byBhbGxvd2VkIHNpdGVzIGFyZSBvcGVuZWQgaW4gdGhlIGRlZmF1bHQgYnJvd3Nlci5cbiAgICpcbiAgICogVGhlIGNyZWF0aW9uIG9mIG5ldyBgd2ViQ29udGVudHNgIGlzIGEgY29tbW9uIGF0dGFjayB2ZWN0b3IuIEF0dGFja2VycyBhdHRlbXB0IHRvIGNvbnZpbmNlIHRoZSBhcHAgdG8gY3JlYXRlIG5ldyB3aW5kb3dzLFxuICAgKiBmcmFtZXMsIG9yIG90aGVyIHJlbmRlcmVyIHByb2Nlc3NlcyB3aXRoIG1vcmUgcHJpdmlsZWdlcyB0aGFuIHRoZXkgaGFkIGJlZm9yZTsgb3Igd2l0aCBwYWdlcyBvcGVuZWQgdGhhdCB0aGV5IGNvdWxkbid0IG9wZW4gYmVmb3JlLlxuICAgKiBZb3Ugc2hvdWxkIGRlbnkgYW55IHVuZXhwZWN0ZWQgd2luZG93IGNyZWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L3R1dG9yaWFsL3NlY3VyaXR5IzE0LWRpc2FibGUtb3ItbGltaXQtY3JlYXRpb24tb2YtbmV3LXdpbmRvd3NcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSMxNS1kby1ub3QtdXNlLW9wZW5leHRlcm5hbC13aXRoLXVudHJ1c3RlZC1jb250ZW50XG4gICAqL1xuICBjb250ZW50cy5zZXRXaW5kb3dPcGVuSGFuZGxlcigoeyB1cmwgfSkgPT4ge1xuICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBuZXcgVVJMKHVybCk7XG5cbiAgICBpZiAoQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TLmhhcyhvcmlnaW4gYXMgYGh0dHBzOi8vJHtzdHJpbmd9YCkpIHtcbiAgICAgIC8vIE9wZW4gdXJsIGluIGRlZmF1bHQgYnJvd3Nlci5cbiAgICAgIHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKGBCbG9ja2VkIHRoZSBvcGVuaW5nIG9mIGEgZGlzYWxsb3dlZCBvcmlnaW46ICR7b3JpZ2lufWApO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgY3JlYXRpbmcgYSBuZXcgd2luZG93LlxuICAgIHJldHVybiB7IGFjdGlvbjogXCJkZW55XCIgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB3ZWJ2aWV3IG9wdGlvbnMgYmVmb3JlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBTdHJpcCBhd2F5IHByZWxvYWQgc2NyaXB0cywgZGlzYWJsZSBOb2RlLmpzIGludGVncmF0aW9uLCBhbmQgZW5zdXJlIG9yaWdpbnMgYXJlIG9uIHRoZSBhbGxvd2xpc3QuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvdHV0b3JpYWwvc2VjdXJpdHkjMTItdmVyaWZ5LXdlYnZpZXctb3B0aW9ucy1iZWZvcmUtY3JlYXRpb25cbiAgICovXG4gIGNvbnRlbnRzLm9uKFwid2lsbC1hdHRhY2gtd2Vidmlld1wiLCAoZXZlbnQsIHdlYlByZWZlcmVuY2VzLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gbmV3IFVSTChwYXJhbXMuc3JjKTtcbiAgICBpZiAoIUFMTE9XRURfT1JJR0lOU19BTkRfUEVSTUlTU0lPTlMuaGFzKG9yaWdpbikpIHtcbiAgICAgIGlmIChpbXBvcnQubWV0YS5lbnYuREVWKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQSB3ZWJ2aWV3IHRyaWVkIHRvIGF0dGFjaCAke3BhcmFtcy5zcmN9LCBidXQgd2FzIGJsb2NrZWQuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBhd2F5IHByZWxvYWQgc2NyaXB0cyBpZiB1bnVzZWQgb3IgdmVyaWZ5IHRoZWlyIGxvY2F0aW9uIGlzIGxlZ2l0aW1hdGUuXG4gICAgZGVsZXRlIHdlYlByZWZlcmVuY2VzLnByZWxvYWQ7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgcHJlbG9hZFVSTGAgZXhpc3RzLiAtIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL3dlYi1jb250ZW50cyNldmVudC13aWxsLWF0dGFjaC13ZWJ2aWV3XG4gICAgZGVsZXRlIHdlYlByZWZlcmVuY2VzLnByZWxvYWRVUkw7XG5cbiAgICAvLyBEaXNhYmxlIE5vZGUuanMgaW50ZWdyYXRpb25cbiAgICB3ZWJQcmVmZXJlbmNlcy5ub2RlSW50ZWdyYXRpb24gPSBmYWxzZTtcblxuICAgIC8vIEVuYWJsZSBjb250ZXh0SXNvbGF0aW9uXG4gICAgd2ViUHJlZmVyZW5jZXMuY29udGV4dElzb2xhdGlvbiA9IHRydWU7XG4gIH0pO1xufSk7XG4iLCIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHsgYXBwLCBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5mdW5jdGlvbiBsb2FkRmlsZSh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIHdpbi5sb2FkRmlsZShyZXNvbHZlKGFwcC5nZXRBcHBQYXRoKCksIFwiLi9yZW5kZXJlci9kaXN0L2luZGV4Lmh0bWxcIikpO1xufVxuXG5leHBvcnQgeyBsb2FkRmlsZSB9O1xuIiwiLypcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC5cbiAqXG4gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mXG4gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVVxuICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BXG4gKiAwMjExMC0xMzAxIFVTQSwgb3Igc2VlIHRoZSBGU0Ygc2l0ZTogaHR0cDovL3d3dy5mc2Yub3JnLlxuICovXG5cbmltcG9ydCB7IGFwcCwgQnJvd3NlcldpbmRvdywgc2hlbGwgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBsb2FkRmlsZSB9IGZyb20gXCIuL3JlbG9hZFwiO1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXaW5kb3coKSB7XG4gIGNvbnN0IGJyb3dzZXJXaW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgc2hvdzogZmFsc2UsIC8vIFVzZSB0aGUgJ3JlYWR5LXRvLXNob3cnIGV2ZW50IHRvIHNob3cgdGhlIGluc3RhbnRpYXRlZCBCcm93c2VyV2luZG93LlxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogdHJ1ZSxcbiAgICAgIHNhbmRib3g6IGZhbHNlLCAvLyBTYW5kYm94IGRpc2FibGVkIGJlY2F1c2UgdGhlIGRlbW8gb2YgcHJlbG9hZCBzY3JpcHQgZGVwZW5kIG9uIHRoZSBOb2RlLmpzIGFwaVxuICAgICAgd2Vidmlld1RhZzogZmFsc2UsIC8vIFRoZSB3ZWJ2aWV3IHRhZyBpcyBub3QgcmVjb21tZW5kZWQuIENvbnNpZGVyIGFsdGVybmF0aXZlcyBsaWtlIGFuIGlmcmFtZSBvciBFbGVjdHJvbidzXG4gICAgICAvLyBCcm93c2VyVmlldy4gQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvd2Vidmlldy10YWcjd2FybmluZ1xuICAgICAgcHJlbG9hZDogam9pbihhcHAuZ2V0QXBwUGF0aCgpLCBcIi4vcHJlbG9hZC9kaXN0L2luZGV4LmNqc1wiKSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBVbmNvbW1lbnQgdG8gc3RhcnQgZWxlY3Ryb24gZGVidWdnZXIgYXQgc3RhcnR1cC5cbiAgLy8gYnJvd3NlcldpbmRvdy53ZWJDb250ZW50cy5vcGVuRGV2VG9vbHMoKTtcblxuICAvLyBBbGxvd3MgZm9yIGV4dGVybmFsIGxpbmtzIHRvIG9wZW4gaW4gdGhlIE9TIGJyb3dzZXIuLlxuICBicm93c2VyV2luZG93LndlYkNvbnRlbnRzLnNldFdpbmRvd09wZW5IYW5kbGVyKCh7IHVybCB9KSA9PiB7XG4gICAgc2hlbGwub3BlbkV4dGVybmFsKHVybCk7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImRlbnlcIiB9O1xuICB9KTtcblxuICAvKipcbiAgICogSWYgdGhlICdzaG93JyBwcm9wZXJ0eSBvZiB0aGUgQnJvd3NlcldpbmRvdydzIGNvbnN0cnVjdG9yIGlzIG9taXR0ZWQgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gb3B0aW9ucyxcbiAgICogaXQgdGhlbiBkZWZhdWx0cyB0byAndHJ1ZScuIFRoaXMgY2FuIGNhdXNlIGZsaWNrZXJpbmcgYXMgdGhlIHdpbmRvdyBsb2FkcyB0aGUgaHRtbCBjb250ZW50LFxuICAgKiBhbmQgaXQgYWxzbyBoYXMgc2hvdyBwcm9ibGVtYXRpYyBiZWhhdmlvdXIgd2l0aCB0aGUgY2xvc2luZyBvZiB0aGUgd2luZG93LlxuICAgKiBVc2UgYHNob3c6IGZhbHNlYCBhbmQgbGlzdGVuIHRvIHRoZSAgYHJlYWR5LXRvLXNob3dgIGV2ZW50IHRvIHNob3cgdGhlIHdpbmRvdy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzI1MDEyIGZvciB0aGUgYWZmb3JkIG1lbnRpb25lZCBpc3N1ZS5cbiAgICovXG4gIGJyb3dzZXJXaW5kb3cub24oXCJyZWFkeS10by1zaG93XCIsICgpID0+IHtcbiAgICBicm93c2VyV2luZG93Py5zaG93KCk7XG5cbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgYnJvd3NlcldpbmRvdz8ud2ViQ29udGVudHMub3BlbkRldlRvb2xzKCk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogTG9hZCB0aGUgbWFpbiBwYWdlIG9mIHRoZSBtYWluIHdpbmRvdy5cbiAgICovXG4gIGlmIChcbiAgICBpbXBvcnQubWV0YS5lbnYuREVWICYmXG4gICAgaW1wb3J0Lm1ldGEuZW52LlZJVEVfREVWX1NFUlZFUl9VUkwgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICAvKipcbiAgICAgKiBMb2FkIGZyb20gdGhlIFZpdGUgZGV2IHNlcnZlciBmb3IgZGV2ZWxvcG1lbnQuXG4gICAgICovXG4gICAgYXdhaXQgYnJvd3NlcldpbmRvdy5sb2FkVVJMKGltcG9ydC5tZXRhLmVudi5WSVRFX0RFVl9TRVJWRVJfVVJMKTtcbiAgfSBlbHNlIHtcbiAgICAvKipcbiAgICAgKiBMb2FkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIGZvciBwcm9kdWN0aW9uIGFuZCB0ZXN0LlxuICAgICAqXG4gICAgICogVXNlIEJyb3dzZXJXaW5kb3cubG9hZEZpbGUoKSBpbnN0ZWFkIG9mIEJyb3dzZXJXaW5kb3cubG9hZFVSTCgpIGZvciBXaGF0V0cgVVJMIEFQSSBsaW1pdGF0aW9uc1xuICAgICAqIHdoZW4gcGF0aCBjb250YWlucyBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBgI2AuXG4gICAgICogTGV0IGVsZWN0cm9uIGhhbmRsZSB0aGUgcGF0aCBxdWlya3MuXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzEyNjgyXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzY4NjlcbiAgICAgKi9cbiAgICBhd2FpdCBsb2FkRmlsZShicm93c2VyV2luZG93KTtcbiAgfVxuXG4gIHJldHVybiBicm93c2VyV2luZG93O1xufVxuXG4vKipcbiAqIFJlc3RvcmUgYW4gZXhpc3RpbmcgQnJvd3NlcldpbmRvdyBvciBDcmVhdGUgYSBuZXcgQnJvd3NlcldpbmRvdy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVPckNyZWF0ZVdpbmRvdygpIHtcbiAgbGV0IHdpbmRvdyA9IEJyb3dzZXJXaW5kb3cuZ2V0QWxsV2luZG93cygpLmZpbmQoKHcpID0+ICF3LmlzRGVzdHJveWVkKCkpO1xuXG4gIGlmICh3aW5kb3cgPT09IHVuZGVmaW5lZCkge1xuICAgIHdpbmRvdyA9IGF3YWl0IGNyZWF0ZVdpbmRvdygpO1xuICB9XG5cbiAgaWYgKHdpbmRvdy5pc01pbmltaXplZCgpKSB7XG4gICAgd2luZG93LnJlc3RvcmUoKTtcbiAgfVxuXG4gIHdpbmRvdy5mb2N1cygpO1xuXG4gIHJldHVybiB3aW5kb3c7XG59XG4iLCIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIGlwY01haW4sIHNoZWxsIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IFBhZ2VBdHRhY2htZW50LCBQYWdlRGF0YSB9IGZyb20gXCJAeHdpa2kvY3Jpc3RhbC1hcGlcIjtcblxuY29uc3QgSE9NRV9QQVRIID0gXCIuY3Jpc3RhbFwiO1xuY29uc3QgSE9NRV9QQVRIX0ZVTEwgPSBqb2luKGFwcC5nZXRQYXRoKFwiaG9tZVwiKSwgSE9NRV9QQVRIKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGFnZTogc3RyaW5nLCAuLi5sYXN0U2VnbWVudHM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGhvbWVkaXIgPSBhcHAuZ2V0UGF0aChcImhvbWVcIik7XG4gIHJldHVybiBqb2luKGhvbWVkaXIsIEhPTUVfUEFUSCwgcGFnZSwgLi4ubGFzdFNlZ21lbnRzKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVBhZ2VQYXRoKHBhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlUGF0aChwYWdlLCBcInBhZ2UuanNvblwiKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUF0dGFjaG1lbnRzUGF0aChwYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZVBhdGgocGFnZSwgXCJhdHRhY2htZW50c1wiKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVBdHRhY2htZW50UGF0aChwYWdlOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZVBhdGgocGFnZSwgXCJhdHRhY2htZW50c1wiLCBmaWxlbmFtZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzRmlsZShwYXRoOiBzdHJpbmcpIHtcbiAgbGV0IHN0YXQgPSB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgc3RhdCA9IGF3YWl0IGZzLnByb21pc2VzLmxzdGF0KHBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhlKTtcbiAgfVxuICByZXR1cm4gc3RhdD8uaXNGaWxlKCk7XG59XG5hc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgbGV0IHN0YXQgPSB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgc3RhdCA9IGF3YWl0IGZzLnByb21pc2VzLmxzdGF0KHBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhlKTtcbiAgfVxuICByZXR1cm4gc3RhdD8uaXNEaXJlY3RvcnkoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGF0aEV4aXN0cyhwYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5sc3RhdChwYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUGFnZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFBhZ2VEYXRhIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghKGF3YWl0IGlzV2l0aGluKEhPTUVfUEFUSF9GVUxMLCBwYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFske3BhdGh9XSBpcyBub3QgaW4gaW4gWyR7SE9NRV9QQVRIX0ZVTEx9XWApO1xuICB9XG4gIGlmIChhd2FpdCBpc0ZpbGUocGF0aCkpIHtcbiAgICBjb25zdCBwYWdlQ29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHBhdGgpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHBhZ2VDb250ZW50LnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQXR0YWNobWVudHMoXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8UGFnZUF0dGFjaG1lbnRbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIShhd2FpdCBpc1dpdGhpbihIT01FX1BBVEhfRlVMTCwgcGF0aCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbJHtwYXRofV0gaXMgbm90IGluIGluIFske0hPTUVfUEFUSF9GVUxMfV1gKTtcbiAgfVxuICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkocGF0aCkpIHtcbiAgICBjb25zdCBwYWdlQ29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIocGF0aCk7XG4gICAgcmV0dXJuIHBhZ2VDb250ZW50Lm1hcCgocGF0aCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHBhdGgsXG4gICAgICAgIG1pbWV0eXBlOiBcIlwiLFxuICAgICAgICByZWZlcmVuY2U6IHBhdGgsXG4gICAgICAgIGhyZWY6IHBhdGgsXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNXaXRoaW4ocm9vdDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcmVsID0gcmVsYXRpdmUocm9vdCwgcGF0aCk7XG4gIHJldHVybiAhcmVsLnN0YXJ0c1dpdGgoXCIuLi9cIikgJiYgcmVsICE9PSBcIi4uXCI7XG59XG5cbi8qKlxuICogTm90ZTogY3VycmVudGx5IHRoaXMgaXMgbW9yZSBhIG1ldGhvZCB0byB1cGRhdGUgdGhlIGNvbnRlbnQgb2YgYSBwYWdlIHRoYW5cbiAqIGFuIGFjdHVhbCBwYWdlIHNhdmUuXG4gKlxuICogQHBhcmFtIHBhdGggLSB0aGUgcGF0aCBvZiB0aGUgcGFnZSBvbiB0aGUgZmlsZSBzeXN0ZW1cbiAqIEBwYXJhbSBjb250ZW50IC0gdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2VcbiAqIEBwYXJhbSB0aXRsZSAtIHRoZSB0aXRsZSBvZiB0aGUgcGFnZVxuICogQHNpbmNlIDAuOFxuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlUGFnZShcbiAgcGF0aDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4pOiBQcm9taXNlPFBhZ2VEYXRhIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghKGF3YWl0IGlzV2l0aGluKEhPTUVfUEFUSF9GVUxMLCBwYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFske3BhdGh9XSBpcyBub3QgaW4gaW4gWyR7SE9NRV9QQVRIX0ZVTEx9XWApO1xuICB9XG4gIGxldCBqc29uQ29udGVudDoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzeW50YXg/OiBzdHJpbmc7XG4gIH07XG4gIGlmICgoYXdhaXQgcGF0aEV4aXN0cyhwYXRoKSkgJiYgKGF3YWl0IGlzRmlsZShwYXRoKSkpIHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHBhdGgpO1xuICAgIGNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKFwidXRmLThcIik7XG4gICAganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKHRleHREZWNvZGVyLmRlY29kZShmaWxlQ29udGVudCkpO1xuICAgIGpzb25Db250ZW50LnNvdXJjZSA9IGNvbnRlbnQ7XG4gICAganNvbkNvbnRlbnQubmFtZSA9IHRpdGxlO1xuICB9IGVsc2Uge1xuICAgIGpzb25Db250ZW50ID0ge1xuICAgICAgbmFtZTogdGl0bGUsXG4gICAgICBzb3VyY2U6IGNvbnRlbnQsXG4gICAgICBzeW50YXg6IFwibWFya2Rvd24vMS4yXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG5ld0pTT04gPSBKU09OLnN0cmluZ2lmeShqc29uQ29udGVudCwgbnVsbCwgMik7XG4gIGNvbnN0IHBhcmVudERpcmVjdG9yeSA9IGRpcm5hbWUocGF0aCk7XG4gIC8vIENyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yaWVzIGluIGNhc2UgdGhleSBkbyBub3QgZXhpc3QuXG4gIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhcmVudERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIC8vIFNldCB0aGUgZmxhZyB0byB3KyBzbyB0aGF0IHRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgYWxyZWFkeVxuICAvLyBleGlzdCwgb3IgZnVsbHkgcmVwbGFjZWQgd2hlbiBpdCBkb2VzLlxuICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUocGF0aCwgbmV3SlNPTiwgeyBmbGFnOiBcIncrXCIgfSk7XG4gIHJldHVybiByZWFkUGFnZShwYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUF0dGFjaG1lbnQocGF0aDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKSB7XG4gIGlmICghKGF3YWl0IGlzV2l0aGluKEhPTUVfUEFUSF9GVUxMLCBwYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFske3BhdGh9XSBpcyBub3QgaW4gaW4gWyR7SE9NRV9QQVRIX0ZVTEx9XWApO1xuICB9XG4gIGNvbnN0IHBhcmVudERpcmVjdG9yeSA9IGRpcm5hbWUocGF0aCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgaW4gY2FzZSB0aGV5IGRvIG5vdCBleGlzdC5cbiAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIocGFyZW50RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgZnMucHJvbWlzZXMuY29weUZpbGUoZmlsZVBhdGgsIHBhdGgpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgaWRzIG9mIHRoZSBjaGlsZHJlbiBwYWdlcyBmb3IgYSBnaXZlbiBwYWdlLlxuICpcbiAqIEBwYXJhbSBwYWdlIC0gdGhlIGlkIG9mIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBhIGxpc3Qgb2YgcGFnZSBpZHNcbiAqIEBzaW5jZSAwLjEwXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxpc3RDaGlsZHJlbihwYWdlOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgY29uc3QgZm9sZGVyUGF0aCA9IHJlc29sdmVQYXRoKHBhZ2UpLnJlcGxhY2UoL1xcL3BhZ2UuanNvbiQvLCBcIlwiKTtcblxuICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIoZm9sZGVyUGF0aCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgcGF0aCA9IGAke2ZvbGRlclBhdGh9LyR7ZmlsZX1gO1xuICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYXRoKSkge1xuICAgICAgY2hpbGRyZW4ucHVzaChmaWxlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbi8qKlxuICogRGVsZXRlIGEgcGFnZS5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIHRoZSBwYXRoIHRvIHRoZSBwYWdlIHRvIGRlbGV0ZVxuICogQHNpbmNlIDAuMTFcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlUGFnZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2hlbGwudHJhc2hJdGVtKHBhdGgucmVwbGFjZSgvXFwvcGFnZS5qc29uJC8sIFwiXCIpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZCgpOiB2b2lkIHtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZXNvbHZlUGF0aFwiLCAoZXZlbnQsIHsgcGFnZSB9KSA9PiB7XG4gICAgcmV0dXJuIHJlc29sdmVQYWdlUGF0aChwYWdlKTtcbiAgfSk7XG4gIGlwY01haW4uaGFuZGxlKFwicmVzb2x2ZUF0dGFjaG1lbnRzUGF0aFwiLCAoZXZlbnQsIHsgcGFnZSB9KSA9PiB7XG4gICAgcmV0dXJuIHJlc29sdmVBdHRhY2htZW50c1BhdGgocGFnZSk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcInJlYWRQYWdlXCIsIChldmVudCwgeyBwYXRoIH0pID0+IHtcbiAgICByZXR1cm4gcmVhZFBhZ2UocGF0aCk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcInJlYWRBdHRhY2htZW50c1wiLCAoZXZlbnQsIHsgcGF0aCB9KSA9PiB7XG4gICAgcmV0dXJuIHJlYWRBdHRhY2htZW50cyhwYXRoKTtcbiAgfSk7XG4gIGlwY01haW4uaGFuZGxlKFwic2F2ZVBhZ2VcIiwgKGV2ZW50LCB7IHBhdGgsIGNvbnRlbnQsIHRpdGxlIH0pID0+IHtcbiAgICByZXR1cm4gc2F2ZVBhZ2UocGF0aCwgY29udGVudCwgdGl0bGUpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZXNvbHZlQXR0YWNobWVudFBhdGhcIiwgKGV2ZW50LCB7IHBhZ2UsIGZpbGVuYW1lIH0pID0+IHtcbiAgICByZXR1cm4gcmVzb2x2ZUF0dGFjaG1lbnRQYXRoKHBhZ2UsIGZpbGVuYW1lKTtcbiAgfSk7XG4gIGlwY01haW4uaGFuZGxlKFwic2F2ZUF0dGFjaG1lbnRcIiwgKGV2ZW50LCB7IHBhdGgsIGZpbGVQYXRoIH0pID0+IHtcbiAgICByZXR1cm4gc2F2ZUF0dGFjaG1lbnQocGF0aCwgZmlsZVBhdGgpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJsaXN0Q2hpbGRyZW5cIiwgKGV2ZW50LCB7IHBhZ2UgfSkgPT4ge1xuICAgIHJldHVybiBsaXN0Q2hpbGRyZW4ocGFnZSk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcImRlbGV0ZVBhZ2VcIiwgKGV2ZW50LCB7IHBhdGggfSkgPT4ge1xuICAgIHJldHVybiBkZWxldGVQYWdlKHBhdGgpO1xuICB9KTtcbn1cbiIsIi8qXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqL1xuXG5pbXBvcnQgeyBpcGNNYWluLCBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCBCcm93c2VyV2luZG93ID0gRWxlY3Ryb24uQnJvd3NlcldpbmRvdztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbi8qKlxuICogUmVsb2FkIHRoZSBicm93c2VyIGJ5IHJlbG9hZGluZyB0aGUgaW5kZXggZmlsZS5cbiAqIEBwYXJhbSB3aW5kb3cgLSB0aGUgd2luZG93IGluc3RhbmNlIGluIHdoaWNoIHRoZSBkZWZhdWx0IGluZGV4IHBhZ2UgaXMgbG9hZGVkXG4gKi9cbmZ1bmN0aW9uIHJlbG9hZEJyb3dzZXIod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIHdpbmRvdy5sb2FkRmlsZShyZXNvbHZlKGFwcC5nZXRBcHBQYXRoKCksIFwiLi9yZW5kZXJlci9kaXN0L2luZGV4Lmh0bWxcIikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2FkKHdpbmRvdzogQnJvd3NlcldpbmRvdyk6IHZvaWQge1xuICBpcGNNYWluLmhhbmRsZShcInJlbG9hZEJyb3dzZXJcIiwgKCkgPT4ge1xuICAgIHJldHVybiByZWxvYWRCcm93c2VyKHdpbmRvdyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn1cblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdXG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufVxuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyA/IHJlc3BvbnNlLnN0YXR1cyA6IG51bGw7XG4gIH1cbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgRGVsYXllZFN0cmVhbSA9IHJlcXVpcmUoJ2RlbGF5ZWQtc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tYmluZWRTdHJlYW07XG5mdW5jdGlvbiBDb21iaW5lZFN0cmVhbSgpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAyICogMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW1zID0gdHJ1ZTtcblxuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG59XG51dGlsLmluaGVyaXRzKENvbWJpbmVkU3RyZWFtLCBTdHJlYW0pO1xuXG5Db21iaW5lZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciBjb21iaW5lZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgY29tYmluZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFN0cmVhbTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICByZXR1cm4gKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdzdHJpbmcnKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnYm9vbGVhbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdudW1iZXInKVxuICAgICYmICghQnVmZmVyLmlzQnVmZmVyKHN0cmVhbSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG5cbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIERlbGF5ZWRTdHJlYW0pKSB7XG4gICAgICB2YXIgbmV3U3RyZWFtID0gRGVsYXllZFN0cmVhbS5jcmVhdGUoc3RyZWFtLCB7XG4gICAgICAgIG1heERhdGFTaXplOiBJbmZpbml0eSxcbiAgICAgICAgcGF1c2VTdHJlYW06IHRoaXMucGF1c2VTdHJlYW1zLFxuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgc3RyZWFtID0gbmV3U3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuXG4gICAgaWYgKHRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9zdHJlYW1zLnB1c2goc3RyZWFtKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHtcbiAgU3RyZWFtLnByb3RvdHlwZS5waXBlLmNhbGwodGhpcywgZGVzdCwgb3B0aW9ucyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiBkZXN0O1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9nZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuXG4gIGlmICh0aGlzLl9pbnNpZGVMb29wKSB7XG4gICAgdGhpcy5fcGVuZGluZ05leHQgPSB0cnVlO1xuICAgIHJldHVybjsgLy8gZGVmZXIgY2FsbFxuICB9XG5cbiAgdGhpcy5faW5zaWRlTG9vcCA9IHRydWU7XG4gIHRyeSB7XG4gICAgZG8ge1xuICAgICAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3JlYWxHZXROZXh0KCk7XG4gICAgfSB3aGlsZSAodGhpcy5fcGVuZGluZ05leHQpO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZWFsR2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyZWFtID0gdGhpcy5fc3RyZWFtcy5zaGlmdCgpO1xuXG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0U3RyZWFtID0gc3RyZWFtO1xuICBnZXRTdHJlYW0oZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICAgIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9waXBlTmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gc3RyZWFtO1xuXG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIHN0cmVhbS5vbignZW5kJywgdGhpcy5fZ2V0TmV4dC5iaW5kKHRoaXMpKTtcbiAgICBzdHJlYW0ucGlwZSh0aGlzLCB7ZW5kOiBmYWxzZX0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IHN0cmVhbTtcbiAgdGhpcy53cml0ZSh2YWx1ZSk7XG4gIHRoaXMuX2dldE5leHQoKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5faGFuZGxlRXJyb3JzID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNlbGYuX2VtaXRFcnJvcihlcnIpO1xuICB9KTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UoKTtcbiAgdGhpcy5lbWl0KCdwYXVzZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5fcmVsZWFzZWQgPSB0cnVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICAgIHRoaXMuX2dldE5leHQoKTtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSgpO1xuICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2VuZCcpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdjbG9zZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2NoZWNrRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdXBkYXRlRGF0YVNpemUoKTtcbiAgaWYgKHRoaXMuZGF0YVNpemUgPD0gdGhpcy5tYXhEYXRhU2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJztcbiAgdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3VwZGF0ZURhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fc3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIGlmICghc3RyZWFtLmRhdGFTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5kYXRhU2l6ZSArPSBzdHJlYW0uZGF0YVNpemU7XG4gIH0pO1xuXG4gIGlmICh0aGlzLl9jdXJyZW50U3RyZWFtICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemUpIHtcbiAgICB0aGlzLmRhdGFTaXplICs9IHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemU7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcbiIsIi8qIVxuICogbWltZS1kYlxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNS0yMDIyIERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kYi5qc29uJylcbiIsIi8qIVxuICogbWltZS10eXBlc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRiID0gcmVxdWlyZSgnbWltZS1kYicpXG52YXIgZXh0bmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5leHRuYW1lXG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIEVYVFJBQ1RfVFlQRV9SRUdFWFAgPSAvXlxccyooW147XFxzXSopKD86O3xcXHN8JCkvXG52YXIgVEVYVF9UWVBFX1JFR0VYUCA9IC9edGV4dFxcLy9pXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0cy5jaGFyc2V0ID0gY2hhcnNldFxuZXhwb3J0cy5jaGFyc2V0cyA9IHsgbG9va3VwOiBjaGFyc2V0IH1cbmV4cG9ydHMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuZXhwb3J0cy5leHRlbnNpb24gPSBleHRlbnNpb25cbmV4cG9ydHMuZXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbClcbmV4cG9ydHMubG9va3VwID0gbG9va3VwXG5leHBvcnRzLnR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vLyBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucy90eXBlcyBtYXBzXG5wb3B1bGF0ZU1hcHMoZXhwb3J0cy5leHRlbnNpb25zLCBleHBvcnRzLnR5cGVzKVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBjaGFyc2V0IGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY2hhcnNldCAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG4gIHZhciBtaW1lID0gbWF0Y2ggJiYgZGJbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAobWltZSAmJiBtaW1lLmNoYXJzZXQpIHtcbiAgICByZXR1cm4gbWltZS5jaGFyc2V0XG4gIH1cblxuICAvLyBkZWZhdWx0IHRleHQvKiB0byB1dGYtOFxuICBpZiAobWF0Y2ggJiYgVEVYVF9UWVBFX1JFR0VYUC50ZXN0KG1hdGNoWzFdKSkge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmdWxsIENvbnRlbnQtVHlwZSBoZWFkZXIgZ2l2ZW4gYSBNSU1FIHR5cGUgb3IgZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNvbnRlbnRUeXBlIChzdHIpIHtcbiAgLy8gVE9ETzogc2hvdWxkIHRoaXMgZXZlbiBiZSBpbiB0aGlzIG1vZHVsZT9cbiAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBtaW1lID0gc3RyLmluZGV4T2YoJy8nKSA9PT0gLTFcbiAgICA/IGV4cG9ydHMubG9va3VwKHN0cilcbiAgICA6IHN0clxuXG4gIGlmICghbWltZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIGNvbnRlbnQtdHlwZSBvciBvdGhlciBtb2R1bGVcbiAgaWYgKG1pbWUuaW5kZXhPZignY2hhcnNldCcpID09PSAtMSkge1xuICAgIHZhciBjaGFyc2V0ID0gZXhwb3J0cy5jaGFyc2V0KG1pbWUpXG4gICAgaWYgKGNoYXJzZXQpIG1pbWUgKz0gJzsgY2hhcnNldD0nICsgY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gbWltZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBleHRlbnNpb24gKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuXG4gIC8vIGdldCBleHRlbnNpb25zXG4gIHZhciBleHRzID0gbWF0Y2ggJiYgZXhwb3J0cy5leHRlbnNpb25zW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4dHNbMF1cbn1cblxuLyoqXG4gKiBMb29rdXAgdGhlIE1JTUUgdHlwZSBmb3IgYSBmaWxlIHBhdGgvZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBsb29rdXAgKHBhdGgpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gZ2V0IHRoZSBleHRlbnNpb24gKFwiZXh0XCIgb3IgXCIuZXh0XCIgb3IgZnVsbCBwYXRoKVxuICB2YXIgZXh0ZW5zaW9uID0gZXh0bmFtZSgneC4nICsgcGF0aClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zdWJzdHIoMSlcblxuICBpZiAoIWV4dGVuc2lvbikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHMudHlwZXNbZXh0ZW5zaW9uXSB8fCBmYWxzZVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zIGFuZCB0eXBlcyBtYXBzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZU1hcHMgKGV4dGVuc2lvbnMsIHR5cGVzKSB7XG4gIC8vIHNvdXJjZSBwcmVmZXJlbmNlIChsZWFzdCAtPiBtb3N0KVxuICB2YXIgcHJlZmVyZW5jZSA9IFsnbmdpbngnLCAnYXBhY2hlJywgdW5kZWZpbmVkLCAnaWFuYSddXG5cbiAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaE1pbWVUeXBlICh0eXBlKSB7XG4gICAgdmFyIG1pbWUgPSBkYlt0eXBlXVxuICAgIHZhciBleHRzID0gbWltZS5leHRlbnNpb25zXG5cbiAgICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBtaW1lIC0+IGV4dGVuc2lvbnNcbiAgICBleHRlbnNpb25zW3R5cGVdID0gZXh0c1xuXG4gICAgLy8gZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBleHRzW2ldXG5cbiAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dKSB7XG4gICAgICAgIHZhciBmcm9tID0gcHJlZmVyZW5jZS5pbmRleE9mKGRiW3R5cGVzW2V4dGVuc2lvbl1dLnNvdXJjZSlcbiAgICAgICAgdmFyIHRvID0gcHJlZmVyZW5jZS5pbmRleE9mKG1pbWUuc291cmNlKVxuXG4gICAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dICE9PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyAmJlxuICAgICAgICAgIChmcm9tID4gdG8gfHwgKGZyb20gPT09IHRvICYmIHR5cGVzW2V4dGVuc2lvbl0uc3Vic3RyKDAsIDEyKSA9PT0gJ2FwcGxpY2F0aW9uLycpKSkge1xuICAgICAgICAgIC8vIHNraXAgdGhlIHJlbWFwcGluZ1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHRoZSBleHRlbnNpb24gLT4gbWltZVxuICAgICAgdHlwZXNbZXh0ZW5zaW9uXSA9IHR5cGVcbiAgICB9XG4gIH0pXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGRlZmVyO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgZnVuY3Rpb24gb24gbmV4dCBpdGVyYXRpb24gb2YgdGhlIGV2ZW50IGxvb3BcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIGZ1bmN0aW9uIHRvIHJ1blxuICovXG5mdW5jdGlvbiBkZWZlcihmbilcbntcbiAgdmFyIG5leHRUaWNrID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PSAnZnVuY3Rpb24nXG4gICAgPyBzZXRJbW1lZGlhdGVcbiAgICA6IChcbiAgICAgIHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09ICdmdW5jdGlvbidcbiAgICAgID8gcHJvY2Vzcy5uZXh0VGlja1xuICAgICAgOiBudWxsXG4gICAgKTtcblxuICBpZiAobmV4dFRpY2spXG4gIHtcbiAgICBuZXh0VGljayhmbik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgc2V0VGltZW91dChmbiwgMCk7XG4gIH1cbn1cbiIsInZhciBkZWZlciA9IHJlcXVpcmUoJy4vZGVmZXIuanMnKTtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHlcbiAqIGV2ZW4gaWYgY2FsbGJhY2sgaXRzZWxmIGlzIG5vdFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayB0byBpbnZva2VcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhdWdtZW50ZWQgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYXN5bmMoY2FsbGJhY2spXG57XG4gIHZhciBpc0FzeW5jID0gZmFsc2U7XG5cbiAgLy8gY2hlY2sgaWYgYXN5bmMgaGFwcGVuZWRcbiAgZGVmZXIoZnVuY3Rpb24oKSB7IGlzQXN5bmMgPSB0cnVlOyB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gYXN5bmNfY2FsbGJhY2soZXJyLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoaXNBc3luYylcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBkZWZlcihmdW5jdGlvbiBuZXh0VGlja19jYWxsYmFjaygpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhYm9ydDtcblxuLyoqXG4gKiBBYm9ydHMgbGVmdG92ZXIgYWN0aXZlIGpvYnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBhYm9ydChzdGF0ZSlcbntcbiAgT2JqZWN0LmtleXMoc3RhdGUuam9icykuZm9yRWFjaChjbGVhbi5iaW5kKHN0YXRlKSk7XG5cbiAgLy8gcmVzZXQgbGVmdG92ZXIgam9ic1xuICBzdGF0ZS5qb2JzID0ge307XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGxlZnRvdmVyIGpvYiBieSBpbnZva2luZyBhYm9ydCBmdW5jdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGpvYiBpZFxuICpcbiAqIEB0aGlzICBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBqb2IgaWQgdG8gYWJvcnRcbiAqL1xuZnVuY3Rpb24gY2xlYW4oa2V5KVxue1xuICBpZiAodHlwZW9mIHRoaXMuam9ic1trZXldID09ICdmdW5jdGlvbicpXG4gIHtcbiAgICB0aGlzLmpvYnNba2V5XSgpO1xuICB9XG59XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBpdGVyYXRlICAgID0gcmVxdWlyZSgnLi9saWIvaXRlcmF0ZS5qcycpXG4gICwgaW5pdFN0YXRlICA9IHJlcXVpcmUoJy4vbGliL3N0YXRlLmpzJylcbiAgLCB0ZXJtaW5hdG9yID0gcmVxdWlyZSgnLi9saWIvdGVybWluYXRvci5qcycpXG4gIDtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWxPcmRlcmVkO1xuLy8gc29ydGluZyBoZWxwZXJzXG5tb2R1bGUuZXhwb3J0cy5hc2NlbmRpbmcgID0gYXNjZW5kaW5nO1xubW9kdWxlLmV4cG9ydHMuZGVzY2VuZGluZyA9IGRlc2NlbmRpbmc7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIHNvcnRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gc29ydE1ldGhvZCAtIGN1c3RvbSBzb3J0IGZ1bmN0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgc29ydE1ldGhvZCwgY2FsbGJhY2spXG57XG4gIHZhciBzdGF0ZSA9IGluaXRTdGF0ZShsaXN0LCBzb3J0TWV0aG9kKTtcblxuICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24gaXRlcmF0b3JIYW5kbGVyKGVycm9yLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoZXJyb3IpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZXgrKztcblxuICAgIC8vIGFyZSB3ZSB0aGVyZSB5ZXQ/XG4gICAgaWYgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gICAge1xuICAgICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGl0ZXJhdG9ySGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZG9uZSBoZXJlXG4gICAgY2FsbGJhY2sobnVsbCwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cblxuLypcbiAqIC0tIFNvcnQgbWV0aG9kc1xuICovXG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGRlc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIC0xICogYXNjZW5kaW5nKGEsIGIpO1xufVxuIiwidmFyIHNlcmlhbE9yZGVyZWQgPSByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHJldHVybiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBudWxsLCBjYWxsYmFjayk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBwb3B1bGF0ZSA9IHJlcXVpcmUoJy4vcG9wdWxhdGUuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcblxuLy8gbWFrZSBpdCBhIFN0cmVhbVxudXRpbC5pbmhlcml0cyhGb3JtRGF0YSwgQ29tYmluZWRTdHJlYW0pO1xuXG4vKipcbiAqIENyZWF0ZSByZWFkYWJsZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBzdHJlYW1zLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VibWl0IGZvcm1zXG4gKiBhbmQgZmlsZSB1cGxvYWRzIHRvIG90aGVyIHdlYiBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFByb3BlcnRpZXMgdG8gYmUgYWRkZWQvb3ZlcnJpZGVuIGZvciBGb3JtRGF0YSBhbmQgQ29tYmluZWRTdHJlYW1cbiAqL1xuZnVuY3Rpb24gRm9ybURhdGEob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRGF0YShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZXNUb01lYXN1cmUgPSBbXTtcblxuICBDb21iaW5lZFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxufVxuXG5Gb3JtRGF0YS5MSU5FX0JSRUFLID0gJ1xcclxcbic7XG5Gb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gYWxsb3cgZmlsZW5hbWUgYXMgc2luZ2xlIG9wdGlvblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge2ZpbGVuYW1lOiBvcHRpb25zfTtcbiAgfVxuXG4gIHZhciBhcHBlbmQgPSBDb21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kLmJpbmQodGhpcyk7XG5cbiAgLy8gYWxsIHRoYXQgc3RyZWFteSBidXNpbmVzcyBjYW4ndCBoYW5kbGUgbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1mb3JtLWRhdGEvaXNzdWVzLzM4XG4gIGlmICh1dGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlIG9yIG5vdCBhIHN0cmVhbVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIFN0cmVhbSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm8gbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgbGVuZ3RoXG4gIGlmICghb3B0aW9ucy5rbm93bkxlbmd0aCkge1xuICAgIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5wdXNoKHZhbHVlKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sZW5ndGhSZXRyaWV2ZXIgPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcblxuICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZkJykpIHtcblxuICAgIC8vIHRha2UgcmVhZCByYW5nZSBpbnRvIGEgYWNjb3VudFxuICAgIC8vIGBlbmRgID0gSW5maW5pdHkg4oCTPiByZWFkIGZpbGUgdGlsbCB0aGUgZW5kXG4gICAgLy9cbiAgICAvLyBUT0RPOiBMb29rcyBsaWtlIHRoZXJlIGlzIGJ1ZyBpbiBOb2RlIGZzLmNyZWF0ZVJlYWRTdHJlYW1cbiAgICAvLyBpdCBkb2Vzbid0IHJlc3BlY3QgYGVuZGAgb3B0aW9ucyB3aXRob3V0IGBzdGFydGAgb3B0aW9uc1xuICAgIC8vIEZpeCBpdCB3aGVuIG5vZGUgZml4ZXMgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy83ODE5XG4gICAgaWYgKHZhbHVlLmVuZCAhPSB1bmRlZmluZWQgJiYgdmFsdWUuZW5kICE9IEluZmluaXR5ICYmIHZhbHVlLnN0YXJ0ICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAvLyB3aGVuIGVuZCBzcGVjaWZpZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJhbmdlXG4gICAgICAvLyBpbmNsdXNpdmUsIHN0YXJ0cyB3aXRoIDBcbiAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlLmVuZCArIDEgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApKTtcblxuICAgIC8vIG5vdCB0aGF0IGZhc3Qgc25vb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZmV0Y2ggZmlsZSBzaXplIGZyb20gZnNcbiAgICAgIGZzLnN0YXQodmFsdWUucGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG5cbiAgICAgICAgdmFyIGZpbGVTaXplO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBmaW5hbCBzaXplIGJhc2VkIG9uIHRoZSByYW5nZSBvcHRpb25zXG4gICAgICAgIGZpbGVTaXplID0gc3RhdC5zaXplIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIC8vIG9yIGh0dHAgcmVzcG9uc2VcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNhbGxiYWNrKG51bGwsICt2YWx1ZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcblxuICAvLyBvciByZXF1ZXN0IHN0cmVhbSBodHRwOi8vZ2l0aHViLmNvbS9taWtlYWwvcmVxdWVzdFxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICBoZWFkZXIgPSBoZWFkZXJzW3Byb3BdO1xuXG4gICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlciA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBoZWFkZXJzIHRvIGFycmF5cy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgfVxuXG4gICAgLy8gYWRkIG5vbi1lbXB0eSBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBjb250ZW50cyArPSBwcm9wICsgJzogJyArIGhlYWRlci5qb2luKCc7ICcpICsgRm9ybURhdGEuTElORV9CUkVBSztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArIEZvcm1EYXRhLkxJTkVfQlJFQUsgKyBjb250ZW50cyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnREaXNwb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGZpbGVuYW1lXG4gICAgLCBjb250ZW50RGlzcG9zaXRpb25cbiAgICA7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbGVwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIGN1c3RvbSBmaWxlcGF0aCBmb3IgcmVsYXRpdmUgcGF0aHNcbiAgICBmaWxlbmFtZSA9IHBhdGgubm9ybWFsaXplKG9wdGlvbnMuZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCkge1xuICAgIC8vIGN1c3RvbSBmaWxlbmFtZSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBmb3JtaWRhYmxlIGFuZCB0aGUgYnJvd3NlciBhZGQgYSBuYW1lIHByb3BlcnR5XG4gICAgLy8gZnMtIGFuZCByZXF1ZXN0LSBzdHJlYW1zIGhhdmUgcGF0aCBwcm9wZXJ0eVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCk7XG4gIH0gZWxzZSBpZiAodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICAvLyBvciB0cnkgaHR0cCByZXNwb25zZVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZSh2YWx1ZS5jbGllbnQuX2h0dHBNZXNzYWdlLnBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgY29udGVudERpc3Bvc2l0aW9uID0gJ2ZpbGVuYW1lPVwiJyArIGZpbGVuYW1lICsgJ1wiJztcbiAgfVxuXG4gIHJldHVybiBjb250ZW50RGlzcG9zaXRpb247XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICAvLyB1c2UgY3VzdG9tIGNvbnRlbnQtdHlwZSBhYm92ZSBhbGxcbiAgdmFyIGNvbnRlbnRUeXBlID0gb3B0aW9ucy5jb250ZW50VHlwZTtcblxuICAvLyBvciB0cnkgYG5hbWVgIGZyb20gZm9ybWlkYWJsZSwgYnJvd3NlclxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLm5hbWUpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLm5hbWUpO1xuICB9XG5cbiAgLy8gb3IgdHJ5IGBwYXRoYCBmcm9tIGZzLSwgcmVxdWVzdC0gc3RyZWFtc1xuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnBhdGgpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLnBhdGgpO1xuICB9XG5cbiAgLy8gb3IgaWYgaXQncyBodHRwLXJlcG9uc2VcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmICh1c2VySGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICBmb3JtSGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB1c2VySGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtSGVhZGVycztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5KSB7XG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIgJiYgZXJyICE9PSAnVW5rbm93biBzdHJlYW0nKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgdmFyIG9uUmVzcG9uc2U7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzcG9uY2UpIHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIGNiLmNhbGwodGhpcywgZXJyb3IsIHJlc3BvbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIG9uUmVzcG9uc2UgPSBjYWxsYmFjay5iaW5kKHRoaXMsIG51bGwpO1xuXG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5leHBvcnQgZGVmYXVsdCB1cmwuVVJMU2VhcmNoUGFyYW1zO1xuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc05vZGU6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYjogdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2IgfHwgbnVsbFxuICB9LFxuICBwcm90b2NvbHM6IFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdkYXRhJyBdXG59O1xuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luXG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcblxudmFyIERFRkFVTFRfUE9SVFMgPSB7XG4gIGZ0cDogMjEsXG4gIGdvcGhlcjogNzAsXG4gIGh0dHA6IDgwLFxuICBodHRwczogNDQzLFxuICB3czogODAsXG4gIHdzczogNDQzLFxufTtcblxudmFyIHN0cmluZ0VuZHNXaXRoID0gU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCB8fCBmdW5jdGlvbihzKSB7XG4gIHJldHVybiBzLmxlbmd0aCA8PSB0aGlzLmxlbmd0aCAmJlxuICAgIHRoaXMuaW5kZXhPZihzLCB0aGlzLmxlbmd0aCAtIHMubGVuZ3RoKSAhPT0gLTE7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gdXJsIC0gVGhlIFVSTCwgb3IgdGhlIHJlc3VsdCBmcm9tIHVybC5wYXJzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCBvZiB0aGUgcHJveHkgdGhhdCBzaG91bGQgaGFuZGxlIHRoZSByZXF1ZXN0IHRvIHRoZVxuICogIGdpdmVuIFVSTC4gSWYgbm8gcHJveHkgaXMgc2V0LCB0aGlzIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRQcm94eUZvclVybCh1cmwpIHtcbiAgdmFyIHBhcnNlZFVybCA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gcGFyc2VVcmwodXJsKSA6IHVybCB8fCB7fTtcbiAgdmFyIHByb3RvID0gcGFyc2VkVXJsLnByb3RvY29sO1xuICB2YXIgaG9zdG5hbWUgPSBwYXJzZWRVcmwuaG9zdDtcbiAgdmFyIHBvcnQgPSBwYXJzZWRVcmwucG9ydDtcbiAgaWYgKHR5cGVvZiBob3N0bmFtZSAhPT0gJ3N0cmluZycgfHwgIWhvc3RuYW1lIHx8IHR5cGVvZiBwcm90byAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJyc7ICAvLyBEb24ndCBwcm94eSBVUkxzIHdpdGhvdXQgYSB2YWxpZCBzY2hlbWUgb3IgaG9zdC5cbiAgfVxuXG4gIHByb3RvID0gcHJvdG8uc3BsaXQoJzonLCAxKVswXTtcbiAgLy8gU3RyaXBwaW5nIHBvcnRzIGluIHRoaXMgd2F5IGluc3RlYWQgb2YgdXNpbmcgcGFyc2VkVXJsLmhvc3RuYW1lIHRvIG1ha2VcbiAgLy8gc3VyZSB0aGF0IHRoZSBicmFja2V0cyBhcm91bmQgSVB2NiBhZGRyZXNzZXMgYXJlIGtlcHQuXG4gIGhvc3RuYW1lID0gaG9zdG5hbWUucmVwbGFjZSgvOlxcZCokLywgJycpO1xuICBwb3J0ID0gcGFyc2VJbnQocG9ydCkgfHwgREVGQVVMVF9QT1JUU1twcm90b10gfHwgMDtcbiAgaWYgKCFzaG91bGRQcm94eShob3N0bmFtZSwgcG9ydCkpIHtcbiAgICByZXR1cm4gJyc7ICAvLyBEb24ndCBwcm94eSBVUkxzIHRoYXQgbWF0Y2ggTk9fUFJPWFkuXG4gIH1cblxuICB2YXIgcHJveHkgPVxuICAgIGdldEVudignbnBtX2NvbmZpZ18nICsgcHJvdG8gKyAnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYocHJvdG8gKyAnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYoJ25wbV9jb25maWdfcHJveHknKSB8fFxuICAgIGdldEVudignYWxsX3Byb3h5Jyk7XG4gIGlmIChwcm94eSAmJiBwcm94eS5pbmRleE9mKCc6Ly8nKSA9PT0gLTEpIHtcbiAgICAvLyBNaXNzaW5nIHNjaGVtZSBpbiBwcm94eSwgZGVmYXVsdCB0byB0aGUgcmVxdWVzdGVkIFVSTCdzIHNjaGVtZS5cbiAgICBwcm94eSA9IHByb3RvICsgJzovLycgKyBwcm94eTtcbiAgfVxuICByZXR1cm4gcHJveHk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gVVJMIHNob3VsZCBiZSBwcm94aWVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBob3N0bmFtZSAtIFRoZSBob3N0IG5hbWUgb2YgdGhlIFVSTC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3J0IC0gVGhlIGVmZmVjdGl2ZSBwb3J0IG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZ2l2ZW4gVVJMIHNob3VsZCBiZSBwcm94aWVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpIHtcbiAgdmFyIE5PX1BST1hZID1cbiAgICAoZ2V0RW52KCducG1fY29uZmlnX25vX3Byb3h5JykgfHwgZ2V0RW52KCdub19wcm94eScpKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIU5PX1BST1hZKSB7XG4gICAgcmV0dXJuIHRydWU7ICAvLyBBbHdheXMgcHJveHkgaWYgTk9fUFJPWFkgaXMgbm90IHNldC5cbiAgfVxuICBpZiAoTk9fUFJPWFkgPT09ICcqJykge1xuICAgIHJldHVybiBmYWxzZTsgIC8vIE5ldmVyIHByb3h5IGlmIHdpbGRjYXJkIGlzIHNldC5cbiAgfVxuXG4gIHJldHVybiBOT19QUk9YWS5zcGxpdCgvWyxcXHNdLykuZXZlcnkoZnVuY3Rpb24ocHJveHkpIHtcbiAgICBpZiAoIXByb3h5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgIC8vIFNraXAgemVyby1sZW5ndGggaG9zdHMuXG4gICAgfVxuICAgIHZhciBwYXJzZWRQcm94eSA9IHByb3h5Lm1hdGNoKC9eKC4rKTooXFxkKykkLyk7XG4gICAgdmFyIHBhcnNlZFByb3h5SG9zdG5hbWUgPSBwYXJzZWRQcm94eSA/IHBhcnNlZFByb3h5WzFdIDogcHJveHk7XG4gICAgdmFyIHBhcnNlZFByb3h5UG9ydCA9IHBhcnNlZFByb3h5ID8gcGFyc2VJbnQocGFyc2VkUHJveHlbMl0pIDogMDtcbiAgICBpZiAocGFyc2VkUHJveHlQb3J0ICYmIHBhcnNlZFByb3h5UG9ydCAhPT0gcG9ydCkge1xuICAgICAgcmV0dXJuIHRydWU7ICAvLyBTa2lwIGlmIHBvcnRzIGRvbid0IG1hdGNoLlxuICAgIH1cblxuICAgIGlmICghL15bLipdLy50ZXN0KHBhcnNlZFByb3h5SG9zdG5hbWUpKSB7XG4gICAgICAvLyBObyB3aWxkY2FyZHMsIHNvIHN0b3AgcHJveHlpbmcgaWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2guXG4gICAgICByZXR1cm4gaG9zdG5hbWUgIT09IHBhcnNlZFByb3h5SG9zdG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFByb3h5SG9zdG5hbWUuY2hhckF0KDApID09PSAnKicpIHtcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdpbGRjYXJkLlxuICAgICAgcGFyc2VkUHJveHlIb3N0bmFtZSA9IHBhcnNlZFByb3h5SG9zdG5hbWUuc2xpY2UoMSk7XG4gICAgfVxuICAgIC8vIFN0b3AgcHJveHlpbmcgaWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCB0aGUgbm9fcHJveHkgaG9zdC5cbiAgICByZXR1cm4gIXN0cmluZ0VuZHNXaXRoLmNhbGwoaG9zdG5hbWUsIHBhcnNlZFByb3h5SG9zdG5hbWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0RW52KGtleSkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnZba2V5LnRvTG93ZXJDYXNlKCldIHx8IHByb2Nlc3MuZW52W2tleS50b1VwcGVyQ2FzZSgpXSB8fCAnJztcbn1cblxuZXhwb3J0cy5nZXRQcm94eUZvclVybCA9IGdldFByb3h5Rm9yVXJsO1xuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnd2Vla3MnOlxuICAgIGNhc2UgJ3dlZWsnOlxuICAgIGNhc2UgJ3cnOlxuICAgICAgcmV0dXJuIG4gKiB3O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBkLCAnZGF5Jyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgcywgJ3NlY29uZCcpO1xuICB9XG4gIHJldHVybiBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBuKSArICcgJyArIG5hbWUgKyAoaXNQbHVyYWwgPyAncycgOiAnJyk7XG59XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gKGZsYWcsIGFyZ3YpID0+IHtcblx0YXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2O1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvcyA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvcyA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpKSB7XG5cdGZvcmNlQ29sb3IgPSBmYWxzZTtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IHRydWU7XG59XG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKHN0cmVhbSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChzdHJlYW0gJiYgIXN0cmVhbS5pc1RUWSAmJiBmb3JjZUNvbG9yICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG5cdFx0Ly8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcblx0XHQvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcblx0XHQvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93c1xuXHRcdC8vIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlXG5cdFx0Ly8gdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKVswXSkgPj0gOCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuXHRzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVycilcbn07XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIE5vZGUuanMgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5kZXN0cm95ID0gdXRpbC5kZXByZWNhdGUoXG5cdCgpID0+IHt9LFxuXHQnSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLidcbik7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gWzYsIDIsIDMsIDQsIDUsIDFdO1xuXG50cnkge1xuXHQvLyBPcHRpb25hbCBkZXBlbmRlbmN5IChhcyBpbiwgZG9lc24ndCBuZWVkIHRvIGJlIGluc3RhbGxlZCwgTk9UIGxpa2Ugb3B0aW9uYWxEZXBlbmRlbmNpZXMgaW4gcGFja2FnZS5qc29uKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cdGNvbnN0IHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuXG5cdGlmIChzdXBwb3J0c0NvbG9yICYmIChzdXBwb3J0c0NvbG9yLnN0ZGVyciB8fCBzdXBwb3J0c0NvbG9yKS5sZXZlbCA+PSAyKSB7XG5cdFx0ZXhwb3J0cy5jb2xvcnMgPSBbXG5cdFx0XHQyMCxcblx0XHRcdDIxLFxuXHRcdFx0MjYsXG5cdFx0XHQyNyxcblx0XHRcdDMyLFxuXHRcdFx0MzMsXG5cdFx0XHQzOCxcblx0XHRcdDM5LFxuXHRcdFx0NDAsXG5cdFx0XHQ0MSxcblx0XHRcdDQyLFxuXHRcdFx0NDMsXG5cdFx0XHQ0NCxcblx0XHRcdDQ1LFxuXHRcdFx0NTYsXG5cdFx0XHQ1Nyxcblx0XHRcdDYyLFxuXHRcdFx0NjMsXG5cdFx0XHQ2OCxcblx0XHRcdDY5LFxuXHRcdFx0NzQsXG5cdFx0XHQ3NSxcblx0XHRcdDc2LFxuXHRcdFx0NzcsXG5cdFx0XHQ3OCxcblx0XHRcdDc5LFxuXHRcdFx0ODAsXG5cdFx0XHQ4MSxcblx0XHRcdDkyLFxuXHRcdFx0OTMsXG5cdFx0XHQ5OCxcblx0XHRcdDk5LFxuXHRcdFx0MTEyLFxuXHRcdFx0MTEzLFxuXHRcdFx0MTI4LFxuXHRcdFx0MTI5LFxuXHRcdFx0MTM0LFxuXHRcdFx0MTM1LFxuXHRcdFx0MTQ4LFxuXHRcdFx0MTQ5LFxuXHRcdFx0MTYwLFxuXHRcdFx0MTYxLFxuXHRcdFx0MTYyLFxuXHRcdFx0MTYzLFxuXHRcdFx0MTY0LFxuXHRcdFx0MTY1LFxuXHRcdFx0MTY2LFxuXHRcdFx0MTY3LFxuXHRcdFx0MTY4LFxuXHRcdFx0MTY5LFxuXHRcdFx0MTcwLFxuXHRcdFx0MTcxLFxuXHRcdFx0MTcyLFxuXHRcdFx0MTczLFxuXHRcdFx0MTc4LFxuXHRcdFx0MTc5LFxuXHRcdFx0MTg0LFxuXHRcdFx0MTg1LFxuXHRcdFx0MTk2LFxuXHRcdFx0MTk3LFxuXHRcdFx0MTk4LFxuXHRcdFx0MTk5LFxuXHRcdFx0MjAwLFxuXHRcdFx0MjAxLFxuXHRcdFx0MjAyLFxuXHRcdFx0MjAzLFxuXHRcdFx0MjA0LFxuXHRcdFx0MjA1LFxuXHRcdFx0MjA2LFxuXHRcdFx0MjA3LFxuXHRcdFx0MjA4LFxuXHRcdFx0MjA5LFxuXHRcdFx0MjE0LFxuXHRcdFx0MjE1LFxuXHRcdFx0MjIwLFxuXHRcdFx0MjIxXG5cdFx0XTtcblx0fVxufSBjYXRjaCAoZXJyb3IpIHtcblx0Ly8gU3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihrZXkgPT4ge1xuXHRyZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG5cdC8vIENhbWVsLWNhc2Vcblx0Y29uc3QgcHJvcCA9IGtleVxuXHRcdC5zdWJzdHJpbmcoNilcblx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdC5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgaykgPT4ge1xuXHRcdFx0cmV0dXJuIGsudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblxuXHQvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcblx0bGV0IHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG5cdGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gZmFsc2U7XG5cdH0gZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHtcblx0XHR2YWwgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdHZhbCA9IE51bWJlcih2YWwpO1xuXHR9XG5cblx0b2JqW3Byb3BdID0gdmFsO1xuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIElzIHN0ZG91dCBhIFRUWT8gQ29sb3JlZCBvdXRwdXQgaXMgZW5hYmxlZCB3aGVuIGB0cnVlYC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdHJldHVybiAnY29sb3JzJyBpbiBleHBvcnRzLmluc3BlY3RPcHRzID9cblx0XHRCb29sZWFuKGV4cG9ydHMuaW5zcGVjdE9wdHMuY29sb3JzKSA6XG5cdFx0dHR5LmlzYXR0eShwcm9jZXNzLnN0ZGVyci5mZCk7XG59XG5cbi8qKlxuICogQWRkcyBBTlNJIGNvbG9yIGVzY2FwZSBjb2RlcyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGNvbnN0IHtuYW1lc3BhY2U6IG5hbWUsIHVzZUNvbG9yc30gPSB0aGlzO1xuXG5cdGlmICh1c2VDb2xvcnMpIHtcblx0XHRjb25zdCBjID0gdGhpcy5jb2xvcjtcblx0XHRjb25zdCBjb2xvckNvZGUgPSAnXFx1MDAxQlszJyArIChjIDwgOCA/IGMgOiAnODs1OycgKyBjKTtcblx0XHRjb25zdCBwcmVmaXggPSBgICAke2NvbG9yQ29kZX07MW0ke25hbWV9IFxcdTAwMUJbMG1gO1xuXG5cdFx0YXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuXHRcdGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSArICdcXHUwMDFCWzBtJyk7XG5cdH0gZWxzZSB7XG5cdFx0YXJnc1swXSA9IGdldERhdGUoKSArIG5hbWUgKyAnICcgKyBhcmdzWzBdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGUoKSB7XG5cdGlmIChleHBvcnRzLmluc3BlY3RPcHRzLmhpZGVEYXRlKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnICc7XG59XG5cbi8qKlxuICogSW52b2tlcyBgdXRpbC5mb3JtYXQoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXQoLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgLyBud2pzIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCBwcm9jZXNzLmJyb3dzZXIgPT09IHRydWUgfHwgcHJvY2Vzcy5fX253anMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIuanMnKTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG59XG4iLCJ2YXIgZGVidWc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIWRlYnVnKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogb2ZmICovXG4gICAgICBkZWJ1ZyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKShcImZvbGxvdy1yZWRpcmVjdHNcIik7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyAvKiAqLyB9XG4gICAgaWYgKHR5cGVvZiBkZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHsgLyogKi8gfTtcbiAgICB9XG4gIH1cbiAgZGVidWcuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCJ2YXIgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbnZhciBVUkwgPSB1cmwuVVJMO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuV3JpdGFibGU7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCIuL2RlYnVnXCIpO1xuXG4vLyBQcmV2ZW50aXZlIHBsYXRmb3JtIGRldGVjdGlvblxuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbihmdW5jdGlvbiBkZXRlY3RVbnN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICB2YXIgbG9va3NMaWtlTm9kZSA9IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiO1xuICB2YXIgbG9va3NMaWtlQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuICB2YXIgbG9va3NMaWtlVjggPSBpc0Z1bmN0aW9uKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKTtcbiAgaWYgKCFsb29rc0xpa2VOb2RlICYmIChsb29rc0xpa2VCcm93c2VyIHx8ICFsb29rc0xpa2VWOCkpIHtcbiAgICBjb25zb2xlLndhcm4oXCJUaGUgZm9sbG93LXJlZGlyZWN0cyBwYWNrYWdlIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGJyb3dzZXIgYnVpbGRzLlwiKTtcbiAgfVxufSgpKTtcblxuLy8gV2hldGhlciB0byB1c2UgdGhlIG5hdGl2ZSBVUkwgb2JqZWN0IG9yIHRoZSBsZWdhY3kgdXJsIG1vZHVsZVxudmFyIHVzZU5hdGl2ZVVSTCA9IGZhbHNlO1xudHJ5IHtcbiAgYXNzZXJ0KG5ldyBVUkwoXCJcIikpO1xufVxuY2F0Y2ggKGVycm9yKSB7XG4gIHVzZU5hdGl2ZVVSTCA9IGVycm9yLmNvZGUgPT09IFwiRVJSX0lOVkFMSURfVVJMXCI7XG59XG5cbi8vIFVSTCBmaWVsZHMgdG8gcHJlc2VydmUgaW4gY29weSBvcGVyYXRpb25zXG52YXIgcHJlc2VydmVkVXJsRmllbGRzID0gW1xuICBcImF1dGhcIixcbiAgXCJob3N0XCIsXG4gIFwiaG9zdG5hbWVcIixcbiAgXCJocmVmXCIsXG4gIFwicGF0aFwiLFxuICBcInBhdGhuYW1lXCIsXG4gIFwicG9ydFwiLFxuICBcInByb3RvY29sXCIsXG4gIFwicXVlcnlcIixcbiAgXCJzZWFyY2hcIixcbiAgXCJoYXNoXCIsXG5dO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50cyA9IFtcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImNvbm5lY3RcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl07XG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHRoaXMuX3JlZGlyZWN0YWJsZS5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfTtcbn0pO1xuXG4vLyBFcnJvciB0eXBlcyB3aXRoIGNvZGVzXG52YXIgSW52YWxpZFVybEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9JTlZBTElEX1VSTFwiLFxuICBcIkludmFsaWQgVVJMXCIsXG4gIFR5cGVFcnJvclxuKTtcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZFwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCIsXG4gIFJlZGlyZWN0aW9uRXJyb3Jcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG52YXIgZGVzdHJveSA9IFdyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95IHx8IG5vb3A7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNlbGYuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG4gICAgfVxuICAgIGNhdGNoIChjYXVzZSkge1xuICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgY2F1c2UgaW5zdGFuY2VvZiBSZWRpcmVjdGlvbkVycm9yID9cbiAgICAgICAgY2F1c2UgOiBuZXcgUmVkaXJlY3Rpb25FcnJvcih7IGNhdXNlOiBjYXVzZSB9KSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBlcmZvcm0gdGhlIGZpcnN0IHJlcXVlc3RcbiAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbn1cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZS5wcm90b3R5cGUpO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5hYm9ydCgpO1xuICB0aGlzLmVtaXQoXCJhYm9ydFwiKTtcbn07XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QsIGVycm9yKTtcbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBXcml0ZXMgYnVmZmVyZWQgZGF0YSB0byB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFdyaXRpbmcgaXMgbm90IGFsbG93ZWQgaWYgZW5kIGhhcyBiZWVuIGNhbGxlZFxuICBpZiAodGhpcy5fZW5kaW5nKSB7XG4gICAgdGhyb3cgbmV3IFdyaXRlQWZ0ZXJFbmRFcnJvcigpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgYW5kIHNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICghaXNTdHJpbmcoZGF0YSkgJiYgIWlzQnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAoaXNGdW5jdGlvbihlbmNvZGluZykpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvcigpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVuY29kaW5nKSkge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBpZiBuZWVkZWQgYW5kIGVuZFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLl9lbmRlZCA9IHRoaXMuX2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gICAgdGhpcy53cml0ZShkYXRhLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlO1xuICAgICAgY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vLyBTZXRzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG4vLyBDbGVhcnMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV07XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUhlYWRlcihuYW1lKTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lb3V0IGZvciBhbGwgdW5kZXJseWluZyByZXF1ZXN0c1xuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChtc2VjcywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIERlc3Ryb3lzIHRoZSBzb2NrZXQgb24gdGltZW91dFxuICBmdW5jdGlvbiBkZXN0cm95T25UaW1lb3V0KHNvY2tldCkge1xuICAgIHNvY2tldC5zZXRUaW1lb3V0KG1zZWNzKTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgICBzb2NrZXQuYWRkTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgfVxuXG4gIC8vIFNldHMgdXAgYSB0aW1lciB0byB0cmlnZ2VyIGEgdGltZW91dCBldmVudFxuICBmdW5jdGlvbiBzdGFydFRpbWVyKHNvY2tldCkge1xuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgfVxuICAgIHNlbGYuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdChcInRpbWVvdXRcIik7XG4gICAgICBjbGVhclRpbWVyKCk7XG4gICAgfSwgbXNlY3MpO1xuICAgIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KTtcbiAgfVxuXG4gIC8vIFN0b3BzIGEgdGltZW91dCBmcm9tIHRyaWdnZXJpbmdcbiAgZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAvLyBDbGVhciB0aGUgdGltZW91dFxuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgICBzZWxmLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBhbGwgYXR0YWNoZWQgbGlzdGVuZXJzXG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBpZiAoIXNlbGYuc29ja2V0KSB7XG4gICAgICBzZWxmLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVMaXN0ZW5lcihcInNvY2tldFwiLCBzdGFydFRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdHRhY2ggY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHRoZSB0aW1lciBpZiBvciB3aGVuIHRoZSBzb2NrZXQgaXMgb3BlbmVkXG4gIGlmICh0aGlzLnNvY2tldCkge1xuICAgIHN0YXJ0VGltZXIodGhpcy5zb2NrZXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uY2UoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gIH1cblxuICAvLyBDbGVhbiB1cCBvbiBldmVudHNcbiAgdGhpcy5vbihcInNvY2tldFwiLCBkZXN0cm95T25UaW1lb3V0KTtcbiAgdGhpcy5vbihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwiZXJyb3JcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub24oXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJmbHVzaEhlYWRlcnNcIiwgXCJnZXRIZWFkZXJcIixcbiAgXCJzZXROb0RlbGF5XCIsIFwic2V0U29ja2V0S2VlcEFsaXZlXCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fc2FuaXRpemVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gRW5zdXJlIGhlYWRlcnMgYXJlIGFsd2F5cyBwcmVzZW50XG4gIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gRXhlY3V0ZXMgdGhlIG5leHQgbmF0aXZlIHJlcXVlc3QgKGluaXRpYWwgb3IgcmVkaXJlY3QpXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcGVyZm9ybVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIExvYWQgdGhlIG5hdGl2ZSBwcm90b2NvbFxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLnByb3RvY29sO1xuICB2YXIgbmF0aXZlUHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLm5hdGl2ZVByb3RvY29sc1twcm90b2NvbF07XG4gIGlmICghbmF0aXZlUHJvdG9jb2wpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCk7XG4gIH1cblxuICAvLyBJZiBzcGVjaWZpZWQsIHVzZSB0aGUgYWdlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdG9jb2xcbiAgLy8gKEhUVFAgYW5kIEhUVFBTIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzKVxuICBpZiAodGhpcy5fb3B0aW9ucy5hZ2VudHMpIHtcbiAgICB2YXIgc2NoZW1lID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpO1xuICAgIHRoaXMuX29wdGlvbnMuYWdlbnQgPSB0aGlzLl9vcHRpb25zLmFnZW50c1tzY2hlbWVdO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYXRpdmUgcmVxdWVzdCBhbmQgc2V0IHVwIGl0cyBldmVudCBoYW5kbGVyc1xuICB2YXIgcmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0ID1cbiAgICAgICAgbmF0aXZlUHJvdG9jb2wucmVxdWVzdCh0aGlzLl9vcHRpb25zLCB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlKTtcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgcmVxdWVzdC5vbihldmVudCwgZXZlbnRIYW5kbGVyc1tldmVudF0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMMKnNS4zLjE6IFdoZW4gbWFraW5nIGEgcmVxdWVzdCBkaXJlY3RseSB0byBhbiBvcmlnaW4gc2VydmVyLCBb4oCmXVxuICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgb25seSB0aGUgYWJzb2x1dGUgcGF0aCBb4oCmXSBhcyB0aGUgcmVxdWVzdC10YXJnZXQuXG4gIHRoaXMuX2N1cnJlbnRVcmwgPSAvXlxcLy8udGVzdCh0aGlzLl9vcHRpb25zLnBhdGgpID9cbiAgICB1cmwuZm9ybWF0KHRoaXMuX29wdGlvbnMpIDpcbiAgICAvLyBXaGVuIG1ha2luZyBhIHJlcXVlc3QgdG8gYSBwcm94eSwgW+KApl1cbiAgICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgdGhlIHRhcmdldCBVUkkgaW4gYWJzb2x1dGUtZm9ybSBb4oCmXS5cbiAgICB0aGlzLl9vcHRpb25zLnBhdGg7XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZFxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dChlcnJvcikge1xuICAgICAgLy8gT25seSB3cml0ZSBpZiB0aGlzIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHJlZGlyZWN0ZWQgeWV0XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgaWYgKHJlcXVlc3QgPT09IHNlbGYuX2N1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICAgIC8vIFJlcG9ydCBhbnkgd3JpdGUgZXJyb3JzXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JpdGUgdGhlIG5leHQgYnVmZmVyIGlmIHRoZXJlIGFyZSBzdGlsbCBsZWZ0XG4gICAgICAgIGVsc2UgaWYgKGkgPCBidWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgICAgICAgICBpZiAoIXJlcXVlc3QuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0IGlmIGBlbmRgIGhhcyBiZWVuIGNhbGxlZCBvbiB1c1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KCkpO1xuICB9XG59O1xuXG4vLyBQcm9jZXNzZXMgYSByZXNwb25zZSBmcm9tIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcHJvY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIC8vIFN0b3JlIHRoZSByZWRpcmVjdGVkIHJlc3BvbnNlXG4gIHZhciBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cblxuICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIWxvY2F0aW9uIHx8IHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSBmYWxzZSB8fFxuICAgICAgc3RhdHVzQ29kZSA8IDMwMCB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwgc28gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICBkZXN0cm95UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICB0aHJvdyBuZXcgVG9vTWFueVJlZGlyZWN0c0Vycm9yKCk7XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgcmVxdWVzdCBoZWFkZXJzIGlmIGFwcGxpY2FibGVcbiAgdmFyIHJlcXVlc3RIZWFkZXJzO1xuICB2YXIgYmVmb3JlUmVkaXJlY3QgPSB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0O1xuICBpZiAoYmVmb3JlUmVkaXJlY3QpIHtcbiAgICByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgLy8gVGhlIEhvc3QgaGVhZGVyIHdhcyBzZXQgYnkgbmF0aXZlUHJvdG9jb2wucmVxdWVzdFxuICAgICAgSG9zdDogcmVzcG9uc2UucmVxLmdldEhlYWRlcihcImhvc3RcIiksXG4gICAgfSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAvLyBjYXJlIGZvciBtZXRob2RzIG5vdCBrbm93biB0byBiZSBzYWZlLCBb4oCmXVxuICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICB2YXIgbWV0aG9kID0gdGhpcy5fb3B0aW9ucy5tZXRob2Q7XG4gIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAvLyBSRkM3MjMxwqc2LjQuNDogVGhlIDMwMyAoU2VlIE90aGVyKSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhhdFxuICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgLy8gQSB1c2VyIGFnZW50IGNhbiBwZXJmb3JtIGEgcmV0cmlldmFsIHJlcXVlc3QgdGFyZ2V0aW5nIHRoYXQgVVJJXG4gICAgICAvLyAoYSBHRVQgb3IgSEVBRCByZXF1ZXN0IGlmIHVzaW5nIEhUVFApIFvigKZdXG4gICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgIHRoaXMuX29wdGlvbnMubWV0aG9kID0gXCJHRVRcIjtcbiAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15jb250ZW50LS9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgdmFyIGN1cnJlbnRIb3N0SGVhZGVyID0gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eaG9zdCQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcblxuICAvLyBJZiB0aGUgcmVkaXJlY3QgaXMgcmVsYXRpdmUsIGNhcnJ5IG92ZXIgdGhlIGhvc3Qgb2YgdGhlIGxhc3QgcmVxdWVzdFxuICB2YXIgY3VycmVudFVybFBhcnRzID0gcGFyc2VVcmwodGhpcy5fY3VycmVudFVybCk7XG4gIHZhciBjdXJyZW50SG9zdCA9IGN1cnJlbnRIb3N0SGVhZGVyIHx8IGN1cnJlbnRVcmxQYXJ0cy5ob3N0O1xuICB2YXIgY3VycmVudFVybCA9IC9eXFx3KzovLnRlc3QobG9jYXRpb24pID8gdGhpcy5fY3VycmVudFVybCA6XG4gICAgdXJsLmZvcm1hdChPYmplY3QuYXNzaWduKGN1cnJlbnRVcmxQYXJ0cywgeyBob3N0OiBjdXJyZW50SG9zdCB9KSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgdmFyIHJlZGlyZWN0VXJsID0gcmVzb2x2ZVVybChsb2NhdGlvbiwgY3VycmVudFVybCk7XG4gIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwuaHJlZik7XG4gIHRoaXMuX2lzUmVkaXJlY3QgPSB0cnVlO1xuICBzcHJlYWRVcmxPYmplY3QocmVkaXJlY3RVcmwsIHRoaXMuX29wdGlvbnMpO1xuXG4gIC8vIERyb3AgY29uZmlkZW50aWFsIGhlYWRlcnMgd2hlbiByZWRpcmVjdGluZyB0byBhIGxlc3Mgc2VjdXJlIHByb3RvY29sXG4gIC8vIG9yIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB0aGF0IGlzIG5vdCBhIHN1cGVyZG9tYWluXG4gIGlmIChyZWRpcmVjdFVybC5wcm90b2NvbCAhPT0gY3VycmVudFVybFBhcnRzLnByb3RvY29sICYmXG4gICAgIHJlZGlyZWN0VXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiIHx8XG4gICAgIHJlZGlyZWN0VXJsLmhvc3QgIT09IGN1cnJlbnRIb3N0ICYmXG4gICAgICFpc1N1YmRvbWFpbihyZWRpcmVjdFVybC5ob3N0LCBjdXJyZW50SG9zdCkpIHtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL14oPzooPzpwcm94eS0pP2F1dGhvcml6YXRpb258Y29va2llKSQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIEV2YWx1YXRlIHRoZSBiZWZvcmVSZWRpcmVjdCBjYWxsYmFja1xuICBpZiAoaXNGdW5jdGlvbihiZWZvcmVSZWRpcmVjdCkpIHtcbiAgICB2YXIgcmVzcG9uc2VEZXRhaWxzID0ge1xuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfTtcbiAgICB2YXIgcmVxdWVzdERldGFpbHMgPSB7XG4gICAgICB1cmw6IGN1cnJlbnRVcmwsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG4gICAgYmVmb3JlUmVkaXJlY3QodGhpcy5fb3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzLCByZXF1ZXN0RGV0YWlscyk7XG4gICAgdGhpcy5fc2FuaXRpemVPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiByZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgLy8gUGFyc2UgcGFyYW1ldGVycywgZW5zdXJpbmcgdGhhdCBpbnB1dCBpcyBhbiBvYmplY3RcbiAgICAgIGlmIChpc1VSTChpbnB1dCkpIHtcbiAgICAgICAgaW5wdXQgPSBzcHJlYWRVcmxPYmplY3QoaW5wdXQpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgICAgIGlucHV0ID0gc3ByZWFkVXJsT2JqZWN0KHBhcnNlVXJsKGlucHV0KSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdmFsaWRhdGVVcmwoaW5wdXQpO1xuICAgICAgICBpbnB1dCA9IHsgcHJvdG9jb2w6IHByb3RvY29sIH07XG4gICAgICB9XG4gICAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWF4UmVkaXJlY3RzOiBleHBvcnRzLm1heFJlZGlyZWN0cyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogZXhwb3J0cy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgfSwgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5uYXRpdmVQcm90b2NvbHMgPSBuYXRpdmVQcm90b2NvbHM7XG4gICAgICBpZiAoIWlzU3RyaW5nKG9wdGlvbnMuaG9zdCkgJiYgIWlzU3RyaW5nKG9wdGlvbnMuaG9zdG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBcIjo6MVwiO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IC8qIGVtcHR5ICovIH1cblxuZnVuY3Rpb24gcGFyc2VVcmwoaW5wdXQpIHtcbiAgdmFyIHBhcnNlZDtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgaWYgKHVzZU5hdGl2ZVVSTCkge1xuICAgIHBhcnNlZCA9IG5ldyBVUkwoaW5wdXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIEVuc3VyZSB0aGUgVVJMIGlzIHZhbGlkIGFuZCBhYnNvbHV0ZVxuICAgIHBhcnNlZCA9IHZhbGlkYXRlVXJsKHVybC5wYXJzZShpbnB1dCkpO1xuICAgIGlmICghaXNTdHJpbmcocGFyc2VkLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRVcmxFcnJvcih7IGlucHV0IH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlbGF0aXZlLCBiYXNlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIHJldHVybiB1c2VOYXRpdmVVUkwgPyBuZXcgVVJMKHJlbGF0aXZlLCBiYXNlKSA6IHBhcnNlVXJsKHVybC5yZXNvbHZlKGJhc2UsIHJlbGF0aXZlKSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVXJsKGlucHV0KSB7XG4gIGlmICgvXlxcWy8udGVzdChpbnB1dC5ob3N0bmFtZSkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSQvaS50ZXN0KGlucHV0Lmhvc3RuYW1lKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVXJsRXJyb3IoeyBpbnB1dDogaW5wdXQuaHJlZiB8fCBpbnB1dCB9KTtcbiAgfVxuICBpZiAoL15cXFsvLnRlc3QoaW5wdXQuaG9zdCkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSg6XFxkKyk/JC9pLnRlc3QoaW5wdXQuaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFVybEVycm9yKHsgaW5wdXQ6IGlucHV0LmhyZWYgfHwgaW5wdXQgfSk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufVxuXG5mdW5jdGlvbiBzcHJlYWRVcmxPYmplY3QodXJsT2JqZWN0LCB0YXJnZXQpIHtcbiAgdmFyIHNwcmVhZCA9IHRhcmdldCB8fCB7fTtcbiAgZm9yICh2YXIga2V5IG9mIHByZXNlcnZlZFVybEZpZWxkcykge1xuICAgIHNwcmVhZFtrZXldID0gdXJsT2JqZWN0W2tleV07XG4gIH1cblxuICAvLyBGaXggSVB2NiBob3N0bmFtZVxuICBpZiAoc3ByZWFkLmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgc3ByZWFkLmhvc3RuYW1lID0gc3ByZWFkLmhvc3RuYW1lLnNsaWNlKDEsIC0xKTtcbiAgfVxuICAvLyBFbnN1cmUgcG9ydCBpcyBhIG51bWJlclxuICBpZiAoc3ByZWFkLnBvcnQgIT09IFwiXCIpIHtcbiAgICBzcHJlYWQucG9ydCA9IE51bWJlcihzcHJlYWQucG9ydCk7XG4gIH1cbiAgLy8gQ29uY2F0ZW5hdGUgcGF0aFxuICBzcHJlYWQucGF0aCA9IHNwcmVhZC5zZWFyY2ggPyBzcHJlYWQucGF0aG5hbWUgKyBzcHJlYWQuc2VhcmNoIDogc3ByZWFkLnBhdGhuYW1lO1xuXG4gIHJldHVybiBzcHJlYWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1hdGNoaW5nSGVhZGVycyhyZWdleCwgaGVhZGVycykge1xuICB2YXIgbGFzdFZhbHVlO1xuICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgIGlmIChyZWdleC50ZXN0KGhlYWRlcikpIHtcbiAgICAgIGxhc3RWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyXTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG4gIHJldHVybiAobGFzdFZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBsYXN0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIpID9cbiAgICB1bmRlZmluZWQgOiBTdHJpbmcobGFzdFZhbHVlKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBtZXNzYWdlLCBiYXNlQ2xhc3MpIHtcbiAgLy8gQ3JlYXRlIGNvbnN0cnVjdG9yXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKHByb3BlcnRpZXMpIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgIGlmIChpc0Z1bmN0aW9uKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcHJvcGVydGllcyB8fCB7fSk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLmNhdXNlID8gbWVzc2FnZSArIFwiOiBcIiArIHRoaXMuY2F1c2UubWVzc2FnZSA6IG1lc3NhZ2U7XG4gIH1cblxuICAvLyBBdHRhY2ggY29uc3RydWN0b3IgYW5kIHNldCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlID0gbmV3IChiYXNlQ2xhc3MgfHwgRXJyb3IpKCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEN1c3RvbUVycm9yLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogQ3VzdG9tRXJyb3IsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBcIkVycm9yIFtcIiArIGNvZGUgKyBcIl1cIixcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lSZXF1ZXN0KHJlcXVlc3QsIGVycm9yKSB7XG4gIGZvciAodmFyIGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgfVxuICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgbm9vcCk7XG4gIHJlcXVlc3QuZGVzdHJveShlcnJvcik7XG59XG5cbmZ1bmN0aW9uIGlzU3ViZG9tYWluKHN1YmRvbWFpbiwgZG9tYWluKSB7XG4gIGFzc2VydChpc1N0cmluZyhzdWJkb21haW4pICYmIGlzU3RyaW5nKGRvbWFpbikpO1xuICB2YXIgZG90ID0gc3ViZG9tYWluLmxlbmd0aCAtIGRvbWFpbi5sZW5ndGggLSAxO1xuICByZXR1cm4gZG90ID4gMCAmJiBzdWJkb21haW5bZG90XSA9PT0gXCIuXCIgJiYgc3ViZG9tYWluLmVuZHNXaXRoKGRvbWFpbik7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIChcImxlbmd0aFwiIGluIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNVUkwodmFsdWUpIHtcbiAgcmV0dXJuIFVSTCAmJiB2YWx1ZSBpbnN0YW5jZW9mIFVSTDtcbn1cblxuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSB3cmFwKHsgaHR0cDogaHR0cCwgaHR0cHM6IGh0dHBzIH0pO1xubW9kdWxlLmV4cG9ydHMud3JhcCA9IHdyYXA7XG4iLCJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS43LjdcIjsiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmNvbnN0IERBVEFfVVJMX1BBVFRFUk4gPSAvXig/OihbXjtdKyk7KT8oPzpbXjtdKzspPyhiYXNlNjR8KSwoW1xcc1xcU10qKSQvO1xuXG4vKipcbiAqIFBhcnNlIGRhdGEgdXJpIHRvIGEgQnVmZmVyIG9yIEJsb2JcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJpXG4gKiBAcGFyYW0gez9Cb29sZWFufSBhc0Jsb2JcbiAqIEBwYXJhbSB7P09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHs/RnVuY3Rpb259IG9wdGlvbnMuQmxvYlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ8QmxvYn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZnJvbURhdGFVUkkodXJpLCBhc0Jsb2IsIG9wdGlvbnMpIHtcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zICYmIG9wdGlvbnMuQmxvYiB8fCBwbGF0Zm9ybS5jbGFzc2VzLkJsb2I7XG4gIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbCh1cmkpO1xuXG4gIGlmIChhc0Jsb2IgPT09IHVuZGVmaW5lZCAmJiBfQmxvYikge1xuICAgIGFzQmxvYiA9IHRydWU7XG4gIH1cblxuICBpZiAocHJvdG9jb2wgPT09ICdkYXRhJykge1xuICAgIHVyaSA9IHByb3RvY29sLmxlbmd0aCA/IHVyaS5zbGljZShwcm90b2NvbC5sZW5ndGggKyAxKSA6IHVyaTtcblxuICAgIGNvbnN0IG1hdGNoID0gREFUQV9VUkxfUEFUVEVSTi5leGVjKHVyaSk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignSW52YWxpZCBVUkwnLCBBeGlvc0Vycm9yLkVSUl9JTlZBTElEX1VSTCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWltZSA9IG1hdGNoWzFdO1xuICAgIGNvbnN0IGlzQmFzZTY0ID0gbWF0Y2hbMl07XG4gICAgY29uc3QgYm9keSA9IG1hdGNoWzNdO1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGRlY29kZVVSSUNvbXBvbmVudChib2R5KSwgaXNCYXNlNjQgPyAnYmFzZTY0JyA6ICd1dGY4Jyk7XG5cbiAgICBpZiAoYXNCbG9iKSB7XG4gICAgICBpZiAoIV9CbG9iKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQnLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgX0Jsb2IoW2J1ZmZlcl0sIHt0eXBlOiBtaW1lfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JUKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY29uc3Qga0ludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmNsYXNzIEF4aW9zVHJhbnNmb3JtU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlRyYW5zZm9ybXtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgICAgbWF4UmF0ZTogMCxcbiAgICAgIGNodW5rU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgbWluQ2h1bmtTaXplOiAxMDAsXG4gICAgICB0aW1lV2luZG93OiA1MDAsXG4gICAgICB0aWNrc1JhdGU6IDIsXG4gICAgICBzYW1wbGVzQ291bnQ6IDE1XG4gICAgfSwgbnVsbCwgKHByb3AsIHNvdXJjZSkgPT4ge1xuICAgICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2VbcHJvcF0pO1xuICAgIH0pO1xuXG4gICAgc3VwZXIoe1xuICAgICAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrOiBvcHRpb25zLmNodW5rU2l6ZVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1trSW50ZXJuYWxzXSA9IHtcbiAgICAgIHRpbWVXaW5kb3c6IG9wdGlvbnMudGltZVdpbmRvdyxcbiAgICAgIGNodW5rU2l6ZTogb3B0aW9ucy5jaHVua1NpemUsXG4gICAgICBtYXhSYXRlOiBvcHRpb25zLm1heFJhdGUsXG4gICAgICBtaW5DaHVua1NpemU6IG9wdGlvbnMubWluQ2h1bmtTaXplLFxuICAgICAgYnl0ZXNTZWVuOiAwLFxuICAgICAgaXNDYXB0dXJlZDogZmFsc2UsXG4gICAgICBub3RpZmllZEJ5dGVzTG9hZGVkOiAwLFxuICAgICAgdHM6IERhdGUubm93KCksXG4gICAgICBieXRlczogMCxcbiAgICAgIG9uUmVhZENhbGxiYWNrOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50ID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICAgIGlmICghaW50ZXJuYWxzLmlzQ2FwdHVyZWQpIHtcbiAgICAgICAgICBpbnRlcm5hbHMuaXNDYXB0dXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF9yZWFkKHNpemUpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdO1xuXG4gICAgaWYgKGludGVybmFscy5vblJlYWRDYWxsYmFjaykge1xuICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLl9yZWFkKHNpemUpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1trSW50ZXJuYWxzXTtcbiAgICBjb25zdCBtYXhSYXRlID0gaW50ZXJuYWxzLm1heFJhdGU7XG5cbiAgICBjb25zdCByZWFkYWJsZUhpZ2hXYXRlck1hcmsgPSB0aGlzLnJlYWRhYmxlSGlnaFdhdGVyTWFyaztcblxuICAgIGNvbnN0IHRpbWVXaW5kb3cgPSBpbnRlcm5hbHMudGltZVdpbmRvdztcblxuICAgIGNvbnN0IGRpdmlkZXIgPSAxMDAwIC8gdGltZVdpbmRvdztcbiAgICBjb25zdCBieXRlc1RocmVzaG9sZCA9IChtYXhSYXRlIC8gZGl2aWRlcik7XG4gICAgY29uc3QgbWluQ2h1bmtTaXplID0gaW50ZXJuYWxzLm1pbkNodW5rU2l6ZSAhPT0gZmFsc2UgPyBNYXRoLm1heChpbnRlcm5hbHMubWluQ2h1bmtTaXplLCBieXRlc1RocmVzaG9sZCAqIDAuMDEpIDogMDtcblxuICAgIGNvbnN0IHB1c2hDaHVuayA9IChfY2h1bmssIF9jYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuYnl0ZUxlbmd0aChfY2h1bmspO1xuICAgICAgaW50ZXJuYWxzLmJ5dGVzU2VlbiArPSBieXRlcztcbiAgICAgIGludGVybmFscy5ieXRlcyArPSBieXRlcztcblxuICAgICAgaW50ZXJuYWxzLmlzQ2FwdHVyZWQgJiYgdGhpcy5lbWl0KCdwcm9ncmVzcycsIGludGVybmFscy5ieXRlc1NlZW4pO1xuXG4gICAgICBpZiAodGhpcy5wdXNoKF9jaHVuaykpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgIGludGVybmFscy5vblJlYWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybUNodW5rID0gKF9jaHVuaywgX2NhbGxiYWNrKSA9PiB7XG4gICAgICBjb25zdCBjaHVua1NpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChfY2h1bmspO1xuICAgICAgbGV0IGNodW5rUmVtYWluZGVyID0gbnVsbDtcbiAgICAgIGxldCBtYXhDaHVua1NpemUgPSByZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gICAgICBsZXQgYnl0ZXNMZWZ0O1xuICAgICAgbGV0IHBhc3NlZCA9IDA7XG5cbiAgICAgIGlmIChtYXhSYXRlKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgaWYgKCFpbnRlcm5hbHMudHMgfHwgKHBhc3NlZCA9IChub3cgLSBpbnRlcm5hbHMudHMpKSA+PSB0aW1lV2luZG93KSB7XG4gICAgICAgICAgaW50ZXJuYWxzLnRzID0gbm93O1xuICAgICAgICAgIGJ5dGVzTGVmdCA9IGJ5dGVzVGhyZXNob2xkIC0gaW50ZXJuYWxzLmJ5dGVzO1xuICAgICAgICAgIGludGVybmFscy5ieXRlcyA9IGJ5dGVzTGVmdCA8IDAgPyAtYnl0ZXNMZWZ0IDogMDtcbiAgICAgICAgICBwYXNzZWQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXNMZWZ0ID0gYnl0ZXNUaHJlc2hvbGQgLSBpbnRlcm5hbHMuYnl0ZXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhSYXRlKSB7XG4gICAgICAgIGlmIChieXRlc0xlZnQgPD0gMCkge1xuICAgICAgICAgIC8vIG5leHQgdGltZSB3aW5kb3dcbiAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBfY2FsbGJhY2sobnVsbCwgX2NodW5rKTtcbiAgICAgICAgICB9LCB0aW1lV2luZG93IC0gcGFzc2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChieXRlc0xlZnQgPCBtYXhDaHVua1NpemUpIHtcbiAgICAgICAgICBtYXhDaHVua1NpemUgPSBieXRlc0xlZnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1heENodW5rU2l6ZSAmJiBjaHVua1NpemUgPiBtYXhDaHVua1NpemUgJiYgKGNodW5rU2l6ZSAtIG1heENodW5rU2l6ZSkgPiBtaW5DaHVua1NpemUpIHtcbiAgICAgICAgY2h1bmtSZW1haW5kZXIgPSBfY2h1bmsuc3ViYXJyYXkobWF4Q2h1bmtTaXplKTtcbiAgICAgICAgX2NodW5rID0gX2NodW5rLnN1YmFycmF5KDAsIG1heENodW5rU2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIHB1c2hDaHVuayhfY2h1bmssIGNodW5rUmVtYWluZGVyID8gKCkgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKF9jYWxsYmFjaywgbnVsbCwgY2h1bmtSZW1haW5kZXIpO1xuICAgICAgfSA6IF9jYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHRyYW5zZm9ybUNodW5rKGNodW5rLCBmdW5jdGlvbiB0cmFuc2Zvcm1OZXh0Q2h1bmsoZXJyLCBfY2h1bmspIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfY2h1bmspIHtcbiAgICAgICAgdHJhbnNmb3JtQ2h1bmsoX2NodW5rLCB0cmFuc2Zvcm1OZXh0Q2h1bmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NUcmFuc2Zvcm1TdHJlYW07XG4iLCJjb25zdCB7YXN5bmNJdGVyYXRvcn0gPSBTeW1ib2w7XG5cbmNvbnN0IHJlYWRCbG9iID0gYXN5bmMgZnVuY3Rpb24qIChibG9iKSB7XG4gIGlmIChibG9iLnN0cmVhbSkge1xuICAgIHlpZWxkKiBibG9iLnN0cmVhbSgpXG4gIH0gZWxzZSBpZiAoYmxvYi5hcnJheUJ1ZmZlcikge1xuICAgIHlpZWxkIGF3YWl0IGJsb2IuYXJyYXlCdWZmZXIoKVxuICB9IGVsc2UgaWYgKGJsb2JbYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogYmxvYlthc3luY0l0ZXJhdG9yXSgpO1xuICB9IGVsc2Uge1xuICAgIHlpZWxkIGJsb2I7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVhZEJsb2I7XG4iLCJpbXBvcnQge1RleHRFbmNvZGVyfSBmcm9tICd1dGlsJztcbmltcG9ydCB7UmVhZGFibGV9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgcmVhZEJsb2IgZnJvbSBcIi4vcmVhZEJsb2IuanNcIjtcblxuY29uc3QgQk9VTkRBUllfQUxQSEFCRVQgPSB1dGlscy5BTFBIQUJFVC5BTFBIQV9ESUdJVCArICctXyc7XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5cbmNvbnN0IENSTEYgPSAnXFxyXFxuJztcbmNvbnN0IENSTEZfQllURVMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoQ1JMRik7XG5jb25zdCBDUkxGX0JZVEVTX0NPVU5UID0gMjtcblxuY2xhc3MgRm9ybURhdGFQYXJ0IHtcbiAgY29uc3RydWN0b3IobmFtZSwgdmFsdWUpIHtcbiAgICBjb25zdCB7ZXNjYXBlTmFtZX0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgIGNvbnN0IGlzU3RyaW5nVmFsdWUgPSB1dGlscy5pc1N0cmluZyh2YWx1ZSk7XG5cbiAgICBsZXQgaGVhZGVycyA9IGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIke2VzY2FwZU5hbWUobmFtZSl9XCIke1xuICAgICAgIWlzU3RyaW5nVmFsdWUgJiYgdmFsdWUubmFtZSA/IGA7IGZpbGVuYW1lPVwiJHtlc2NhcGVOYW1lKHZhbHVlLm5hbWUpfVwiYCA6ICcnXG4gICAgfSR7Q1JMRn1gO1xuXG4gICAgaWYgKGlzU3RyaW5nVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gdGV4dEVuY29kZXIuZW5jb2RlKFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXFxyP1xcbnxcXHJcXG4/L2csIENSTEYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycyArPSBgQ29udGVudC1UeXBlOiAke3ZhbHVlLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIn0ke0NSTEZ9YFxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVycyA9IHRleHRFbmNvZGVyLmVuY29kZShoZWFkZXJzICsgQ1JMRik7XG5cbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBpc1N0cmluZ1ZhbHVlID8gdmFsdWUuYnl0ZUxlbmd0aCA6IHZhbHVlLnNpemU7XG5cbiAgICB0aGlzLnNpemUgPSB0aGlzLmhlYWRlcnMuYnl0ZUxlbmd0aCArIHRoaXMuY29udGVudExlbmd0aCArIENSTEZfQllURVNfQ09VTlQ7XG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGFzeW5jICplbmNvZGUoKXtcbiAgICB5aWVsZCB0aGlzLmhlYWRlcnM7XG5cbiAgICBjb25zdCB7dmFsdWV9ID0gdGhpcztcblxuICAgIGlmKHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCogcmVhZEJsb2IodmFsdWUpO1xuICAgIH1cblxuICAgIHlpZWxkIENSTEZfQllURVM7XG4gIH1cblxuICBzdGF0aWMgZXNjYXBlTmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKG5hbWUpLnJlcGxhY2UoL1tcXHJcXG5cIl0vZywgKG1hdGNoKSA9PiAoe1xuICAgICAgICAnXFxyJyA6ICclMEQnLFxuICAgICAgICAnXFxuJyA6ICclMEEnLFxuICAgICAgICAnXCInIDogJyUyMicsXG4gICAgICB9W21hdGNoXSkpO1xuICB9XG59XG5cbmNvbnN0IGZvcm1EYXRhVG9TdHJlYW0gPSAoZm9ybSwgaGVhZGVyc0hhbmRsZXIsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qge1xuICAgIHRhZyA9ICdmb3JtLWRhdGEtYm91bmRhcnknLFxuICAgIHNpemUgPSAyNSxcbiAgICBib3VuZGFyeSA9IHRhZyArICctJyArIHV0aWxzLmdlbmVyYXRlU3RyaW5nKHNpemUsIEJPVU5EQVJZX0FMUEhBQkVUKVxuICB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZighdXRpbHMuaXNGb3JtRGF0YShmb3JtKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignRm9ybURhdGEgaW5zdGFuY2UgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmIChib3VuZGFyeS5sZW5ndGggPCAxIHx8IGJvdW5kYXJ5Lmxlbmd0aCA+IDcwKSB7XG4gICAgdGhyb3cgRXJyb3IoJ2JvdW5kYXJ5IG11c3QgYmUgMTAtNzAgY2hhcmFjdGVycyBsb25nJylcbiAgfVxuXG4gIGNvbnN0IGJvdW5kYXJ5Qnl0ZXMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoJy0tJyArIGJvdW5kYXJ5ICsgQ1JMRik7XG4gIGNvbnN0IGZvb3RlckJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKCctLScgKyBib3VuZGFyeSArICctLScgKyBDUkxGICsgQ1JMRik7XG4gIGxldCBjb250ZW50TGVuZ3RoID0gZm9vdGVyQnl0ZXMuYnl0ZUxlbmd0aDtcblxuICBjb25zdCBwYXJ0cyA9IEFycmF5LmZyb20oZm9ybS5lbnRyaWVzKCkpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IHBhcnQgPSBuZXcgRm9ybURhdGFQYXJ0KG5hbWUsIHZhbHVlKTtcbiAgICBjb250ZW50TGVuZ3RoICs9IHBhcnQuc2l6ZTtcbiAgICByZXR1cm4gcGFydDtcbiAgfSk7XG5cbiAgY29udGVudExlbmd0aCArPSBib3VuZGFyeUJ5dGVzLmJ5dGVMZW5ndGggKiBwYXJ0cy5sZW5ndGg7XG5cbiAgY29udGVudExlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGNvbnRlbnRMZW5ndGgpO1xuXG4gIGNvbnN0IGNvbXB1dGVkSGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YFxuICB9XG5cbiAgaWYgKE51bWJlci5pc0Zpbml0ZShjb250ZW50TGVuZ3RoKSkge1xuICAgIGNvbXB1dGVkSGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IGNvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBoZWFkZXJzSGFuZGxlciAmJiBoZWFkZXJzSGFuZGxlcihjb21wdXRlZEhlYWRlcnMpO1xuXG4gIHJldHVybiBSZWFkYWJsZS5mcm9tKChhc3luYyBmdW5jdGlvbiAqKCkge1xuICAgIGZvcihjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICB5aWVsZCBib3VuZGFyeUJ5dGVzO1xuICAgICAgeWllbGQqIHBhcnQuZW5jb2RlKCk7XG4gICAgfVxuXG4gICAgeWllbGQgZm9vdGVyQnl0ZXM7XG4gIH0pKCkpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb1N0cmVhbTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc3RyZWFtIGZyb20gXCJzdHJlYW1cIjtcblxuY2xhc3MgWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSBleHRlbmRzIHN0cmVhbS5UcmFuc2Zvcm0ge1xuICBfX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5fX3RyYW5zZm9ybTtcblxuICAgICAgLy8gQWRkIERlZmF1bHQgQ29tcHJlc3Npb24gaGVhZGVycyBpZiBubyB6bGliIGhlYWRlcnMgYXJlIHByZXNlbnRcbiAgICAgIGlmIChjaHVua1swXSAhPT0gMTIwKSB7IC8vIEhleDogNzhcbiAgICAgICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmFsbG9jKDIpO1xuICAgICAgICBoZWFkZXJbMF0gPSAxMjA7IC8vIEhleDogNzhcbiAgICAgICAgaGVhZGVyWzFdID0gMTU2OyAvLyBIZXg6IDlDIFxuICAgICAgICB0aGlzLnB1c2goaGVhZGVyLCBlbmNvZGluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtO1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5jb25zdCBjYWxsYmFja2lmeSA9IChmbiwgcmVkdWNlcikgPT4ge1xuICByZXR1cm4gdXRpbHMuaXNBc3luY0ZuKGZuKSA/IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgY2IgPSBhcmdzLnBvcCgpO1xuICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZWR1Y2VyID8gY2IobnVsbCwgLi4ucmVkdWNlcih2YWx1ZSkpIDogY2IobnVsbCwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNiKGVycik7XG4gICAgICB9XG4gICAgfSwgY2IpO1xuICB9IDogZm47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhbGxiYWNraWZ5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsIi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfVxuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKCBwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpXG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuIiwiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gXCIuL3NwZWVkb21ldGVyLmpzXCI7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSBcIi4vdGhyb3R0bGUuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufVxuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscy5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi8uLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCB7Z2V0UHJveHlGb3JVcmx9IGZyb20gJ3Byb3h5LWZyb20tZW52JztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0IGZvbGxvd1JlZGlyZWN0cyBmcm9tICdmb2xsb3ctcmVkaXJlY3RzJztcbmltcG9ydCB6bGliIGZyb20gJ3psaWInO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZyb21EYXRhVVJJIGZyb20gJy4uL2hlbHBlcnMvZnJvbURhdGFVUkkuanMnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgQXhpb3NUcmFuc2Zvcm1TdHJlYW0gZnJvbSAnLi4vaGVscGVycy9BeGlvc1RyYW5zZm9ybVN0cmVhbS5qcyc7XG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBmb3JtRGF0YVRvU3RyZWFtIGZyb20gXCIuLi9oZWxwZXJzL2Zvcm1EYXRhVG9TdHJlYW0uanNcIjtcbmltcG9ydCByZWFkQmxvYiBmcm9tIFwiLi4vaGVscGVycy9yZWFkQmxvYi5qc1wiO1xuaW1wb3J0IFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0gZnJvbSAnLi4vaGVscGVycy9abGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtLmpzJztcbmltcG9ydCBjYWxsYmFja2lmeSBmcm9tIFwiLi4vaGVscGVycy9jYWxsYmFja2lmeS5qc1wiO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlciwgcHJvZ3Jlc3NFdmVudERlY29yYXRvciwgYXN5bmNEZWNvcmF0b3J9IGZyb20gXCIuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzXCI7XG5cbmNvbnN0IHpsaWJPcHRpb25zID0ge1xuICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG59O1xuXG5jb25zdCBicm90bGlPcHRpb25zID0ge1xuICBmbHVzaDogemxpYi5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9GTFVTSCxcbiAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRkxVU0hcbn1cblxuY29uc3QgaXNCcm90bGlTdXBwb3J0ZWQgPSB1dGlscy5pc0Z1bmN0aW9uKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyk7XG5cbmNvbnN0IHtodHRwOiBodHRwRm9sbG93LCBodHRwczogaHR0cHNGb2xsb3d9ID0gZm9sbG93UmVkaXJlY3RzO1xuXG5jb25zdCBpc0h0dHBzID0gL2h0dHBzOj8vO1xuXG5jb25zdCBzdXBwb3J0ZWRQcm90b2NvbHMgPSBwbGF0Zm9ybS5wcm90b2NvbHMubWFwKHByb3RvY29sID0+IHtcbiAgcmV0dXJuIHByb3RvY29sICsgJzonO1xufSk7XG5cbmNvbnN0IGZsdXNoT25GaW5pc2ggPSAoc3RyZWFtLCBbdGhyb3R0bGVkLCBmbHVzaF0pID0+IHtcbiAgc3RyZWFtXG4gICAgLm9uKCdlbmQnLCBmbHVzaClcbiAgICAub24oJ2Vycm9yJywgZmx1c2gpO1xuXG4gIHJldHVybiB0aHJvdHRsZWQ7XG59XG5cbi8qKlxuICogSWYgdGhlIHByb3h5IG9yIGNvbmZpZyBiZWZvcmVSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICogb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT59XG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoQmVmb3JlUmVkaXJlY3Qob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKSB7XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eSkge1xuICAgIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5KG9wdGlvbnMpO1xuICB9XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcpIHtcbiAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKTtcbiAgfVxufVxuXG4vKipcbiAqIElmIHRoZSBwcm94eSBvciBjb25maWcgYWZ0ZXJSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBjb25maWdQcm94eSBjb25maWd1cmF0aW9uIGZyb20gQXhpb3Mgb3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvblxuICpcbiAqIEByZXR1cm5zIHtodHRwLkNsaWVudFJlcXVlc3RBcmdzfVxuICovXG5mdW5jdGlvbiBzZXRQcm94eShvcHRpb25zLCBjb25maWdQcm94eSwgbG9jYXRpb24pIHtcbiAgbGV0IHByb3h5ID0gY29uZmlnUHJveHk7XG4gIGlmICghcHJveHkgJiYgcHJveHkgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBnZXRQcm94eUZvclVybChsb2NhdGlvbik7XG4gICAgaWYgKHByb3h5VXJsKSB7XG4gICAgICBwcm94eSA9IG5ldyBVUkwocHJveHlVcmwpO1xuICAgIH1cbiAgfVxuICBpZiAocHJveHkpIHtcbiAgICAvLyBCYXNpYyBwcm94eSBhdXRob3JpemF0aW9uXG4gICAgaWYgKHByb3h5LnVzZXJuYW1lKSB7XG4gICAgICBwcm94eS5hdXRoID0gKHByb3h5LnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChwcm94eS5wYXNzd29yZCB8fCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3h5LmF1dGgpIHtcbiAgICAgIC8vIFN1cHBvcnQgcHJveHkgYXV0aCBvYmplY3QgZm9ybVxuICAgICAgaWYgKHByb3h5LmF1dGgudXNlcm5hbWUgfHwgcHJveHkuYXV0aC5wYXNzd29yZCkge1xuICAgICAgICBwcm94eS5hdXRoID0gKHByb3h5LmF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKHByb3h5LmF1dGgucGFzc3dvcmQgfHwgJycpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZTY0ID0gQnVmZmVyXG4gICAgICAgIC5mcm9tKHByb3h5LmF1dGgsICd1dGY4JylcbiAgICAgICAgLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIG9wdGlvbnMuaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljICcgKyBiYXNlNjQ7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBvcHRpb25zLmhvc3RuYW1lICsgKG9wdGlvbnMucG9ydCA/ICc6JyArIG9wdGlvbnMucG9ydCA6ICcnKTtcbiAgICBjb25zdCBwcm94eUhvc3QgPSBwcm94eS5ob3N0bmFtZSB8fCBwcm94eS5ob3N0O1xuICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwcm94eUhvc3Q7XG4gICAgLy8gUmVwbGFjZSAnaG9zdCcgc2luY2Ugb3B0aW9ucyBpcyBub3QgYSBVUkwgb2JqZWN0XG4gICAgb3B0aW9ucy5ob3N0ID0gcHJveHlIb3N0O1xuICAgIG9wdGlvbnMucG9ydCA9IHByb3h5LnBvcnQ7XG4gICAgb3B0aW9ucy5wYXRoID0gbG9jYXRpb247XG4gICAgaWYgKHByb3h5LnByb3RvY29sKSB7XG4gICAgICBvcHRpb25zLnByb3RvY29sID0gcHJveHkucHJvdG9jb2wuaW5jbHVkZXMoJzonKSA/IHByb3h5LnByb3RvY29sIDogYCR7cHJveHkucHJvdG9jb2x9OmA7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9ucy5iZWZvcmVSZWRpcmVjdHMucHJveHkgPSBmdW5jdGlvbiBiZWZvcmVSZWRpcmVjdChyZWRpcmVjdE9wdGlvbnMpIHtcbiAgICAvLyBDb25maWd1cmUgcHJveHkgZm9yIHJlZGlyZWN0ZWQgcmVxdWVzdCwgcGFzc2luZyB0aGUgb3JpZ2luYWwgY29uZmlnIHByb3h5IHRvIGFwcGx5XG4gICAgLy8gdGhlIGV4YWN0IHNhbWUgbG9naWMgYXMgaWYgdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdCB3YXMgcGVyZm9ybWVkIGJ5IGF4aW9zIGRpcmVjdGx5LlxuICAgIHNldFByb3h5KHJlZGlyZWN0T3B0aW9ucywgY29uZmlnUHJveHksIHJlZGlyZWN0T3B0aW9ucy5ocmVmKTtcbiAgfTtcbn1cblxuY29uc3QgaXNIdHRwQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB1dGlscy5raW5kT2YocHJvY2VzcykgPT09ICdwcm9jZXNzJztcblxuLy8gdGVtcG9yYXJ5IGhvdGZpeFxuXG5jb25zdCB3cmFwQXN5bmMgPSAoYXN5bmNFeGVjdXRvcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBvbkRvbmU7XG4gICAgbGV0IGlzRG9uZTtcblxuICAgIGNvbnN0IGRvbmUgPSAodmFsdWUsIGlzUmVqZWN0ZWQpID0+IHtcbiAgICAgIGlmIChpc0RvbmUpIHJldHVybjtcbiAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICBvbkRvbmUgJiYgb25Eb25lKHZhbHVlLCBpc1JlamVjdGVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBfcmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgZG9uZSh2YWx1ZSk7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgX3JlamVjdCA9IChyZWFzb24pID0+IHtcbiAgICAgIGRvbmUocmVhc29uLCB0cnVlKTtcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH1cblxuICAgIGFzeW5jRXhlY3V0b3IoX3Jlc29sdmUsIF9yZWplY3QsIChvbkRvbmVIYW5kbGVyKSA9PiAob25Eb25lID0gb25Eb25lSGFuZGxlcikpLmNhdGNoKF9yZWplY3QpO1xuICB9KVxufTtcblxuY29uc3QgcmVzb2x2ZUZhbWlseSA9ICh7YWRkcmVzcywgZmFtaWx5fSkgPT4ge1xuICBpZiAoIXV0aWxzLmlzU3RyaW5nKGFkZHJlc3MpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdhZGRyZXNzIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuICByZXR1cm4gKHtcbiAgICBhZGRyZXNzLFxuICAgIGZhbWlseTogZmFtaWx5IHx8IChhZGRyZXNzLmluZGV4T2YoJy4nKSA8IDAgPyA2IDogNClcbiAgfSk7XG59XG5cbmNvbnN0IGJ1aWxkQWRkcmVzc0VudHJ5ID0gKGFkZHJlc3MsIGZhbWlseSkgPT4gcmVzb2x2ZUZhbWlseSh1dGlscy5pc09iamVjdChhZGRyZXNzKSA/IGFkZHJlc3MgOiB7YWRkcmVzcywgZmFtaWx5fSk7XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xuZXhwb3J0IGRlZmF1bHQgaXNIdHRwQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIHdyYXBBc3luYyhhc3luYyBmdW5jdGlvbiBkaXNwYXRjaEh0dHBSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCwgb25Eb25lKSB7XG4gICAgbGV0IHtkYXRhLCBsb29rdXAsIGZhbWlseX0gPSBjb25maWc7XG4gICAgY29uc3Qge3Jlc3BvbnNlVHlwZSwgcmVzcG9uc2VFbmNvZGluZ30gPSBjb25maWc7XG4gICAgY29uc3QgbWV0aG9kID0gY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIGxldCBpc0RvbmU7XG4gICAgbGV0IHJlamVjdGVkID0gZmFsc2U7XG4gICAgbGV0IHJlcTtcblxuICAgIGlmIChsb29rdXApIHtcbiAgICAgIGNvbnN0IF9sb29rdXAgPSBjYWxsYmFja2lmeShsb29rdXAsICh2YWx1ZSkgPT4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pO1xuICAgICAgLy8gaG90Zml4IHRvIHN1cHBvcnQgb3B0LmFsbCBvcHRpb24gd2hpY2ggaXMgcmVxdWlyZWQgZm9yIG5vZGUgMjAueFxuICAgICAgbG9va3VwID0gKGhvc3RuYW1lLCBvcHQsIGNiKSA9PiB7XG4gICAgICAgIF9sb29rdXAoaG9zdG5hbWUsIG9wdCwgKGVyciwgYXJnMCwgYXJnMSkgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFkZHJlc3NlcyA9IHV0aWxzLmlzQXJyYXkoYXJnMCkgPyBhcmcwLm1hcChhZGRyID0+IGJ1aWxkQWRkcmVzc0VudHJ5KGFkZHIpKSA6IFtidWlsZEFkZHJlc3NFbnRyeShhcmcwLCBhcmcxKV07XG5cbiAgICAgICAgICBvcHQuYWxsID8gY2IoZXJyLCBhZGRyZXNzZXMpIDogY2IoZXJyLCBhZGRyZXNzZXNbMF0uYWRkcmVzcywgYWRkcmVzc2VzWzBdLmZhbWlseSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyeSBpbnRlcm5hbCBlbWl0dGVyIHVudGlsIHRoZSBBeGlvc1JlcXVlc3QgY2xhc3Mgd2lsbCBiZSBpbXBsZW1lbnRlZFxuICAgIGNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdCBvbkZpbmlzaGVkID0gKCkgPT4ge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYWJvcnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpO1xuICAgICAgfVxuXG4gICAgICBlbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIG9uRG9uZSgodmFsdWUsIGlzUmVqZWN0ZWQpID0+IHtcbiAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICBpZiAoaXNSZWplY3RlZCkge1xuICAgICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgZW1pdHRlci5lbWl0KCdhYm9ydCcsICFyZWFzb24gfHwgcmVhc29uLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcSkgOiByZWFzb24pO1xuICAgIH1cblxuICAgIGVtaXR0ZXIub25jZSgnYWJvcnQnLCByZWplY3QpO1xuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShhYm9ydCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBhYm9ydCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwoZnVsbFBhdGgsIHBsYXRmb3JtLmhhc0Jyb3dzZXJFbnYgPyBwbGF0Zm9ybS5vcmlnaW4gOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VkLnByb3RvY29sIHx8IHN1cHBvcnRlZFByb3RvY29sc1swXTtcblxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2RhdGE6Jykge1xuICAgICAgbGV0IGNvbnZlcnRlZERhdGE7XG5cbiAgICAgIGlmIChtZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHJldHVybiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgICAgc3RhdHVzOiA0MDUsXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ21ldGhvZCBub3QgYWxsb3dlZCcsXG4gICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb252ZXJ0ZWREYXRhID0gZnJvbURhdGFVUkkoY29uZmlnLnVybCwgcmVzcG9uc2VUeXBlID09PSAnYmxvYicsIHtcbiAgICAgICAgICBCbG9iOiBjb25maWcuZW52ICYmIGNvbmZpZy5lbnYuQmxvYlxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGNvbnZlcnRlZERhdGEgPSBjb252ZXJ0ZWREYXRhLnRvU3RyaW5nKHJlc3BvbnNlRW5jb2RpbmcpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2VFbmNvZGluZyB8fCByZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICBjb252ZXJ0ZWREYXRhID0gdXRpbHMuc3RyaXBCT00oY29udmVydGVkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgICAgICBjb252ZXJ0ZWREYXRhID0gc3RyZWFtLlJlYWRhYmxlLmZyb20oY29udmVydGVkRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IGNvbnZlcnRlZERhdGEsXG4gICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzOiBuZXcgQXhpb3NIZWFkZXJzKCksXG4gICAgICAgIGNvbmZpZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRlZFByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wsXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICBjb25maWdcbiAgICAgICkpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgLy8gVXNlci1BZ2VudCBpcyBzcGVjaWZpZWQ7IGhhbmRsZSBjYXNlIHdoZXJlIG5vIFVBIGhlYWRlciBpcyBkZXNpcmVkXG4gICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICBoZWFkZXJzLnNldCgnVXNlci1BZ2VudCcsICdheGlvcy8nICsgVkVSU0lPTiwgZmFsc2UpO1xuXG4gICAgY29uc3Qge29uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBjb25maWc7XG4gICAgY29uc3QgbWF4UmF0ZSA9IGNvbmZpZy5tYXhSYXRlO1xuICAgIGxldCBtYXhVcGxvYWRSYXRlID0gdW5kZWZpbmVkO1xuICAgIGxldCBtYXhEb3dubG9hZFJhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBzdXBwb3J0IGZvciBzcGVjIGNvbXBsaWFudCBGb3JtRGF0YSBvYmplY3RzXG4gICAgaWYgKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZGF0YSkpIHtcbiAgICAgIGNvbnN0IHVzZXJCb3VuZGFyeSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoL2JvdW5kYXJ5PShbLV9cXHdcXGRdezEwLDcwfSkvaSk7XG5cbiAgICAgIGRhdGEgPSBmb3JtRGF0YVRvU3RyZWFtKGRhdGEsIChmb3JtSGVhZGVycykgPT4ge1xuICAgICAgICBoZWFkZXJzLnNldChmb3JtSGVhZGVycyk7XG4gICAgICB9LCB7XG4gICAgICAgIHRhZzogYGF4aW9zLSR7VkVSU0lPTn0tYm91bmRhcnlgLFxuICAgICAgICBib3VuZGFyeTogdXNlckJvdW5kYXJ5ICYmIHVzZXJCb3VuZGFyeVsxXSB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgLy8gc3VwcG9ydCBmb3IgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZm9ybS1kYXRhIGFwaVxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGRhdGEuZ2V0SGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuc2V0KGRhdGEuZ2V0SGVhZGVycygpKTtcblxuICAgICAgaWYgKCFoZWFkZXJzLmhhc0NvbnRlbnRMZW5ndGgoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGtub3duTGVuZ3RoID0gYXdhaXQgdXRpbC5wcm9taXNpZnkoZGF0YS5nZXRMZW5ndGgpLmNhbGwoZGF0YSk7XG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGtub3duTGVuZ3RoKSAmJiBrbm93bkxlbmd0aCA+PSAwICYmIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChrbm93bkxlbmd0aCk7XG4gICAgICAgICAgLyplc2xpbnQgbm8tZW1wdHk6MCovXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNCbG9iKGRhdGEpKSB7XG4gICAgICBkYXRhLnNpemUgJiYgaGVhZGVycy5zZXRDb250ZW50VHlwZShkYXRhLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50TGVuZ3RoKGRhdGEuc2l6ZSB8fCAwKTtcbiAgICAgIGRhdGEgPSBzdHJlYW0uUmVhZGFibGUuZnJvbShyZWFkQmxvYihkYXRhKSk7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICF1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLi4uXG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsICd1dGYtOCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAnRGF0YSBhZnRlciB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGEgc3RyaW5nLCBhbiBBcnJheUJ1ZmZlciwgYSBCdWZmZXIsIG9yIGEgU3RyZWFtJyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgZGF0YSBleGlzdHNcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChkYXRhLmxlbmd0aCwgZmFsc2UpO1xuXG4gICAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSAmJiBkYXRhLmxlbmd0aCA+IGNvbmZpZy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0JyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICAgIGlmICh1dGlscy5pc0FycmF5KG1heFJhdGUpKSB7XG4gICAgICBtYXhVcGxvYWRSYXRlID0gbWF4UmF0ZVswXTtcbiAgICAgIG1heERvd25sb2FkUmF0ZSA9IG1heFJhdGVbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1heFVwbG9hZFJhdGUgPSBtYXhEb3dubG9hZFJhdGUgPSBtYXhSYXRlO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmIChvblVwbG9hZFByb2dyZXNzIHx8IG1heFVwbG9hZFJhdGUpKSB7XG4gICAgICBpZiAoIXV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBzdHJlYW0uUmVhZGFibGUuZnJvbShkYXRhLCB7b2JqZWN0TW9kZTogZmFsc2V9KTtcbiAgICAgIH1cblxuICAgICAgZGF0YSA9IHN0cmVhbS5waXBlbGluZShbZGF0YSwgbmV3IEF4aW9zVHJhbnNmb3JtU3RyZWFtKHtcbiAgICAgICAgbWF4UmF0ZTogdXRpbHMudG9GaW5pdGVOdW1iZXIobWF4VXBsb2FkUmF0ZSlcbiAgICAgIH0pXSwgdXRpbHMubm9vcCk7XG5cbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgZGF0YS5vbigncHJvZ3Jlc3MnLCBmbHVzaE9uRmluaXNoKFxuICAgICAgICBkYXRhLFxuICAgICAgICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcyksIGZhbHNlLCAzKVxuICAgICAgICApXG4gICAgICApKTtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgbGV0IGF1dGggPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICBjb25zdCB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgY29uc3QgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIGF1dGggPSB1c2VybmFtZSArICc6JyArIHBhc3N3b3JkO1xuICAgIH1cblxuICAgIGlmICghYXV0aCAmJiBwYXJzZWQudXNlcm5hbWUpIHtcbiAgICAgIGNvbnN0IHVybFVzZXJuYW1lID0gcGFyc2VkLnVzZXJuYW1lO1xuICAgICAgY29uc3QgdXJsUGFzc3dvcmQgPSBwYXJzZWQucGFzc3dvcmQ7XG4gICAgICBhdXRoID0gdXJsVXNlcm5hbWUgKyAnOicgKyB1cmxQYXNzd29yZDtcbiAgICB9XG5cbiAgICBhdXRoICYmIGhlYWRlcnMuZGVsZXRlKCdhdXRob3JpemF0aW9uJyk7XG5cbiAgICBsZXQgcGF0aDtcblxuICAgIHRyeSB7XG4gICAgICBwYXRoID0gYnVpbGRVUkwoXG4gICAgICAgIHBhcnNlZC5wYXRobmFtZSArIHBhcnNlZC5zZWFyY2gsXG4gICAgICAgIGNvbmZpZy5wYXJhbXMsXG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyXG4gICAgICApLnJlcGxhY2UoL15cXD8vLCAnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBjdXN0b21FcnIgPSBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgY3VzdG9tRXJyLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgIGN1c3RvbUVyci51cmwgPSBjb25maWcudXJsO1xuICAgICAgY3VzdG9tRXJyLmV4aXN0cyA9IHRydWU7XG4gICAgICByZXR1cm4gcmVqZWN0KGN1c3RvbUVycik7XG4gICAgfVxuXG4gICAgaGVhZGVycy5zZXQoXG4gICAgICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgICAgICdnemlwLCBjb21wcmVzcywgZGVmbGF0ZScgKyAoaXNCcm90bGlTdXBwb3J0ZWQgPyAnLCBicicgOiAnJyksIGZhbHNlXG4gICAgICApO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGgsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMudG9KU09OKCksXG4gICAgICBhZ2VudHM6IHsgaHR0cDogY29uZmlnLmh0dHBBZ2VudCwgaHR0cHM6IGNvbmZpZy5odHRwc0FnZW50IH0sXG4gICAgICBhdXRoLFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBmYW1pbHksXG4gICAgICBiZWZvcmVSZWRpcmVjdDogZGlzcGF0Y2hCZWZvcmVSZWRpcmVjdCxcbiAgICAgIGJlZm9yZVJlZGlyZWN0czoge31cbiAgICB9O1xuXG4gICAgLy8gY2FjaGVhYmxlLWxvb2t1cCBpbnRlZ3JhdGlvbiBob3RmaXhcbiAgICAhdXRpbHMuaXNVbmRlZmluZWQobG9va3VwKSAmJiAob3B0aW9ucy5sb29rdXAgPSBsb29rdXApO1xuXG4gICAgaWYgKGNvbmZpZy5zb2NrZXRQYXRoKSB7XG4gICAgICBvcHRpb25zLnNvY2tldFBhdGggPSBjb25maWcuc29ja2V0UGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHBhcnNlZC5ob3N0bmFtZS5zdGFydHNXaXRoKFwiW1wiKSA/IHBhcnNlZC5ob3N0bmFtZS5zbGljZSgxLCAtMSkgOiBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIGNvbmZpZy5wcm94eSwgcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGgpO1xuICAgIH1cblxuICAgIGxldCB0cmFuc3BvcnQ7XG4gICAgY29uc3QgaXNIdHRwc1JlcXVlc3QgPSBpc0h0dHBzLnRlc3Qob3B0aW9ucy5wcm90b2NvbCk7XG4gICAgb3B0aW9ucy5hZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gY29uZmlnLmh0dHBzQWdlbnQgOiBjb25maWcuaHR0cEFnZW50O1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1JlcXVlc3QgPyBodHRwcyA6IGh0dHA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb25maWcubWF4UmVkaXJlY3RzKSB7XG4gICAgICAgIG9wdGlvbnMubWF4UmVkaXJlY3RzID0gY29uZmlnLm1heFJlZGlyZWN0cztcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuYmVmb3JlUmVkaXJlY3QpIHtcbiAgICAgICAgb3B0aW9ucy5iZWZvcmVSZWRpcmVjdHMuY29uZmlnID0gY29uZmlnLmJlZm9yZVJlZGlyZWN0O1xuICAgICAgfVxuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1JlcXVlc3QgPyBodHRwc0ZvbGxvdyA6IGh0dHBGb2xsb3c7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEpIHtcbiAgICAgIG9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IGNvbmZpZy5tYXhCb2R5TGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb2xsb3ctcmVkaXJlY3RzIGRvZXMgbm90IHNraXAgY29tcGFyaXNvbiwgc28gaXQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkIGZvciBheGlvcyAtMSB1bmxpbWl0ZWRcbiAgICAgIG9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5O1xuICAgIH1cblxuICAgIGlmIChjb25maWcuaW5zZWN1cmVIVFRQUGFyc2VyKSB7XG4gICAgICBvcHRpb25zLmluc2VjdXJlSFRUUFBhcnNlciA9IGNvbmZpZy5pbnNlY3VyZUhUVFBQYXJzZXI7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0XG4gICAgcmVxID0gdHJhbnNwb3J0LnJlcXVlc3Qob3B0aW9ucywgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UocmVzKSB7XG4gICAgICBpZiAocmVxLmRlc3Ryb3llZCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzdHJlYW1zID0gW3Jlc107XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlTGVuZ3RoID0gK3Jlcy5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddO1xuXG4gICAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzIHx8IG1heERvd25sb2FkUmF0ZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1TdHJlYW0gPSBuZXcgQXhpb3NUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgICAgIG1heFJhdGU6IHV0aWxzLnRvRmluaXRlTnVtYmVyKG1heERvd25sb2FkUmF0ZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzICYmIHRyYW5zZm9ybVN0cmVhbS5vbigncHJvZ3Jlc3MnLCBmbHVzaE9uRmluaXNoKFxuICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbSxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgICAgcmVzcG9uc2VMZW5ndGgsXG4gICAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlLCAzKVxuICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgc3RyZWFtcy5wdXNoKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlIGJvZHkgdHJhbnNwYXJlbnRseSBpZiByZXF1aXJlZFxuICAgICAgbGV0IHJlc3BvbnNlU3RyZWFtID0gcmVzO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGxhc3QgcmVxdWVzdCBpbiBjYXNlIG9mIHJlZGlyZWN0c1xuICAgICAgY29uc3QgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuICAgICAgLy8gaWYgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChjb25maWcuZGVjb21wcmVzcyAhPT0gZmFsc2UgJiYgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkge1xuICAgICAgICAvLyBpZiBubyBjb250ZW50LCBidXQgaGVhZGVycyBzdGlsbCBzYXkgdGhhdCBpdCBpcyBlbmNvZGVkLFxuICAgICAgICAvLyByZW1vdmUgdGhlIGhlYWRlciBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gfHwgJycpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAneC1nemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICd4LWNvbXByZXNzJzpcbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtcy5wdXNoKHpsaWIuY3JlYXRlVW56aXAoemxpYk9wdGlvbnMpKTtcblxuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29udGVudC1lbmNvZGluZyBpbiBvcmRlciB0byBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGVmbGF0ZSc6XG4gICAgICAgICAgc3RyZWFtcy5wdXNoKG5ldyBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtKCkpO1xuXG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbXMucHVzaCh6bGliLmNyZWF0ZVVuemlwKHpsaWJPcHRpb25zKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JyJzpcbiAgICAgICAgICBpZiAoaXNCcm90bGlTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIHN0cmVhbXMucHVzaCh6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoYnJvdGxpT3B0aW9ucykpO1xuICAgICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlU3RyZWFtID0gc3RyZWFtcy5sZW5ndGggPiAxID8gc3RyZWFtLnBpcGVsaW5lKHN0cmVhbXMsIHV0aWxzLm5vb3ApIDogc3RyZWFtc1swXTtcblxuICAgICAgY29uc3Qgb2ZmTGlzdGVuZXJzID0gc3RyZWFtLmZpbmlzaGVkKHJlc3BvbnNlU3RyZWFtLCAoKSA9PiB7XG4gICAgICAgIG9mZkxpc3RlbmVycygpO1xuICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiBuZXcgQXhpb3NIZWFkZXJzKHJlcy5oZWFkZXJzKSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHJlc3BvbnNlU3RyZWFtO1xuICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBsZXQgdG90YWxSZXNwb25zZUJ5dGVzID0gMDtcblxuICAgICAgICByZXNwb25zZVN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbURhdGEoY2h1bmspIHtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgICAgICB0b3RhbFJlc3BvbnNlQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBjb250ZW50IGxlbmd0aCBpcyBub3Qgb3ZlciB0aGUgbWF4Q29udGVudExlbmd0aCBpZiBzcGVjaWZpZWRcbiAgICAgICAgICBpZiAoY29uZmlnLm1heENvbnRlbnRMZW5ndGggPiAtMSAmJiB0b3RhbFJlc3BvbnNlQnl0ZXMgPiBjb25maWcubWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgLy8gc3RyZWFtLmRlc3Ryb3koKSBlbWl0IGFib3J0ZWQgZXZlbnQgYmVmb3JlIGNhbGxpbmcgcmVqZWN0KCkgb24gTm9kZS5qcyB2MTZcbiAgICAgICAgICAgIHJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignbWF4Q29udGVudExlbmd0aCBzaXplIG9mICcgKyBjb25maWcubWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIGNvbmZpZywgbGFzdFJlcXVlc3QpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdhYm9ydGVkJywgZnVuY3Rpb24gaGFuZGxlclN0cmVhbUFib3J0ZWQoKSB7XG4gICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZXJyID0gbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICAnbWF4Q29udGVudExlbmd0aCBzaXplIG9mICcgKyBjb25maWcubWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgbGFzdFJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2VTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRXJyb3IoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlcS5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZVN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRW5kKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VCdWZmZXIubGVuZ3RoID09PSAxID8gcmVzcG9uc2VCdWZmZXJbMF0gOiBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLnRvU3RyaW5nKHJlc3BvbnNlRW5jb2RpbmcpO1xuICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlRW5jb2RpbmcgfHwgcmVzcG9uc2VFbmNvZGluZyA9PT0gJ3V0ZjgnKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gdXRpbHMuc3RyaXBCT00ocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCByZXNwb25zZS5yZXF1ZXN0LCByZXNwb25zZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbWl0dGVyLm9uY2UoJ2Fib3J0JywgZXJyID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZVN0cmVhbS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXNwb25zZVN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGVtaXR0ZXIub25jZSgnYWJvcnQnLCBlcnIgPT4ge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgICByZXEuZGVzdHJveShlcnIpO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGVycm9yc1xuICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0RXJyb3IoZXJyKSB7XG4gICAgICAvLyBAdG9kbyByZW1vdmVcbiAgICAgIC8vIGlmIChyZXEuYWJvcnRlZCAmJiBlcnIuY29kZSAhPT0gQXhpb3NFcnJvci5FUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTKSByZXR1cm47XG4gICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCByZXEpKTtcbiAgICB9KTtcblxuICAgIC8vIHNldCB0Y3Aga2VlcCBhbGl2ZSB0byBwcmV2ZW50IGRyb3AgY29ubmVjdGlvbiBieSBwZWVyXG4gICAgcmVxLm9uKCdzb2NrZXQnLCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0U29ja2V0KHNvY2tldCkge1xuICAgICAgLy8gZGVmYXVsdCBpbnRlcnZhbCBvZiBzZW5kaW5nIGFjayBwYWNrZXQgaXMgMSBtaW51dGVcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwgMTAwMCAqIDYwKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSByZXF1ZXN0IHRpbWVvdXRcbiAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yY2luZyBhIGludCB0aW1lb3V0IHRvIGF2b2lkIHByb2JsZW1zIGlmIHRoZSBgcmVxYCBpbnRlcmZhY2UgZG9lc24ndCBoYW5kbGUgb3RoZXIgdHlwZXMuXG4gICAgICBjb25zdCB0aW1lb3V0ID0gcGFyc2VJbnQoY29uZmlnLnRpbWVvdXQsIDEwKTtcblxuICAgICAgaWYgKE51bWJlci5pc05hTih0aW1lb3V0KSkge1xuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ2Vycm9yIHRyeWluZyB0byBwYXJzZSBgY29uZmlnLnRpbWVvdXRgIHRvIGludCcsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxXG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZXRpbWUsIHRoZSByZXNwb25zZSB3aWxsIGJlIHZlcnkgc2xvdywgYW5kIGRvZXMgbm90IHJlc3BvbmQsIHRoZSBjb25uZWN0IGV2ZW50IHdpbGwgYmUgYmxvY2sgYnkgZXZlbnQgbG9vcCBzeXN0ZW0uXG4gICAgICAvLyBBbmQgdGltZXIgY2FsbGJhY2sgd2lsbCBiZSBmaXJlZCwgYW5kIGFib3J0KCkgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBjb25uZWN0aW9uLCB0aGVuIGdldCBcInNvY2tldCBoYW5nIHVwXCIgYW5kIGNvZGUgRUNPTk5SRVNFVC5cbiAgICAgIC8vIEF0IHRoaXMgdGltZSwgaWYgd2UgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiByZXF1ZXN0LCBub2RlanMgd2lsbCBoYW5nIHVwIHNvbWUgc29ja2V0IG9uIGJhY2tncm91bmQuIGFuZCB0aGUgbnVtYmVyIHdpbGwgdXAgYW5kIHVwLlxuICAgICAgLy8gQW5kIHRoZW4gdGhlc2Ugc29ja2V0IHdoaWNoIGJlIGhhbmcgdXAgd2lsbCBkZXZvdXJpbmcgQ1BVIGxpdHRsZSBieSBsaXR0bGUuXG4gICAgICAvLyBDbGllbnRSZXF1ZXN0LnNldFRpbWVvdXQgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3BlY2lmeSBtaWxsaXNlY29uZHMsIGFuZCBjYW4gbWFrZSBzdXJlIHRoYXQgYWJvcnQoKSB3aWxsIGJlIGZpcmVkIGFmdGVyIGNvbm5lY3QuXG4gICAgICByZXEuc2V0VGltZW91dCh0aW1lb3V0LCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgaWYgKGlzRG9uZSkgcmV0dXJuO1xuICAgICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxXG4gICAgICAgICkpO1xuICAgICAgICBhYm9ydCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgaWYgKHV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBsZXQgZW5kZWQgPSBmYWxzZTtcbiAgICAgIGxldCBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgIGRhdGEub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZW5kZWQgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGRhdGEub25jZSgnZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBkYXRhLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCFlbmRlZCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgIGFib3J0KG5ldyBDYW5jZWxlZEVycm9yKCdSZXF1ZXN0IHN0cmVhbSBoYXMgYmVlbiBhYm9ydGVkJywgY29uZmlnLCByZXEpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBfX3NldFByb3h5ID0gc2V0UHJveHk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gXCIuL2lzVVJMU2FtZU9yaWdpbi5qc1wiO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSBcIi4vY29va2llcy5qc1wiO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSBcIi4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qc1wiO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gXCIuLi9jb3JlL21lcmdlQ29uZmlnLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gXCIuL2J1aWxkVVJMLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufVxuXG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXJ9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tIFwiLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgY29uc3Qge2xlbmd0aH0gPSAoc2lnbmFscyA9IHNpZ25hbHMgPyBzaWduYWxzLmZpbHRlcihCb29sZWFuKSA6IFtdKTtcblxuICBpZiAodGltZW91dCB8fCBsZW5ndGgpIHtcbiAgICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGxldCBhYm9ydGVkO1xuXG4gICAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgZXJyID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiB0aGlzLnJlYXNvbjtcbiAgICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpXG4gICAgfSwgdGltZW91dClcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgICBzaWduYWwudW5zdWJzY3JpYmUgPyBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgICBjb25zdCB7c2lnbmFsfSA9IGNvbnRyb2xsZXI7XG5cbiAgICBzaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB1dGlscy5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICAgIHJldHVybiBzaWduYWw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iLCJcbmV4cG9ydCBjb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59XG5cbmNvbnN0IHJlYWRTdHJlYW0gPSBhc3luYyBmdW5jdGlvbiogKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHlpZWxkKiBzdHJlYW07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcmVhZGVyLmNhbmNlbCgpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG4gIGxldCBkb25lO1xuICBsZXQgX29uRmluaXNoID0gKGUpID0+IHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgb25GaW5pc2ggJiYgb25GaW5pc2goZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gYnl0ZXMgKz0gbGVuO1xuICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAyXG4gIH0pXG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSBcIi4uL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanNcIjtcbmltcG9ydCB7dHJhY2tTdHJlYW19IGZyb20gXCIuLi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlciwgcHJvZ3Jlc3NFdmVudERlY29yYXRvciwgYXN5bmNEZWNvcmF0b3J9IGZyb20gXCIuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzXCI7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzXCI7XG5pbXBvcnQgc2V0dGxlIGZyb20gXCIuLi9jb3JlL3NldHRsZS5qc1wiO1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSlcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgY29uc3QgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoW3NpZ25hbCwgY2FuY2VsVG9rZW4gJiYgY2FuY2VsVG9rZW4udG9BYm9ydFNpZ25hbCgpXSwgdGltZW91dCk7XG5cbiAgbGV0IHJlcXVlc3Q7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJiAoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgfSk7XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIC8vIENsb3VkZmxhcmUgV29ya2VycyB0aHJvd3Mgd2hlbiBjcmVkZW50aWFscyBhcmUgZGVmaW5lZFxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gXCJjcmVkZW50aWFsc1wiIGluIFJlcXVlc3QucHJvdG90eXBlO1xuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgKGlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUpKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tIFwiLi4vYWRhcHRlcnMvYWRhcHRlcnMuanNcIjtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFja1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cbiIsImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbjtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnM7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3NcbiIsImNvbnN0IGlzT2JqZWN0ID0gdmFsdWUgPT4ge1xuXHRjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpO1xufTtcblxuY29uc3QgaXNFbXB0eU9iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuXG5jb25zdCBkaXNhbGxvd2VkS2V5cyA9IG5ldyBTZXQoW1xuXHQnX19wcm90b19fJyxcblx0J3Byb3RvdHlwZScsXG5cdCdjb25zdHJ1Y3RvcicsXG5dKTtcblxuY29uc3QgZGlnaXRzID0gbmV3IFNldCgnMDEyMzQ1Njc4OScpO1xuXG5mdW5jdGlvbiBnZXRQYXRoU2VnbWVudHMocGF0aCkge1xuXHRjb25zdCBwYXJ0cyA9IFtdO1xuXHRsZXQgY3VycmVudFNlZ21lbnQgPSAnJztcblx0bGV0IGN1cnJlbnRQYXJ0ID0gJ3N0YXJ0Jztcblx0bGV0IGlzSWdub3JpbmcgPSBmYWxzZTtcblxuXHRmb3IgKGNvbnN0IGNoYXJhY3RlciBvZiBwYXRoKSB7XG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdGNhc2UgJ1xcXFwnOiB7XG5cdFx0XHRcdGlmIChjdXJyZW50UGFydCA9PT0gJ2luZGV4Jykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gYW4gaW5kZXgnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50UGFydCA9PT0gJ2luZGV4RW5kJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgYW4gaW5kZXgnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0lnbm9yaW5nKSB7XG5cdFx0XHRcdFx0Y3VycmVudFNlZ21lbnQgKz0gY2hhcmFjdGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudFBhcnQgPSAncHJvcGVydHknO1xuXHRcdFx0XHRpc0lnbm9yaW5nID0gIWlzSWdub3Jpbmc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlICcuJzoge1xuXHRcdFx0XHRpZiAoY3VycmVudFBhcnQgPT09ICdpbmRleCcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGFuIGluZGV4Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFBhcnQgPT09ICdpbmRleEVuZCcpIHtcblx0XHRcdFx0XHRjdXJyZW50UGFydCA9ICdwcm9wZXJ0eSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNJZ25vcmluZykge1xuXHRcdFx0XHRcdGlzSWdub3JpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRjdXJyZW50U2VnbWVudCArPSBjaGFyYWN0ZXI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGlzYWxsb3dlZEtleXMuaGFzKGN1cnJlbnRTZWdtZW50KSkge1xuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHBhcnRzLnB1c2goY3VycmVudFNlZ21lbnQpO1xuXHRcdFx0XHRjdXJyZW50U2VnbWVudCA9ICcnO1xuXHRcdFx0XHRjdXJyZW50UGFydCA9ICdwcm9wZXJ0eSc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlICdbJzoge1xuXHRcdFx0XHRpZiAoY3VycmVudFBhcnQgPT09ICdpbmRleCcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGFuIGluZGV4Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFBhcnQgPT09ICdpbmRleEVuZCcpIHtcblx0XHRcdFx0XHRjdXJyZW50UGFydCA9ICdpbmRleCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNJZ25vcmluZykge1xuXHRcdFx0XHRcdGlzSWdub3JpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRjdXJyZW50U2VnbWVudCArPSBjaGFyYWN0ZXI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFBhcnQgPT09ICdwcm9wZXJ0eScpIHtcblx0XHRcdFx0XHRpZiAoZGlzYWxsb3dlZEtleXMuaGFzKGN1cnJlbnRTZWdtZW50KSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHBhcnRzLnB1c2goY3VycmVudFNlZ21lbnQpO1xuXHRcdFx0XHRcdGN1cnJlbnRTZWdtZW50ID0gJyc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdXJyZW50UGFydCA9ICdpbmRleCc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlICddJzoge1xuXHRcdFx0XHRpZiAoY3VycmVudFBhcnQgPT09ICdpbmRleCcpIHtcblx0XHRcdFx0XHRwYXJ0cy5wdXNoKE51bWJlci5wYXJzZUludChjdXJyZW50U2VnbWVudCwgMTApKTtcblx0XHRcdFx0XHRjdXJyZW50U2VnbWVudCA9ICcnO1xuXHRcdFx0XHRcdGN1cnJlbnRQYXJ0ID0gJ2luZGV4RW5kJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50UGFydCA9PT0gJ2luZGV4RW5kJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgYW4gaW5kZXgnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZhbGxzIHRocm91Z2hcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRpZiAoY3VycmVudFBhcnQgPT09ICdpbmRleCcgJiYgIWRpZ2l0cy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gYW4gaW5kZXgnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50UGFydCA9PT0gJ2luZGV4RW5kJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgYW4gaW5kZXgnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50UGFydCA9PT0gJ3N0YXJ0Jykge1xuXHRcdFx0XHRcdGN1cnJlbnRQYXJ0ID0gJ3Byb3BlcnR5Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0lnbm9yaW5nKSB7XG5cdFx0XHRcdFx0aXNJZ25vcmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdGN1cnJlbnRTZWdtZW50ICs9ICdcXFxcJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1cnJlbnRTZWdtZW50ICs9IGNoYXJhY3Rlcjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoaXNJZ25vcmluZykge1xuXHRcdGN1cnJlbnRTZWdtZW50ICs9ICdcXFxcJztcblx0fVxuXG5cdHN3aXRjaCAoY3VycmVudFBhcnQpIHtcblx0XHRjYXNlICdwcm9wZXJ0eSc6IHtcblx0XHRcdGlmIChkaXNhbGxvd2VkS2V5cy5oYXMoY3VycmVudFNlZ21lbnQpKSB7XG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblxuXHRcdFx0cGFydHMucHVzaChjdXJyZW50U2VnbWVudCk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNhc2UgJ2luZGV4Jzoge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbmRleCB3YXMgbm90IGNsb3NlZCcpO1xuXHRcdH1cblxuXHRcdGNhc2UgJ3N0YXJ0Jzoge1xuXHRcdFx0cGFydHMucHVzaCgnJyk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBObyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcGFydHM7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nSW5kZXgob2JqZWN0LCBrZXkpIHtcblx0aWYgKHR5cGVvZiBrZXkgIT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuXHRcdGNvbnN0IGluZGV4ID0gTnVtYmVyLnBhcnNlSW50KGtleSwgMTApO1xuXHRcdHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSAmJiBvYmplY3RbaW5kZXhdID09PSBvYmplY3Rba2V5XTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm90U3RyaW5nSW5kZXgob2JqZWN0LCBrZXkpIHtcblx0aWYgKGlzU3RyaW5nSW5kZXgob2JqZWN0LCBrZXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIHN0cmluZyBpbmRleCcpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eShvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG5cdGlmICghaXNPYmplY3Qob2JqZWN0KSB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IG9iamVjdCA6IHZhbHVlO1xuXHR9XG5cblx0Y29uc3QgcGF0aEFycmF5ID0gZ2V0UGF0aFNlZ21lbnRzKHBhdGgpO1xuXHRpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXRoQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3Qga2V5ID0gcGF0aEFycmF5W2luZGV4XTtcblxuXHRcdGlmIChpc1N0cmluZ0luZGV4KG9iamVjdCwga2V5KSkge1xuXHRcdFx0b2JqZWN0ID0gaW5kZXggPT09IHBhdGhBcnJheS5sZW5ndGggLSAxID8gdW5kZWZpbmVkIDogbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2JqZWN0ID0gb2JqZWN0W2tleV07XG5cdFx0fVxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IG9iamVjdCA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gYG9iamVjdGAgaXMgZWl0aGVyIGB1bmRlZmluZWRgIG9yIGBudWxsYCBzbyB3ZSB3YW50IHRvIHN0b3AgdGhlIGxvb3AsIGFuZFxuXHRcdFx0Ly8gaWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgYml0IG9mIHRoZSBwYXRoLCBhbmRcblx0XHRcdC8vIGlmIGl0IGRpZG4ndCByZXR1cm4gYHVuZGVmaW5lZGBcblx0XHRcdC8vIGl0IHdvdWxkIHJldHVybiBgbnVsbGAgaWYgYG9iamVjdGAgaXMgYG51bGxgXG5cdFx0XHQvLyBidXQgd2Ugd2FudCBgZ2V0KHtmb286IG51bGx9LCAnZm9vLmJhcicpYCB0byBlcXVhbCBgdW5kZWZpbmVkYCwgb3IgdGhlIHN1cHBsaWVkIHZhbHVlLCBub3QgYG51bGxgXG5cdFx0XHRpZiAoaW5kZXggIT09IHBhdGhBcnJheS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9iamVjdCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBvYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eShvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG5cdGlmICghaXNPYmplY3Qob2JqZWN0KSB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gb2JqZWN0O1xuXHR9XG5cblx0Y29uc3Qgcm9vdCA9IG9iamVjdDtcblx0Y29uc3QgcGF0aEFycmF5ID0gZ2V0UGF0aFNlZ21lbnRzKHBhdGgpO1xuXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXRoQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3Qga2V5ID0gcGF0aEFycmF5W2luZGV4XTtcblxuXHRcdGFzc2VydE5vdFN0cmluZ0luZGV4KG9iamVjdCwga2V5KTtcblxuXHRcdGlmIChpbmRleCA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdG9iamVjdFtrZXldID0gdmFsdWU7XG5cdFx0fSBlbHNlIGlmICghaXNPYmplY3Qob2JqZWN0W2tleV0pKSB7XG5cdFx0XHRvYmplY3Rba2V5XSA9IHR5cGVvZiBwYXRoQXJyYXlbaW5kZXggKyAxXSA9PT0gJ251bWJlcicgPyBbXSA6IHt9O1xuXHRcdH1cblxuXHRcdG9iamVjdCA9IG9iamVjdFtrZXldO1xuXHR9XG5cblx0cmV0dXJuIHJvb3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eShvYmplY3QsIHBhdGgpIHtcblx0aWYgKCFpc09iamVjdChvYmplY3QpIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHBhdGhBcnJheSA9IGdldFBhdGhTZWdtZW50cyhwYXRoKTtcblxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGF0aEFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGNvbnN0IGtleSA9IHBhdGhBcnJheVtpbmRleF07XG5cblx0XHRhc3NlcnROb3RTdHJpbmdJbmRleChvYmplY3QsIGtleSk7XG5cblx0XHRpZiAoaW5kZXggPT09IHBhdGhBcnJheS5sZW5ndGggLSAxKSB7XG5cdFx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRvYmplY3QgPSBvYmplY3Rba2V5XTtcblxuXHRcdGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydHkob2JqZWN0LCBwYXRoKSB7XG5cdGlmICghaXNPYmplY3Qob2JqZWN0KSB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBwYXRoQXJyYXkgPSBnZXRQYXRoU2VnbWVudHMocGF0aCk7XG5cdGlmIChwYXRoQXJyYXkubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgcGF0aEFycmF5KSB7XG5cdFx0aWYgKCFpc09iamVjdChvYmplY3QpIHx8ICEoa2V5IGluIG9iamVjdCkgfHwgaXNTdHJpbmdJbmRleChvYmplY3QsIGtleSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvYmplY3QgPSBvYmplY3Rba2V5XTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG4vLyBUT0RPOiBCYWNrc2xhc2hlcyB3aXRoIG5vIGVmZmVjdCBzaG91bGQgbm90IGJlIGVzY2FwZWRcbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVQYXRoKHBhdGgpIHtcblx0aWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG5cdH1cblxuXHRyZXR1cm4gcGF0aC5yZXBsYWNlQWxsKC9bXFxcXC5bXS9nLCAnXFxcXCQmJyk7XG59XG5cbi8vIFRoZSBrZXlzIHJldHVybmVkIGJ5IE9iamVjdC5lbnRyaWVzKCkgZm9yIGFycmF5cyBhcmUgc3RyaW5nc1xuZnVuY3Rpb24gZW50cmllcyh2YWx1ZSkge1xuXHRjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyh2YWx1ZSk7XG5cdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdHJldHVybiByZXN1bHQubWFwKChba2V5LCB2YWx1ZV0pID0+IFtOdW1iZXIoa2V5KSwgdmFsdWVdKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVBhdGgocGF0aFNlZ21lbnRzKSB7XG5cdGxldCByZXN1bHQgPSAnJztcblxuXHRmb3IgKGxldCBbaW5kZXgsIHNlZ21lbnRdIG9mIGVudHJpZXMocGF0aFNlZ21lbnRzKSkge1xuXHRcdGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJlc3VsdCArPSBgWyR7c2VnbWVudH1dYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VnbWVudCA9IGVzY2FwZVBhdGgoc2VnbWVudCk7XG5cdFx0XHRyZXN1bHQgKz0gaW5kZXggPT09IDAgPyBzZWdtZW50IDogYC4ke3NlZ21lbnR9YDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiAqIGRlZXBLZXlzSXRlcmF0b3Iob2JqZWN0LCBjdXJyZW50UGF0aCA9IFtdKSB7XG5cdGlmICghaXNPYmplY3Qob2JqZWN0KSB8fCBpc0VtcHR5T2JqZWN0KG9iamVjdCkpIHtcblx0XHRpZiAoY3VycmVudFBhdGgubGVuZ3RoID4gMCkge1xuXHRcdFx0eWllbGQgc3RyaW5naWZ5UGF0aChjdXJyZW50UGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcyhvYmplY3QpKSB7XG5cdFx0eWllbGQgKiBkZWVwS2V5c0l0ZXJhdG9yKHZhbHVlLCBbLi4uY3VycmVudFBhdGgsIGtleV0pO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwS2V5cyhvYmplY3QpIHtcblx0cmV0dXJuIFsuLi5kZWVwS2V5c0l0ZXJhdG9yKG9iamVjdCldO1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmNvbnN0IGhvbWVkaXIgPSBvcy5ob21lZGlyKCk7XG5jb25zdCB0bXBkaXIgPSBvcy50bXBkaXIoKTtcbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxuY29uc3QgbWFjb3MgPSBuYW1lID0+IHtcblx0Y29uc3QgbGlicmFyeSA9IHBhdGguam9pbihob21lZGlyLCAnTGlicmFyeScpO1xuXG5cdHJldHVybiB7XG5cdFx0ZGF0YTogcGF0aC5qb2luKGxpYnJhcnksICdBcHBsaWNhdGlvbiBTdXBwb3J0JywgbmFtZSksXG5cdFx0Y29uZmlnOiBwYXRoLmpvaW4obGlicmFyeSwgJ1ByZWZlcmVuY2VzJywgbmFtZSksXG5cdFx0Y2FjaGU6IHBhdGguam9pbihsaWJyYXJ5LCAnQ2FjaGVzJywgbmFtZSksXG5cdFx0bG9nOiBwYXRoLmpvaW4obGlicmFyeSwgJ0xvZ3MnLCBuYW1lKSxcblx0XHR0ZW1wOiBwYXRoLmpvaW4odG1wZGlyLCBuYW1lKSxcblx0fTtcbn07XG5cbmNvbnN0IHdpbmRvd3MgPSBuYW1lID0+IHtcblx0Y29uc3QgYXBwRGF0YSA9IGVudi5BUFBEQVRBIHx8IHBhdGguam9pbihob21lZGlyLCAnQXBwRGF0YScsICdSb2FtaW5nJyk7XG5cdGNvbnN0IGxvY2FsQXBwRGF0YSA9IGVudi5MT0NBTEFQUERBVEEgfHwgcGF0aC5qb2luKGhvbWVkaXIsICdBcHBEYXRhJywgJ0xvY2FsJyk7XG5cblx0cmV0dXJuIHtcblx0XHQvLyBEYXRhL2NvbmZpZy9jYWNoZS9sb2cgYXJlIGludmVudGVkIGJ5IG1lIGFzIFdpbmRvd3MgaXNuJ3Qgb3BpbmlvbmF0ZWQgYWJvdXQgdGhpc1xuXHRcdGRhdGE6IHBhdGguam9pbihsb2NhbEFwcERhdGEsIG5hbWUsICdEYXRhJyksXG5cdFx0Y29uZmlnOiBwYXRoLmpvaW4oYXBwRGF0YSwgbmFtZSwgJ0NvbmZpZycpLFxuXHRcdGNhY2hlOiBwYXRoLmpvaW4obG9jYWxBcHBEYXRhLCBuYW1lLCAnQ2FjaGUnKSxcblx0XHRsb2c6IHBhdGguam9pbihsb2NhbEFwcERhdGEsIG5hbWUsICdMb2cnKSxcblx0XHR0ZW1wOiBwYXRoLmpvaW4odG1wZGlyLCBuYW1lKSxcblx0fTtcbn07XG5cbi8vIGh0dHBzOi8vc3BlY2lmaWNhdGlvbnMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWxcbmNvbnN0IGxpbnV4ID0gbmFtZSA9PiB7XG5cdGNvbnN0IHVzZXJuYW1lID0gcGF0aC5iYXNlbmFtZShob21lZGlyKTtcblxuXHRyZXR1cm4ge1xuXHRcdGRhdGE6IHBhdGguam9pbihlbnYuWERHX0RBVEFfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5sb2NhbCcsICdzaGFyZScpLCBuYW1lKSxcblx0XHRjb25maWc6IHBhdGguam9pbihlbnYuWERHX0NPTkZJR19IT01FIHx8IHBhdGguam9pbihob21lZGlyLCAnLmNvbmZpZycpLCBuYW1lKSxcblx0XHRjYWNoZTogcGF0aC5qb2luKGVudi5YREdfQ0FDSEVfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5jYWNoZScpLCBuYW1lKSxcblx0XHQvLyBodHRwczovL3dpa2kuZGViaWFuLm9yZy9YREdCYXNlRGlyZWN0b3J5U3BlY2lmaWNhdGlvbiNzdGF0ZVxuXHRcdGxvZzogcGF0aC5qb2luKGVudi5YREdfU1RBVEVfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5sb2NhbCcsICdzdGF0ZScpLCBuYW1lKSxcblx0XHR0ZW1wOiBwYXRoLmpvaW4odG1wZGlyLCB1c2VybmFtZSwgbmFtZSksXG5cdH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbnZQYXRocyhuYW1lLCB7c3VmZml4ID0gJ25vZGVqcyd9ID0ge30pIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgc3RyaW5nLCBnb3QgJHt0eXBlb2YgbmFtZX1gKTtcblx0fVxuXG5cdGlmIChzdWZmaXgpIHtcblx0XHQvLyBBZGQgc3VmZml4IHRvIHByZXZlbnQgcG9zc2libGUgY29uZmxpY3Qgd2l0aCBuYXRpdmUgYXBwc1xuXHRcdG5hbWUgKz0gYC0ke3N1ZmZpeH1gO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG5cdFx0cmV0dXJuIG1hY29zKG5hbWUpO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gd2luZG93cyhuYW1lKTtcblx0fVxuXG5cdHJldHVybiBsaW51eChuYW1lKTtcbn1cbiIsIi8qIE1BSU4gKi9cbi8vRklYTUU6IFRoZSByZXR1cm4gdHlwZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgd3JvbmcsIGl0IGRvZXNuJ3QgYWNjb3VudCBmb3IgcmV0dXJuaW5nIFwidW5kZWZpbmVkXCIsIGJ1dCBhIGNvcnJlY3QgdHlwZSBjYW5ub3QgYmUgd3JpdHRlbiBiZWNhdXNlIGdlbmVyaWNzIGNhbm5vdCBiZSBleHRlbmRlZCBwcm9wZXJseSwgaXQgc2VlbXNcbmNvbnN0IGF0dGVtcHRpZnlBc3luYyA9IChmbiwgb25FcnJvcikgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBhdHRlbXB0aWZpZWQoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKS5jYXRjaChvbkVycm9yKTtcbiAgICB9O1xufTtcbmNvbnN0IGF0dGVtcHRpZnlTeW5jID0gKGZuLCBvbkVycm9yKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGF0dGVtcHRpZmllZCguLi5hcmdzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBvbkVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgeyBhdHRlbXB0aWZ5QXN5bmMsIGF0dGVtcHRpZnlTeW5jIH07XG4iLCIvKiBJTVBPUlQgKi9cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG4vKiBNQUlOICovXG5jb25zdCBJU19VU0VSX1JPT1QgPSBwcm9jZXNzLmdldHVpZCA/ICFwcm9jZXNzLmdldHVpZCgpIDogZmFsc2U7XG5jb25zdCBMSU1JVF9GSUxFU19ERVNDUklQVE9SUyA9IDEwMDAwOyAvL1RPRE86IEZldGNoIHRoZSByZWFsIGxpbWl0IGZyb20gdGhlIGZpbGVzeXN0ZW0sIHNvbWVob3dcbmNvbnN0IE5PT1AgPSAoKSA9PiB1bmRlZmluZWQ7XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IElTX1VTRVJfUk9PVCwgTElNSVRfRklMRVNfREVTQ1JJUFRPUlMsIE5PT1AgfTtcbiIsIi8qIElNUE9SVCAqL1xuaW1wb3J0IHsgSVNfVVNFUl9ST09UIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgSGFuZGxlcnMgPSB7XG4gICAgLyogQVBJICovXG4gICAgaXNDaGFuZ2VFcnJvck9rOiAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKCFIYW5kbGVycy5pc05vZGVFcnJvcihlcnJvcikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHsgY29kZSB9ID0gZXJyb3I7XG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PU1lTJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIUlTX1VTRVJfUk9PVCAmJiAoY29kZSA9PT0gJ0VJTlZBTCcgfHwgY29kZSA9PT0gJ0VQRVJNJykpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgaXNOb2RlRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpO1xuICAgIH0sXG4gICAgaXNSZXRyaWFibGVFcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGlmICghSGFuZGxlcnMuaXNOb2RlRXJyb3IoZXJyb3IpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCB7IGNvZGUgfSA9IGVycm9yO1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VNRklMRScgfHwgY29kZSA9PT0gJ0VORklMRScgfHwgY29kZSA9PT0gJ0VBR0FJTicgfHwgY29kZSA9PT0gJ0VCVVNZJyB8fCBjb2RlID09PSAnRUFDQ0VTUycgfHwgY29kZSA9PT0gJ0VBQ0NFUycgfHwgY29kZSA9PT0gJ0VBQ0NTJyB8fCBjb2RlID09PSAnRVBFUk0nKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIG9uQ2hhbmdlRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoIUhhbmRsZXJzLmlzTm9kZUVycm9yKGVycm9yKSlcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICBpZiAoSGFuZGxlcnMuaXNDaGFuZ2VFcnJvck9rKGVycm9yKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgSGFuZGxlcnM7XG4iLCIvKiBJTVBPUlQgKi9cbmltcG9ydCB7IExJTUlUX0ZJTEVTX0RFU0NSSVBUT1JTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuLyogTUFJTiAqL1xuY2xhc3MgUmV0cnlmeVF1ZXVlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyogVkFSSUFCTEVTICovXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSAyNTtcbiAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxpbWl0ID0gTElNSVRfRklMRVNfREVTQ1JJUFRPUlM7XG4gICAgICAgIHRoaXMucXVldWVBY3RpdmUgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMucXVldWVXYWl0aW5nID0gbmV3IFNldCgpO1xuICAgICAgICAvKiBMSUZFQ1lDTEUgQVBJICovXG4gICAgICAgIHRoaXMuaW5pdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwodGhpcy50aWNrLCB0aGlzLmludGVydmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXNldCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnRlcnZhbElkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmludGVydmFsSWQ7XG4gICAgICAgIH07XG4gICAgICAgIC8qIEFQSSAqL1xuICAgICAgICB0aGlzLmFkZCA9IChmbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVdhaXRpbmcuYWRkKGZuKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXVlQWN0aXZlLnNpemUgPCAodGhpcy5saW1pdCAvIDIpKSB7IC8vIEFjdGl2ZSBxdWV1ZSBub3QgdW5kZXIgcHJlYXNzdXJlLCBleGVjdXRpbmcgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICB0aGlzLnRpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlbW92ZSA9IChmbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVdhaXRpbmcuZGVsZXRlKGZuKTtcbiAgICAgICAgICAgIHRoaXMucXVldWVBY3RpdmUuZGVsZXRlKGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4gdGhpcy5yZW1vdmUocmVzb2x2ZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVyID0gKCkgPT4gcmVzb2x2ZShjbGVhbnVwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChyZXNvbHZlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucXVldWVBY3RpdmUuc2l6ZSA+PSB0aGlzLmxpbWl0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5xdWV1ZVdhaXRpbmcuc2l6ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmbiBvZiB0aGlzLnF1ZXVlV2FpdGluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXVlQWN0aXZlLnNpemUgPj0gdGhpcy5saW1pdClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWV1ZVdhaXRpbmcuZGVsZXRlKGZuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlQWN0aXZlLmFkZChmbik7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG47XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IG5ldyBSZXRyeWZ5UXVldWUoKTtcbiIsIi8qIElNUE9SVCAqL1xuaW1wb3J0IFJldHJ5ZnlRdWV1ZSBmcm9tICcuL3JldHJ5aWZ5X3F1ZXVlLmpzJztcbi8qIE1BSU4gKi9cbi8vRklYTUU6IFRoZXJlIGFyZSBhIGJvYXRsb2FkIG9mIGFueXMgaGVyZSwgYnV0IGFwcGFyZW50bHkgZ2VuZXJpY3MgY2Fubm90IGJlIGV4dGVuZGVkIHByb3Blcmx5LCBzby4uLlxuY29uc3QgcmV0cnlpZnlBc3luYyA9IChmbiwgaXNSZXRyaWFibGVFcnJvcikgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiByZXRyaWZpZWQodGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhdHRlbXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXRyeWZ5UXVldWUuc2NoZWR1bGUoKS50aGVuKGNsZWFudXAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVzb2x2ZSA9IChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3Qgb25SZWplY3QgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA+PSB0aW1lc3RhbXApXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmV0cmlhYmxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxheSA9IE1hdGgucm91bmQoMTAwICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxheVByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWxheVByb21pc2UudGhlbigoKSA9PiBhdHRlbXB0LmFwcGx5KHVuZGVmaW5lZCwgYXJncykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykudGhlbihvblJlc29sdmUsIG9uUmVqZWN0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG59O1xuY29uc3QgcmV0cnlpZnlTeW5jID0gKGZuLCBpc1JldHJpYWJsZUVycm9yKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJldHJpZmllZCh0aW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGF0dGVtcHQoLi4uYXJncykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChEYXRlLm5vdygpID4gdGltZXN0YW1wKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXRyaWFibGVFcnJvcihlcnJvcikpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRlbXB0LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IHJldHJ5aWZ5QXN5bmMsIHJldHJ5aWZ5U3luYyB9O1xuIiwiLyogSU1QT1JUICovXG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgYXR0ZW1wdGlmeUFzeW5jLCBhdHRlbXB0aWZ5U3luYyB9IGZyb20gJy4vYXR0ZW1wdGlmeS5qcyc7XG5pbXBvcnQgeyBOT09QIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IEhhbmRsZXJzIGZyb20gJy4vaGFuZGxlcnMuanMnO1xuaW1wb3J0IHsgcmV0cnlpZnlBc3luYywgcmV0cnlpZnlTeW5jIH0gZnJvbSAnLi9yZXRyeWlmeS5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBGUyA9IHtcbiAgICBhdHRlbXB0OiB7XG4gICAgICAgIC8qIEFTWU5DICovXG4gICAgICAgIGNobW9kOiBhdHRlbXB0aWZ5QXN5bmMocHJvbWlzaWZ5KGZzLmNobW9kKSwgSGFuZGxlcnMub25DaGFuZ2VFcnJvciksXG4gICAgICAgIGNob3duOiBhdHRlbXB0aWZ5QXN5bmMocHJvbWlzaWZ5KGZzLmNob3duKSwgSGFuZGxlcnMub25DaGFuZ2VFcnJvciksXG4gICAgICAgIGNsb3NlOiBhdHRlbXB0aWZ5QXN5bmMocHJvbWlzaWZ5KGZzLmNsb3NlKSwgTk9PUCksXG4gICAgICAgIGZzeW5jOiBhdHRlbXB0aWZ5QXN5bmMocHJvbWlzaWZ5KGZzLmZzeW5jKSwgTk9PUCksXG4gICAgICAgIG1rZGlyOiBhdHRlbXB0aWZ5QXN5bmMocHJvbWlzaWZ5KGZzLm1rZGlyKSwgTk9PUCksXG4gICAgICAgIHJlYWxwYXRoOiBhdHRlbXB0aWZ5QXN5bmMocHJvbWlzaWZ5KGZzLnJlYWxwYXRoKSwgTk9PUCksXG4gICAgICAgIHN0YXQ6IGF0dGVtcHRpZnlBc3luYyhwcm9taXNpZnkoZnMuc3RhdCksIE5PT1ApLFxuICAgICAgICB1bmxpbms6IGF0dGVtcHRpZnlBc3luYyhwcm9taXNpZnkoZnMudW5saW5rKSwgTk9PUCksXG4gICAgICAgIC8qIFNZTkMgKi9cbiAgICAgICAgY2htb2RTeW5jOiBhdHRlbXB0aWZ5U3luYyhmcy5jaG1vZFN5bmMsIEhhbmRsZXJzLm9uQ2hhbmdlRXJyb3IpLFxuICAgICAgICBjaG93blN5bmM6IGF0dGVtcHRpZnlTeW5jKGZzLmNob3duU3luYywgSGFuZGxlcnMub25DaGFuZ2VFcnJvciksXG4gICAgICAgIGNsb3NlU3luYzogYXR0ZW1wdGlmeVN5bmMoZnMuY2xvc2VTeW5jLCBOT09QKSxcbiAgICAgICAgZXhpc3RzU3luYzogYXR0ZW1wdGlmeVN5bmMoZnMuZXhpc3RzU3luYywgTk9PUCksXG4gICAgICAgIGZzeW5jU3luYzogYXR0ZW1wdGlmeVN5bmMoZnMuZnN5bmMsIE5PT1ApLFxuICAgICAgICBta2RpclN5bmM6IGF0dGVtcHRpZnlTeW5jKGZzLm1rZGlyU3luYywgTk9PUCksXG4gICAgICAgIHJlYWxwYXRoU3luYzogYXR0ZW1wdGlmeVN5bmMoZnMucmVhbHBhdGhTeW5jLCBOT09QKSxcbiAgICAgICAgc3RhdFN5bmM6IGF0dGVtcHRpZnlTeW5jKGZzLnN0YXRTeW5jLCBOT09QKSxcbiAgICAgICAgdW5saW5rU3luYzogYXR0ZW1wdGlmeVN5bmMoZnMudW5saW5rU3luYywgTk9PUClcbiAgICB9LFxuICAgIHJldHJ5OiB7XG4gICAgICAgIC8qIEFTWU5DICovXG4gICAgICAgIGNsb3NlOiByZXRyeWlmeUFzeW5jKHByb21pc2lmeShmcy5jbG9zZSksIEhhbmRsZXJzLmlzUmV0cmlhYmxlRXJyb3IpLFxuICAgICAgICBmc3luYzogcmV0cnlpZnlBc3luYyhwcm9taXNpZnkoZnMuZnN5bmMpLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgb3BlbjogcmV0cnlpZnlBc3luYyhwcm9taXNpZnkoZnMub3BlbiksIEhhbmRsZXJzLmlzUmV0cmlhYmxlRXJyb3IpLFxuICAgICAgICByZWFkRmlsZTogcmV0cnlpZnlBc3luYyhwcm9taXNpZnkoZnMucmVhZEZpbGUpLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgcmVuYW1lOiByZXRyeWlmeUFzeW5jKHByb21pc2lmeShmcy5yZW5hbWUpLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgc3RhdDogcmV0cnlpZnlBc3luYyhwcm9taXNpZnkoZnMuc3RhdCksIEhhbmRsZXJzLmlzUmV0cmlhYmxlRXJyb3IpLFxuICAgICAgICB3cml0ZTogcmV0cnlpZnlBc3luYyhwcm9taXNpZnkoZnMud3JpdGUpLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgd3JpdGVGaWxlOiByZXRyeWlmeUFzeW5jKHByb21pc2lmeShmcy53cml0ZUZpbGUpLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgLyogU1lOQyAqL1xuICAgICAgICBjbG9zZVN5bmM6IHJldHJ5aWZ5U3luYyhmcy5jbG9zZVN5bmMsIEhhbmRsZXJzLmlzUmV0cmlhYmxlRXJyb3IpLFxuICAgICAgICBmc3luY1N5bmM6IHJldHJ5aWZ5U3luYyhmcy5mc3luY1N5bmMsIEhhbmRsZXJzLmlzUmV0cmlhYmxlRXJyb3IpLFxuICAgICAgICBvcGVuU3luYzogcmV0cnlpZnlTeW5jKGZzLm9wZW5TeW5jLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgcmVhZEZpbGVTeW5jOiByZXRyeWlmeVN5bmMoZnMucmVhZEZpbGVTeW5jLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgcmVuYW1lU3luYzogcmV0cnlpZnlTeW5jKGZzLnJlbmFtZVN5bmMsIEhhbmRsZXJzLmlzUmV0cmlhYmxlRXJyb3IpLFxuICAgICAgICBzdGF0U3luYzogcmV0cnlpZnlTeW5jKGZzLnN0YXRTeW5jLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgd3JpdGVTeW5jOiByZXRyeWlmeVN5bmMoZnMud3JpdGVTeW5jLCBIYW5kbGVycy5pc1JldHJpYWJsZUVycm9yKSxcbiAgICAgICAgd3JpdGVGaWxlU3luYzogcmV0cnlpZnlTeW5jKGZzLndyaXRlRmlsZVN5bmMsIEhhbmRsZXJzLmlzUmV0cmlhYmxlRXJyb3IpXG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgRlM7XG4iLCIvKiBJTVBPUlQgKi9cbmltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG4vKiBNQUlOICovXG5jb25zdCBERUZBVUxUX0VOQ09ESU5HID0gJ3V0ZjgnO1xuY29uc3QgREVGQVVMVF9GSUxFX01PREUgPSAwbzY2NjtcbmNvbnN0IERFRkFVTFRfRk9MREVSX01PREUgPSAwbzc3NztcbmNvbnN0IERFRkFVTFRfUkVBRF9PUFRJT05TID0ge307XG5jb25zdCBERUZBVUxUX1dSSVRFX09QVElPTlMgPSB7fTtcbmNvbnN0IERFRkFVTFRfVVNFUl9VSUQgPSBvcy51c2VySW5mbygpLnVpZDtcbmNvbnN0IERFRkFVTFRfVVNFUl9HSUQgPSBvcy51c2VySW5mbygpLmdpZDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVF9BU1lOQyA9IDc1MDA7XG5jb25zdCBERUZBVUxUX1RJTUVPVVRfU1lOQyA9IDEwMDA7XG5jb25zdCBJU19QT1NJWCA9ICEhcHJvY2Vzcy5nZXR1aWQ7XG5jb25zdCBJU19VU0VSX1JPT1QgPSBwcm9jZXNzLmdldHVpZCA/ICFwcm9jZXNzLmdldHVpZCgpIDogZmFsc2U7XG5jb25zdCBMSU1JVF9CQVNFTkFNRV9MRU5HVEggPSAxMjg7IC8vVE9ETzogRmV0Y2ggdGhlIHJlYWwgbGltaXQgZnJvbSB0aGUgZmlsZXN5c3RlbSAvL1RPRE86IEZldGNoIHRoZSB3aG9sZS1wYXRoIGxlbmd0aCBsaW1pdCB0b29cbmNvbnN0IExJTUlUX0ZJTEVTX0RFU0NSSVBUT1JTID0gMTAwMDA7IC8vVE9ETzogRmV0Y2ggdGhlIHJlYWwgbGltaXQgZnJvbSB0aGUgZmlsZXN5c3RlbVxuY29uc3QgTk9PUCA9ICgpID0+IHsgfTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IHsgREVGQVVMVF9FTkNPRElORywgREVGQVVMVF9GSUxFX01PREUsIERFRkFVTFRfRk9MREVSX01PREUsIERFRkFVTFRfUkVBRF9PUFRJT05TLCBERUZBVUxUX1dSSVRFX09QVElPTlMsIERFRkFVTFRfVVNFUl9VSUQsIERFRkFVTFRfVVNFUl9HSUQsIERFRkFVTFRfVElNRU9VVF9BU1lOQywgREVGQVVMVF9USU1FT1VUX1NZTkMsIElTX1BPU0lYLCBJU19VU0VSX1JPT1QsIExJTUlUX0JBU0VOQU1FX0xFTkdUSCwgTElNSVRfRklMRVNfREVTQ1JJUFRPUlMsIE5PT1AgfTtcbiIsIi8qIElNUE9SVCAqL1xuLyogTUFJTiAqL1xuY29uc3QgaXNFeGNlcHRpb24gPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpICYmICgnY29kZScgaW4gdmFsdWUpO1xufTtcbmNvbnN0IGlzRnVuY3Rpb24gPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyk7XG59O1xuY29uc3QgaXNTdHJpbmcgPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpO1xufTtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuICh2YWx1ZSA9PT0gdW5kZWZpbmVkKTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IGlzRXhjZXB0aW9uLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNVbmRlZmluZWQgfTtcbiIsIi8qIElNUE9SVCAqL1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbi8qIE1BSU4gKi9cbmNvbnN0IElTX0xJTlVYID0gKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpO1xuY29uc3QgSVNfV0lORE9XUyA9IChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IHsgSVNfTElOVVgsIElTX1dJTkRPV1MgfTtcbiIsIi8qIElNUE9SVCAqL1xuaW1wb3J0IHsgSVNfTElOVVgsIElTX1dJTkRPV1MgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG4vL1VSTDogaHR0cHM6Ly9naXRodWIuY29tL3RhcGpzL3NpZ25hbC1leGl0L2Jsb2IvMDNkZDc3YTk2Y2FhMzA5YzZhMDJjNTkyNzRkNThjODEyYTJkY2U0NS9zaWduYWxzLmpzXG5jb25zdCBTaWduYWxzID0gWydTSUdBQlJUJywgJ1NJR0FMUk0nLCAnU0lHSFVQJywgJ1NJR0lOVCcsICdTSUdURVJNJ107XG5pZiAoIUlTX1dJTkRPV1MpIHtcbiAgICBTaWduYWxzLnB1c2goJ1NJR1ZUQUxSTScsICdTSUdYQ1BVJywgJ1NJR1hGU1onLCAnU0lHVVNSMicsICdTSUdUUkFQJywgJ1NJR1NZUycsICdTSUdRVUlUJywgJ1NJR0lPVCcpO1xufVxuaWYgKElTX0xJTlVYKSB7XG4gICAgU2lnbmFscy5wdXNoKCdTSUdJTycsICdTSUdQT0xMJywgJ1NJR1BXUicsICdTSUdTVEtGTFQnLCAnU0lHVU5VU0VEJyk7XG59XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IFNpZ25hbHM7XG4iLCIvKiBJTVBPUlQgKi9cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBJU19XSU5ET1dTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnLi9zaWduYWxzLmpzJztcbi8qIE1BSU4gKi9cbmNsYXNzIEludGVyY2VwdG9yIHtcbiAgICAvKiBDT05TVFJVQ1RPUiAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuZXhpdGVkID0gZmFsc2U7XG4gICAgICAgIC8qIEFQSSAqL1xuICAgICAgICB0aGlzLmV4aXQgPSAoc2lnbmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGl0ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5leGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKElTX1dJTkRPV1MgJiYgKHNpZ25hbCAhPT0gJ1NJR0lOVCcgJiYgc2lnbmFsICE9PSAnU0lHVEVSTScgJiYgc2lnbmFsICE9PSAnU0lHS0lMTCcpKSB7IC8vIFdpbmRvd3MgZG9lc24ndCBzdXBwb3J0IFBPU0lYIHNpZ25hbHMsIGJ1dCBOb2RlIGVtdWxhdGVzIHRoZXNlIDMgc2lnbmFscyBmb3IgdXNcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCAnU0lHVEVSTScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBzaWduYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ob29rID0gKCkgPT4ge1xuICAgICAgICAgICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4gdGhpcy5leGl0KCkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaWduYWwgb2YgU2lnbmFscykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHRoaXMuZXhpdChzaWduYWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgXCJwcm9jZXNzLm9uY2VcIiBjYW4gdGhyb3cuLi5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmVnaXN0ZXIgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmFkZChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhvb2soKTtcbiAgICB9XG59XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IG5ldyBJbnRlcmNlcHRvcigpO1xuIiwiLyogSU1QT1JUICovXG5pbXBvcnQgSW50ZXJjZXB0b3IgZnJvbSAnLi9pbnRlcmNlcHRvci5qcyc7XG4vKiBNQUlOICovXG5jb25zdCB3aGVuRXhpdCA9IEludGVyY2VwdG9yLnJlZ2lzdGVyO1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCB3aGVuRXhpdDtcbiIsIi8qIElNUE9SVCAqL1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBmcyBmcm9tICdzdHViYm9ybi1mcyc7XG5pbXBvcnQgd2hlbkV4aXQgZnJvbSAnd2hlbi1leGl0JztcbmltcG9ydCB7IExJTUlUX0JBU0VOQU1FX0xFTkdUSCB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG4vL1RPRE86IE1heWJlIHB1Ymxpc2ggdGhpcyBhcyBhIHN0YW5kYWxvbmUgcGFja2FnZVxuY29uc3QgVGVtcCA9IHtcbiAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICBzdG9yZToge30sXG4gICAgLyogQVBJICovXG4gICAgY3JlYXRlOiAoZmlsZVBhdGgpID0+IHtcbiAgICAgICAgY29uc3QgcmFuZG9tbmVzcyA9IGAwMDAwMDAke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE2Nzc3MjE1KS50b1N0cmluZygxNil9YC5zbGljZSgtNik7IC8vIDYgcmFuZG9tLWVub3VnaCBoZXggY2hhcmFjdGVyc1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpLnRvU3RyaW5nKCkuc2xpY2UoLTEwKTsgLy8gMTAgcHJlY2lzZSB0aW1lc3RhbXAgZGlnaXRzXG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICd0bXAtJztcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gYC4ke3ByZWZpeH0ke3RpbWVzdGFtcH0ke3JhbmRvbW5lc3N9YDtcbiAgICAgICAgY29uc3QgdGVtcFBhdGggPSBgJHtmaWxlUGF0aH0ke3N1ZmZpeH1gO1xuICAgICAgICByZXR1cm4gdGVtcFBhdGg7XG4gICAgfSxcbiAgICBnZXQ6IChmaWxlUGF0aCwgY3JlYXRvciwgcHVyZ2UgPSB0cnVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBQYXRoID0gVGVtcC50cnVuY2F0ZShjcmVhdG9yKGZpbGVQYXRoKSk7XG4gICAgICAgIGlmICh0ZW1wUGF0aCBpbiBUZW1wLnN0b3JlKVxuICAgICAgICAgICAgcmV0dXJuIFRlbXAuZ2V0KGZpbGVQYXRoLCBjcmVhdG9yLCBwdXJnZSk7IC8vIENvbGxpc2lvbiBmb3VuZCwgdHJ5IGFnYWluXG4gICAgICAgIFRlbXAuc3RvcmVbdGVtcFBhdGhdID0gcHVyZ2U7XG4gICAgICAgIGNvbnN0IGRpc3Bvc2VyID0gKCkgPT4gZGVsZXRlIFRlbXAuc3RvcmVbdGVtcFBhdGhdO1xuICAgICAgICByZXR1cm4gW3RlbXBQYXRoLCBkaXNwb3Nlcl07XG4gICAgfSxcbiAgICBwdXJnZTogKGZpbGVQYXRoKSA9PiB7XG4gICAgICAgIGlmICghVGVtcC5zdG9yZVtmaWxlUGF0aF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlbGV0ZSBUZW1wLnN0b3JlW2ZpbGVQYXRoXTtcbiAgICAgICAgZnMuYXR0ZW1wdC51bmxpbmsoZmlsZVBhdGgpO1xuICAgIH0sXG4gICAgcHVyZ2VTeW5jOiAoZmlsZVBhdGgpID0+IHtcbiAgICAgICAgaWYgKCFUZW1wLnN0b3JlW2ZpbGVQYXRoXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVsZXRlIFRlbXAuc3RvcmVbZmlsZVBhdGhdO1xuICAgICAgICBmcy5hdHRlbXB0LnVubGlua1N5bmMoZmlsZVBhdGgpO1xuICAgIH0sXG4gICAgcHVyZ2VTeW5jQWxsOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZVBhdGggaW4gVGVtcC5zdG9yZSkge1xuICAgICAgICAgICAgVGVtcC5wdXJnZVN5bmMoZmlsZVBhdGgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0cnVuY2F0ZTogKGZpbGVQYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XG4gICAgICAgIGlmIChiYXNlbmFtZS5sZW5ndGggPD0gTElNSVRfQkFTRU5BTUVfTEVOR1RIKVxuICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoOyAvL0ZJWE1FOiBSb3VnaCBhbmQgcXVpY2sgYXR0ZW1wdCBhdCBkZXRlY3Rpbmcgb2sgbGVuZ3Roc1xuICAgICAgICBjb25zdCB0cnVuY2FibGUgPSAvXihcXC4/KSguKj8pKCg/OlxcLlteLl0rKT8oPzpcXC50bXAtXFxkezEwfVthLWYwLTldezZ9KT8pJC8uZXhlYyhiYXNlbmFtZSk7XG4gICAgICAgIGlmICghdHJ1bmNhYmxlKVxuICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoOyAvL0ZJWE1FOiBObyB0cnVuY2FibGUgcGFydCBkZXRlY3RlZCwgY2FuJ3QgcmVhbGx5IGRvIG11Y2ggd2l0aG91dCBhbHNvIGNoYW5naW5nIHRoZSBwYXJlbnQgcGF0aCwgd2hpY2ggaXMgdW5zYWZlLCBob3BpbmcgZm9yIHRoZSBiZXN0IGhlcmVcbiAgICAgICAgY29uc3QgdHJ1bmNhdGlvbkxlbmd0aCA9IGJhc2VuYW1lLmxlbmd0aCAtIExJTUlUX0JBU0VOQU1FX0xFTkdUSDtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGVQYXRoLnNsaWNlKDAsIC1iYXNlbmFtZS5sZW5ndGgpfSR7dHJ1bmNhYmxlWzFdfSR7dHJ1bmNhYmxlWzJdLnNsaWNlKDAsIC10cnVuY2F0aW9uTGVuZ3RoKX0ke3RydW5jYWJsZVszXX1gOyAvL0ZJWE1FOiBUaGUgdHJ1bmNhYmxlIHBhcnQgbWlnaHQgYmUgc2hvcnRlciB0aGFuIG5lZWRlZCBoZXJlXG4gICAgfVxufTtcbi8qIElOSVQgKi9cbndoZW5FeGl0KFRlbXAucHVyZ2VTeW5jQWxsKTsgLy8gRW5zdXJpbmcgcHVyZ2VhYmxlIHRlbXAgZmlsZXMgYXJlIHB1cmdlZCBvbiBleGl0XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IFRlbXA7XG4iLCIvKiBJTVBPUlQgKi9cbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnc3R1YmJvcm4tZnMnO1xuaW1wb3J0IHsgREVGQVVMVF9FTkNPRElORywgREVGQVVMVF9GSUxFX01PREUsIERFRkFVTFRfRk9MREVSX01PREUsIERFRkFVTFRfUkVBRF9PUFRJT05TLCBERUZBVUxUX1dSSVRFX09QVElPTlMsIERFRkFVTFRfVVNFUl9VSUQsIERFRkFVTFRfVVNFUl9HSUQsIERFRkFVTFRfVElNRU9VVF9BU1lOQywgREVGQVVMVF9USU1FT1VUX1NZTkMsIElTX1BPU0lYIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgaXNFeGNlcHRpb24sIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCB9IGZyb20gJy4vdXRpbHMvbGFuZy5qcyc7XG5pbXBvcnQgU2NoZWR1bGVyIGZyb20gJy4vdXRpbHMvc2NoZWR1bGVyLmpzJztcbmltcG9ydCBUZW1wIGZyb20gJy4vdXRpbHMvdGVtcC5qcyc7XG5mdW5jdGlvbiByZWFkRmlsZShmaWxlUGF0aCwgb3B0aW9ucyA9IERFRkFVTFRfUkVBRF9PUFRJT05TKSB7XG4gICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKVxuICAgICAgICByZXR1cm4gcmVhZEZpbGUoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6IG9wdGlvbnMgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IERhdGUubm93KCkgKyAoKG9wdGlvbnMudGltZW91dCA/PyBERUZBVUxUX1RJTUVPVVRfQVNZTkMpIHx8IC0xKTtcbiAgICByZXR1cm4gZnMucmV0cnkucmVhZEZpbGUodGltZW91dCkoZmlsZVBhdGgsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBvcHRpb25zID0gREVGQVVMVF9SRUFEX09QVElPTlMpIHtcbiAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpXG4gICAgICAgIHJldHVybiByZWFkRmlsZVN5bmMoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6IG9wdGlvbnMgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IERhdGUubm93KCkgKyAoKG9wdGlvbnMudGltZW91dCA/PyBERUZBVUxUX1RJTUVPVVRfU1lOQykgfHwgLTEpO1xuICAgIHJldHVybiBmcy5yZXRyeS5yZWFkRmlsZVN5bmModGltZW91dCkoZmlsZVBhdGgsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gd3JpdGVGaWxlKGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKVxuICAgICAgICByZXR1cm4gd3JpdGVGaWxlKGZpbGVQYXRoLCBkYXRhLCBERUZBVUxUX1dSSVRFX09QVElPTlMsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHByb21pc2UgPSB3cml0ZUZpbGVBc3luYyhmaWxlUGF0aCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgaWYgKGNhbGxiYWNrKVxuICAgICAgICBwcm9taXNlLnRoZW4oY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZUFzeW5jKGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0gREVGQVVMVF9XUklURV9PUFRJT05TKSB7XG4gICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKVxuICAgICAgICByZXR1cm4gd3JpdGVGaWxlQXN5bmMoZmlsZVBhdGgsIGRhdGEsIHsgZW5jb2Rpbmc6IG9wdGlvbnMgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IERhdGUubm93KCkgKyAoKG9wdGlvbnMudGltZW91dCA/PyBERUZBVUxUX1RJTUVPVVRfQVNZTkMpIHx8IC0xKTtcbiAgICBsZXQgc2NoZWR1bGVyQ3VzdG9tRGlzcG9zZXIgPSBudWxsO1xuICAgIGxldCBzY2hlZHVsZXJEaXNwb3NlciA9IG51bGw7XG4gICAgbGV0IHRlbXBEaXNwb3NlciA9IG51bGw7XG4gICAgbGV0IHRlbXBQYXRoID0gbnVsbDtcbiAgICBsZXQgZmQgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnNjaGVkdWxlKVxuICAgICAgICAgICAgc2NoZWR1bGVyQ3VzdG9tRGlzcG9zZXIgPSBhd2FpdCBvcHRpb25zLnNjaGVkdWxlKGZpbGVQYXRoKTtcbiAgICAgICAgc2NoZWR1bGVyRGlzcG9zZXIgPSBhd2FpdCBTY2hlZHVsZXIuc2NoZWR1bGUoZmlsZVBhdGgpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aFJlYWwgPSBhd2FpdCBmcy5hdHRlbXB0LnJlYWxwYXRoKGZpbGVQYXRoKTtcbiAgICAgICAgY29uc3QgZmlsZVBhdGhFeGlzdHMgPSAhIWZpbGVQYXRoUmVhbDtcbiAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aFJlYWwgfHwgZmlsZVBhdGg7XG4gICAgICAgIFt0ZW1wUGF0aCwgdGVtcERpc3Bvc2VyXSA9IFRlbXAuZ2V0KGZpbGVQYXRoLCBvcHRpb25zLnRtcENyZWF0ZSB8fCBUZW1wLmNyZWF0ZSwgIShvcHRpb25zLnRtcFB1cmdlID09PSBmYWxzZSkpO1xuICAgICAgICBjb25zdCB1c2VTdGF0Q2hvd24gPSBJU19QT1NJWCAmJiBpc1VuZGVmaW5lZChvcHRpb25zLmNob3duKTtcbiAgICAgICAgY29uc3QgdXNlU3RhdE1vZGUgPSBpc1VuZGVmaW5lZChvcHRpb25zLm1vZGUpO1xuICAgICAgICBpZiAoZmlsZVBhdGhFeGlzdHMgJiYgKHVzZVN0YXRDaG93biB8fCB1c2VTdGF0TW9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuYXR0ZW1wdC5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgICAgICAgICAgICAgICBpZiAodXNlU3RhdENob3duKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hvd24gPSB7IHVpZDogc3RhdHMudWlkLCBnaWQ6IHN0YXRzLmdpZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodXNlU3RhdE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RlID0gc3RhdHMubW9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaWxlUGF0aEV4aXN0cykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCBmcy5hdHRlbXB0Lm1rZGlyKHBhcmVudFBhdGgsIHtcbiAgICAgICAgICAgICAgICBtb2RlOiBERUZBVUxUX0ZPTERFUl9NT0RFLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZmQgPSBhd2FpdCBmcy5yZXRyeS5vcGVuKHRpbWVvdXQpKHRlbXBQYXRoLCAndycsIG9wdGlvbnMubW9kZSB8fCBERUZBVUxUX0ZJTEVfTU9ERSk7XG4gICAgICAgIGlmIChvcHRpb25zLnRtcENyZWF0ZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMudG1wQ3JlYXRlZCh0ZW1wUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5yZXRyeS53cml0ZSh0aW1lb3V0KShmZCwgZGF0YSwgMCwgb3B0aW9ucy5lbmNvZGluZyB8fCBERUZBVUxUX0VOQ09ESU5HKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNVbmRlZmluZWQoZGF0YSkpIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnJldHJ5LndyaXRlKHRpbWVvdXQpKGZkLCBkYXRhLCAwLCBkYXRhLmxlbmd0aCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZnN5bmMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mc3luY1dhaXQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucmV0cnkuZnN5bmModGltZW91dCkoZmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZnMuYXR0ZW1wdC5mc3luYyhmZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZnMucmV0cnkuY2xvc2UodGltZW91dCkoZmQpO1xuICAgICAgICBmZCA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zLmNob3duICYmIChvcHRpb25zLmNob3duLnVpZCAhPT0gREVGQVVMVF9VU0VSX1VJRCB8fCBvcHRpb25zLmNob3duLmdpZCAhPT0gREVGQVVMVF9VU0VSX0dJRCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLmF0dGVtcHQuY2hvd24odGVtcFBhdGgsIG9wdGlvbnMuY2hvd24udWlkLCBvcHRpb25zLmNob3duLmdpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMubW9kZSAmJiBvcHRpb25zLm1vZGUgIT09IERFRkFVTFRfRklMRV9NT0RFKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5hdHRlbXB0LmNobW9kKHRlbXBQYXRoLCBvcHRpb25zLm1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5yZXRyeS5yZW5hbWUodGltZW91dCkodGVtcFBhdGgsIGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICghaXNFeGNlcHRpb24oZXJyb3IpKVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgaWYgKGVycm9yLmNvZGUgIT09ICdFTkFNRVRPT0xPTkcnKVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgYXdhaXQgZnMucmV0cnkucmVuYW1lKHRpbWVvdXQpKHRlbXBQYXRoLCBUZW1wLnRydW5jYXRlKGZpbGVQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcERpc3Bvc2VyKCk7XG4gICAgICAgIHRlbXBQYXRoID0gbnVsbDtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGlmIChmZClcbiAgICAgICAgICAgIGF3YWl0IGZzLmF0dGVtcHQuY2xvc2UoZmQpO1xuICAgICAgICBpZiAodGVtcFBhdGgpXG4gICAgICAgICAgICBUZW1wLnB1cmdlKHRlbXBQYXRoKTtcbiAgICAgICAgaWYgKHNjaGVkdWxlckN1c3RvbURpc3Bvc2VyKVxuICAgICAgICAgICAgc2NoZWR1bGVyQ3VzdG9tRGlzcG9zZXIoKTtcbiAgICAgICAgaWYgKHNjaGVkdWxlckRpc3Bvc2VyKVxuICAgICAgICAgICAgc2NoZWR1bGVyRGlzcG9zZXIoKTtcbiAgICB9XG59XG5mdW5jdGlvbiB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0gREVGQVVMVF9XUklURV9PUFRJT05TKSB7XG4gICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKVxuICAgICAgICByZXR1cm4gd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZGF0YSwgeyBlbmNvZGluZzogb3B0aW9ucyB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gRGF0ZS5ub3coKSArICgob3B0aW9ucy50aW1lb3V0ID8/IERFRkFVTFRfVElNRU9VVF9TWU5DKSB8fCAtMSk7XG4gICAgbGV0IHRlbXBEaXNwb3NlciA9IG51bGw7XG4gICAgbGV0IHRlbXBQYXRoID0gbnVsbDtcbiAgICBsZXQgZmQgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoUmVhbCA9IGZzLmF0dGVtcHQucmVhbHBhdGhTeW5jKGZpbGVQYXRoKTtcbiAgICAgICAgY29uc3QgZmlsZVBhdGhFeGlzdHMgPSAhIWZpbGVQYXRoUmVhbDtcbiAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aFJlYWwgfHwgZmlsZVBhdGg7XG4gICAgICAgIFt0ZW1wUGF0aCwgdGVtcERpc3Bvc2VyXSA9IFRlbXAuZ2V0KGZpbGVQYXRoLCBvcHRpb25zLnRtcENyZWF0ZSB8fCBUZW1wLmNyZWF0ZSwgIShvcHRpb25zLnRtcFB1cmdlID09PSBmYWxzZSkpO1xuICAgICAgICBjb25zdCB1c2VTdGF0Q2hvd24gPSBJU19QT1NJWCAmJiBpc1VuZGVmaW5lZChvcHRpb25zLmNob3duKTtcbiAgICAgICAgY29uc3QgdXNlU3RhdE1vZGUgPSBpc1VuZGVmaW5lZChvcHRpb25zLm1vZGUpO1xuICAgICAgICBpZiAoZmlsZVBhdGhFeGlzdHMgJiYgKHVzZVN0YXRDaG93biB8fCB1c2VTdGF0TW9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuYXR0ZW1wdC5zdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gICAgICAgICAgICAgICAgaWYgKHVzZVN0YXRDaG93bikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNob3duID0geyB1aWQ6IHN0YXRzLnVpZCwgZ2lkOiBzdGF0cy5naWQgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVzZVN0YXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kZSA9IHN0YXRzLm1vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZmlsZVBhdGhFeGlzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgZnMuYXR0ZW1wdC5ta2RpclN5bmMocGFyZW50UGF0aCwge1xuICAgICAgICAgICAgICAgIG1vZGU6IERFRkFVTFRfRk9MREVSX01PREUsXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmZCA9IGZzLnJldHJ5Lm9wZW5TeW5jKHRpbWVvdXQpKHRlbXBQYXRoLCAndycsIG9wdGlvbnMubW9kZSB8fCBERUZBVUxUX0ZJTEVfTU9ERSk7XG4gICAgICAgIGlmIChvcHRpb25zLnRtcENyZWF0ZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMudG1wQ3JlYXRlZCh0ZW1wUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgICAgICBmcy5yZXRyeS53cml0ZVN5bmModGltZW91dCkoZmQsIGRhdGEsIDAsIG9wdGlvbnMuZW5jb2RpbmcgfHwgREVGQVVMVF9FTkNPRElORyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzVW5kZWZpbmVkKGRhdGEpKSB7XG4gICAgICAgICAgICBmcy5yZXRyeS53cml0ZVN5bmModGltZW91dCkoZmQsIGRhdGEsIDAsIGRhdGEubGVuZ3RoLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5mc3luYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZzeW5jV2FpdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBmcy5yZXRyeS5mc3luY1N5bmModGltZW91dCkoZmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZnMuYXR0ZW1wdC5mc3luYyhmZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnMucmV0cnkuY2xvc2VTeW5jKHRpbWVvdXQpKGZkKTtcbiAgICAgICAgZmQgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9ucy5jaG93biAmJiAob3B0aW9ucy5jaG93bi51aWQgIT09IERFRkFVTFRfVVNFUl9VSUQgfHwgb3B0aW9ucy5jaG93bi5naWQgIT09IERFRkFVTFRfVVNFUl9HSUQpKSB7XG4gICAgICAgICAgICBmcy5hdHRlbXB0LmNob3duU3luYyh0ZW1wUGF0aCwgb3B0aW9ucy5jaG93bi51aWQsIG9wdGlvbnMuY2hvd24uZ2lkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5tb2RlICYmIG9wdGlvbnMubW9kZSAhPT0gREVGQVVMVF9GSUxFX01PREUpIHtcbiAgICAgICAgICAgIGZzLmF0dGVtcHQuY2htb2RTeW5jKHRlbXBQYXRoLCBvcHRpb25zLm1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5yZXRyeS5yZW5hbWVTeW5jKHRpbWVvdXQpKHRlbXBQYXRoLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoIWlzRXhjZXB0aW9uKGVycm9yKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlICE9PSAnRU5BTUVUT09MT05HJylcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIGZzLnJldHJ5LnJlbmFtZVN5bmModGltZW91dCkodGVtcFBhdGgsIFRlbXAudHJ1bmNhdGUoZmlsZVBhdGgpKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wRGlzcG9zZXIoKTtcbiAgICAgICAgdGVtcFBhdGggPSBudWxsO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGZkKVxuICAgICAgICAgICAgZnMuYXR0ZW1wdC5jbG9zZVN5bmMoZmQpO1xuICAgICAgICBpZiAodGVtcFBhdGgpXG4gICAgICAgICAgICBUZW1wLnB1cmdlKHRlbXBQYXRoKTtcbiAgICB9XG59XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IHJlYWRGaWxlLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZSwgd3JpdGVGaWxlU3luYyB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZ2V4cENvZGUgPSBleHBvcnRzLmdldEVzbUV4cG9ydE5hbWUgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5zYWZlU3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuYWRkQ29kZUFyZyA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLl9Db2RlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5JREVOVElGSUVSID0gZXhwb3J0cy5fQ29kZU9yTmFtZSA9IHZvaWQgMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXh0cmFuZW91cy1jbGFzc1xuY2xhc3MgX0NvZGVPck5hbWUge1xufVxuZXhwb3J0cy5fQ29kZU9yTmFtZSA9IF9Db2RlT3JOYW1lO1xuZXhwb3J0cy5JREVOVElGSUVSID0gL15bYS16JF9dW2EteiRfMC05XSokL2k7XG5jbGFzcyBOYW1lIGV4dGVuZHMgX0NvZGVPck5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgaWYgKCFleHBvcnRzLklERU5USUZJRVIudGVzdChzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IG5hbWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcIik7XG4gICAgICAgIHRoaXMuc3RyID0gcztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4geyBbdGhpcy5zdHJdOiAxIH07XG4gICAgfVxufVxuZXhwb3J0cy5OYW1lID0gTmFtZTtcbmNsYXNzIF9Db2RlIGV4dGVuZHMgX0NvZGVPck5hbWUge1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB0eXBlb2YgY29kZSA9PT0gXCJzdHJpbmdcIiA/IFtjb2RlXSA6IGNvZGU7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHI7XG4gICAgfVxuICAgIGVtcHR5U3RyKCkge1xuICAgICAgICBpZiAodGhpcy5faXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2l0ZW1zWzBdO1xuICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJcIiB8fCBpdGVtID09PSAnXCJcIic7XG4gICAgfVxuICAgIGdldCBzdHIoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLl9zdHIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9zdHIgPSB0aGlzLl9pdGVtcy5yZWR1Y2UoKHMsIGMpID0+IGAke3N9JHtjfWAsIFwiXCIpKSk7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX25hbWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAodGhpcy5fbmFtZXMgPSB0aGlzLl9pdGVtcy5yZWR1Y2UoKG5hbWVzLCBjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIE5hbWUpXG4gICAgICAgICAgICAgICAgbmFtZXNbYy5zdHJdID0gKG5hbWVzW2Muc3RyXSB8fCAwKSArIDE7XG4gICAgICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgICAgIH0sIHt9KSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuX0NvZGUgPSBfQ29kZTtcbmV4cG9ydHMubmlsID0gbmV3IF9Db2RlKFwiXCIpO1xuZnVuY3Rpb24gXyhzdHJzLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgY29kZSA9IFtzdHJzWzBdXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgICBhZGRDb2RlQXJnKGNvZGUsIGFyZ3NbaV0pO1xuICAgICAgICBjb2RlLnB1c2goc3Ryc1srK2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfQ29kZShjb2RlKTtcbn1cbmV4cG9ydHMuXyA9IF87XG5jb25zdCBwbHVzID0gbmV3IF9Db2RlKFwiK1wiKTtcbmZ1bmN0aW9uIHN0cihzdHJzLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgZXhwciA9IFtzYWZlU3RyaW5naWZ5KHN0cnNbMF0pXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgICBleHByLnB1c2gocGx1cyk7XG4gICAgICAgIGFkZENvZGVBcmcoZXhwciwgYXJnc1tpXSk7XG4gICAgICAgIGV4cHIucHVzaChwbHVzLCBzYWZlU3RyaW5naWZ5KHN0cnNbKytpXSkpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShleHByKTtcbiAgICByZXR1cm4gbmV3IF9Db2RlKGV4cHIpO1xufVxuZXhwb3J0cy5zdHIgPSBzdHI7XG5mdW5jdGlvbiBhZGRDb2RlQXJnKGNvZGUsIGFyZykge1xuICAgIGlmIChhcmcgaW5zdGFuY2VvZiBfQ29kZSlcbiAgICAgICAgY29kZS5wdXNoKC4uLmFyZy5faXRlbXMpO1xuICAgIGVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIE5hbWUpXG4gICAgICAgIGNvZGUucHVzaChhcmcpO1xuICAgIGVsc2VcbiAgICAgICAgY29kZS5wdXNoKGludGVycG9sYXRlKGFyZykpO1xufVxuZXhwb3J0cy5hZGRDb2RlQXJnID0gYWRkQ29kZUFyZztcbmZ1bmN0aW9uIG9wdGltaXplKGV4cHIpIHtcbiAgICBsZXQgaSA9IDE7XG4gICAgd2hpbGUgKGkgPCBleHByLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKGV4cHJbaV0gPT09IHBsdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG1lcmdlRXhwckl0ZW1zKGV4cHJbaSAtIDFdLCBleHByW2kgKyAxXSk7XG4gICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBleHByLnNwbGljZShpIC0gMSwgMywgcmVzKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHJbaSsrXSA9IFwiK1wiO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZUV4cHJJdGVtcyhhLCBiKSB7XG4gICAgaWYgKGIgPT09ICdcIlwiJylcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgaWYgKGEgPT09ICdcIlwiJylcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBOYW1lIHx8IGFbYS5sZW5ndGggLSAxXSAhPT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gYCR7YS5zbGljZSgwLCAtMSl9JHtifVwiYDtcbiAgICAgICAgaWYgKGJbMF0gPT09ICdcIicpXG4gICAgICAgICAgICByZXR1cm4gYS5zbGljZSgwLCAtMSkgKyBiLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYiA9PSBcInN0cmluZ1wiICYmIGJbMF0gPT09ICdcIicgJiYgIShhIGluc3RhbmNlb2YgTmFtZSkpXG4gICAgICAgIHJldHVybiBgXCIke2F9JHtiLnNsaWNlKDEpfWA7XG4gICAgcmV0dXJuO1xufVxuZnVuY3Rpb24gc3RyQ29uY2F0KGMxLCBjMikge1xuICAgIHJldHVybiBjMi5lbXB0eVN0cigpID8gYzEgOiBjMS5lbXB0eVN0cigpID8gYzIgOiBzdHIgYCR7YzF9JHtjMn1gO1xufVxuZXhwb3J0cy5zdHJDb25jYXQgPSBzdHJDb25jYXQ7XG4vLyBUT0RPIGRvIG5vdCBhbGxvdyBhcnJheXMgaGVyZVxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiB4ID09IFwiYm9vbGVhblwiIHx8IHggPT09IG51bGxcbiAgICAgICAgPyB4XG4gICAgICAgIDogc2FmZVN0cmluZ2lmeShBcnJheS5pc0FycmF5KHgpID8geC5qb2luKFwiLFwiKSA6IHgpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5KHgpIHtcbiAgICByZXR1cm4gbmV3IF9Db2RlKHNhZmVTdHJpbmdpZnkoeCkpO1xufVxuZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG5mdW5jdGlvbiBzYWZlU3RyaW5naWZ5KHgpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeClcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgXCJcXFxcdTIwMjhcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjkvZywgXCJcXFxcdTIwMjlcIik7XG59XG5leHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBzYWZlU3RyaW5naWZ5O1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpID8gbmV3IF9Db2RlKGAuJHtrZXl9YCkgOiBfIGBbJHtrZXl9XWA7XG59XG5leHBvcnRzLmdldFByb3BlcnR5ID0gZ2V0UHJvcGVydHk7XG4vL0RvZXMgYmVzdCBlZmZvcnQgdG8gZm9ybWF0IHRoZSBuYW1lIHByb3Blcmx5XG5mdW5jdGlvbiBnZXRFc21FeHBvcnROYW1lKGtleSkge1xuICAgIGlmICh0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIgJiYgZXhwb3J0cy5JREVOVElGSUVSLnRlc3Qoa2V5KSkge1xuICAgICAgICByZXR1cm4gbmV3IF9Db2RlKGAke2tleX1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBpbnZhbGlkIGV4cG9ydCBuYW1lOiAke2tleX0sIHVzZSBleHBsaWNpdCAkaWQgbmFtZSBtYXBwaW5nYCk7XG59XG5leHBvcnRzLmdldEVzbUV4cG9ydE5hbWUgPSBnZXRFc21FeHBvcnROYW1lO1xuZnVuY3Rpb24gcmVnZXhwQ29kZShyeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUocngudG9TdHJpbmcoKSk7XG59XG5leHBvcnRzLnJlZ2V4cENvZGUgPSByZWdleHBDb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29kZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVmFsdWVTY29wZSA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuY2xhc3MgVmFsdWVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgICAgIHN1cGVyKGBDb2RlR2VuOiBcImNvZGVcIiBmb3IgJHtuYW1lfSBub3QgZGVmaW5lZGApO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmFtZS52YWx1ZTtcbiAgICB9XG59XG52YXIgVXNlZFZhbHVlU3RhdGU7XG4oZnVuY3Rpb24gKFVzZWRWYWx1ZVN0YXRlKSB7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJTdGFydGVkXCJdID0gMF0gPSBcIlN0YXJ0ZWRcIjtcbiAgICBVc2VkVmFsdWVTdGF0ZVtVc2VkVmFsdWVTdGF0ZVtcIkNvbXBsZXRlZFwiXSA9IDFdID0gXCJDb21wbGV0ZWRcIjtcbn0pKFVzZWRWYWx1ZVN0YXRlIHx8IChleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gVXNlZFZhbHVlU3RhdGUgPSB7fSkpO1xuZXhwb3J0cy52YXJLaW5kcyA9IHtcbiAgICBjb25zdDogbmV3IGNvZGVfMS5OYW1lKFwiY29uc3RcIiksXG4gICAgbGV0OiBuZXcgY29kZV8xLk5hbWUoXCJsZXRcIiksXG4gICAgdmFyOiBuZXcgY29kZV8xLk5hbWUoXCJ2YXJcIiksXG59O1xuY2xhc3MgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHsgcHJlZml4ZXMsIHBhcmVudCB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5fbmFtZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcHJlZml4ZXMgPSBwcmVmaXhlcztcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICB0b05hbWUobmFtZU9yUHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuYW1lT3JQcmVmaXggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IG5hbWVPclByZWZpeCA6IHRoaXMubmFtZShuYW1lT3JQcmVmaXgpO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IGNvZGVfMS5OYW1lKHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIF9uZXdOYW1lKHByZWZpeCkge1xuICAgICAgICBjb25zdCBuZyA9IHRoaXMuX25hbWVzW3ByZWZpeF0gfHwgdGhpcy5fbmFtZUdyb3VwKHByZWZpeCk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtuZy5pbmRleCsrfWA7XG4gICAgfVxuICAgIF9uYW1lR3JvdXAocHJlZml4KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoKF9iID0gKF9hID0gdGhpcy5fcGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuX3ByZWZpeGVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGFzKHByZWZpeCkpIHx8ICh0aGlzLl9wcmVmaXhlcyAmJiAhdGhpcy5fcHJlZml4ZXMuaGFzKHByZWZpeCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHByZWZpeCBcIiR7cHJlZml4fVwiIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc2NvcGVgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuX25hbWVzW3ByZWZpeF0gPSB7IHByZWZpeCwgaW5kZXg6IDAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TY29wZSA9IFNjb3BlO1xuY2xhc3MgVmFsdWVTY29wZU5hbWUgZXh0ZW5kcyBjb2RlXzEuTmFtZSB7XG4gICAgY29uc3RydWN0b3IocHJlZml4LCBuYW1lU3RyKSB7XG4gICAgICAgIHN1cGVyKG5hbWVTdHIpO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgICB9XG4gICAgc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHksIGl0ZW1JbmRleCB9KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zY29wZVBhdGggPSAoMCwgY29kZV8xLl8pIGAuJHtuZXcgY29kZV8xLk5hbWUocHJvcGVydHkpfVske2l0ZW1JbmRleH1dYDtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gVmFsdWVTY29wZU5hbWU7XG5jb25zdCBsaW5lID0gKDAsIGNvZGVfMS5fKSBgXFxuYDtcbmNsYXNzIFZhbHVlU2NvcGUgZXh0ZW5kcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuX3Njb3BlID0gb3B0cy5zY29wZTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IGxpbmUgOiBjb2RlXzEubmlsIH07XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbHVlU2NvcGVOYW1lKHByZWZpeCwgdGhpcy5fbmV3TmFtZShwcmVmaXgpKTtcbiAgICB9XG4gICAgdmFsdWUobmFtZU9yUHJlZml4LCB2YWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh2YWx1ZS5yZWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IHJlZiBtdXN0IGJlIHBhc3NlZCBpbiB2YWx1ZVwiKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4IH0gPSBuYW1lO1xuICAgICAgICBjb25zdCB2YWx1ZUtleSA9IChfYSA9IHZhbHVlLmtleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsdWUucmVmO1xuICAgICAgICBsZXQgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgaWYgKHZzKSB7XG4gICAgICAgICAgICBjb25zdCBfbmFtZSA9IHZzLmdldCh2YWx1ZUtleSk7XG4gICAgICAgICAgICBpZiAoX25hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICB2cy5zZXQodmFsdWVLZXksIG5hbWUpO1xuICAgICAgICBjb25zdCBzID0gdGhpcy5fc2NvcGVbcHJlZml4XSB8fCAodGhpcy5fc2NvcGVbcHJlZml4XSA9IFtdKTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gcy5sZW5ndGg7XG4gICAgICAgIHNbaXRlbUluZGV4XSA9IHZhbHVlLnJlZjtcbiAgICAgICAgbmFtZS5zZXRWYWx1ZSh2YWx1ZSwgeyBwcm9wZXJ0eTogcHJlZml4LCBpdGVtSW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBnZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIGNvbnN0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiB2cy5nZXQoa2V5T3JSZWYpO1xuICAgIH1cbiAgICBzY29wZVJlZnMoc2NvcGVOYW1lLCB2YWx1ZXMgPSB0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS5zY29wZVBhdGggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgXCIke25hbWV9XCIgaGFzIG5vIHZhbHVlYCk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVfMS5fKSBgJHtzY29wZU5hbWV9JHtuYW1lLnNjb3BlUGF0aH1gO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2NvcGVDb2RlKHZhbHVlcyA9IHRoaXMuX3ZhbHVlcywgdXNlZFZhbHVlcywgZ2V0Q29kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkdWNlVmFsdWVzKHZhbHVlcywgKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lLnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWUudmFsdWUuY29kZTtcbiAgICAgICAgfSwgdXNlZFZhbHVlcywgZ2V0Q29kZSk7XG4gICAgfVxuICAgIF9yZWR1Y2VWYWx1ZXModmFsdWVzLCB2YWx1ZUNvZGUsIHVzZWRWYWx1ZXMgPSB7fSwgZ2V0Q29kZSkge1xuICAgICAgICBsZXQgY29kZSA9IGNvZGVfMS5uaWw7XG4gICAgICAgIGZvciAoY29uc3QgcHJlZml4IGluIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdnMgPSB2YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBuYW1lU2V0ID0gKHVzZWRWYWx1ZXNbcHJlZml4XSA9IHVzZWRWYWx1ZXNbcHJlZml4XSB8fCBuZXcgTWFwKCkpO1xuICAgICAgICAgICAgdnMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLlN0YXJ0ZWQpO1xuICAgICAgICAgICAgICAgIGxldCBjID0gdmFsdWVDb2RlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZiA9IHRoaXMub3B0cy5lczUgPyBleHBvcnRzLnZhcktpbmRzLnZhciA6IGV4cG9ydHMudmFyS2luZHMuY29uc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoMCwgY29kZV8xLl8pIGAke2NvZGV9JHtkZWZ9ICR7bmFtZX0gPSAke2N9OyR7dGhpcy5vcHRzLl9ufWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChjID0gZ2V0Q29kZSA9PT0gbnVsbCB8fCBnZXRDb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRDb2RlKG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7Y30ke3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXJyb3IobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLkNvbXBsZXRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBWYWx1ZVNjb3BlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NvcGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9yID0gZXhwb3J0cy5hbmQgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMub3BlcmF0b3JzID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNvbnN0IHNjb3BlXzEgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbnZhciBjb2RlXzIgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJDb25jYXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJDb25jYXQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLmdldFByb3BlcnR5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVnZXhwQ29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnJlZ2V4cENvZGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuTmFtZTsgfSB9KTtcbnZhciBzY29wZV8yID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5TY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGVOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyS2luZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIudmFyS2luZHM7IH0gfSk7XG5leHBvcnRzLm9wZXJhdG9ycyA9IHtcbiAgICBHVDogbmV3IGNvZGVfMS5fQ29kZShcIj5cIiksXG4gICAgR1RFOiBuZXcgY29kZV8xLl9Db2RlKFwiPj1cIiksXG4gICAgTFQ6IG5ldyBjb2RlXzEuX0NvZGUoXCI8XCIpLFxuICAgIExURTogbmV3IGNvZGVfMS5fQ29kZShcIjw9XCIpLFxuICAgIEVROiBuZXcgY29kZV8xLl9Db2RlKFwiPT09XCIpLFxuICAgIE5FUTogbmV3IGNvZGVfMS5fQ29kZShcIiE9PVwiKSxcbiAgICBOT1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCIhXCIpLFxuICAgIE9SOiBuZXcgY29kZV8xLl9Db2RlKFwifHxcIiksXG4gICAgQU5EOiBuZXcgY29kZV8xLl9Db2RlKFwiJiZcIiksXG4gICAgQUREOiBuZXcgY29kZV8xLl9Db2RlKFwiK1wiKSxcbn07XG5jbGFzcyBOb2RlIHtcbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhfbmFtZXMsIF9jb25zdGFudHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuY2xhc3MgRGVmIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgcmhzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgIH1cbiAgICByZW5kZXIoeyBlczUsIF9uIH0pIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IGVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgPSAke3RoaXMucmhzfWA7XG4gICAgICAgIHJldHVybiBgJHt2YXJLaW5kfSAke3RoaXMubmFtZX0ke3Joc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFuYW1lc1t0aGlzLm5hbWUuc3RyXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmhzKVxuICAgICAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLnJocy5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgICAgIHRoaXMuc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0cztcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ID0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgIW5hbWVzW3RoaXMubGhzLnN0cl0gJiYgIXRoaXMuc2lkZUVmZmVjdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8ge30gOiB7IC4uLnRoaXMubGhzLm5hbWVzIH07XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMucmhzKTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ25PcCBleHRlbmRzIEFzc2lnbiB7XG4gICAgY29uc3RydWN0b3IobGhzLCBvcCwgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcihsaHMsIHJocywgc2lkZUVmZmVjdHMpO1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSAke3RoaXMub3B9PSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgTGFiZWwgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH06YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIEJyZWFrIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsID8gYCAke3RoaXMubGFiZWx9YCA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgYnJlYWske2xhYmVsfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgVGhyb3cgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGB0aHJvdyAke3RoaXMuZXJyb3J9O2AgKyBfbjtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvci5uYW1lcztcbiAgICB9XG59XG5jbGFzcyBBbnlDb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX1gID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGltaXplRXhwcih0aGlzLmNvZGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5jb2RlLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgUGFyZW50Tm9kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5vZGVzID0gW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGNvZGUsIG4pID0+IGNvZGUgKyBuLnJlbmRlcihvcHRzKSwgXCJcIik7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV0ub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobikpXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEsIC4uLm4pO1xuICAgICAgICAgICAgZWxzZSBpZiAobilcbiAgICAgICAgICAgICAgICBub2Rlc1tpXSA9IG47XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRpbmcgYmFja3dhcmRzIGltcHJvdmVzIDEtcGFzcyBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChuLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBuLm5hbWVzKTtcbiAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChuYW1lcywgbikgPT4gYWRkTmFtZXMobmFtZXMsIG4ubmFtZXMpLCB7fSk7XG4gICAgfVxufVxuY2xhc3MgQmxvY2tOb2RlIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgb3B0cy5fbiArIHN1cGVyLnJlbmRlcihvcHRzKSArIFwifVwiICsgb3B0cy5fbjtcbiAgICB9XG59XG5jbGFzcyBSb290IGV4dGVuZHMgUGFyZW50Tm9kZSB7XG59XG5jbGFzcyBFbHNlIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkVsc2Uua2luZCA9IFwiZWxzZVwiO1xuY2xhc3MgSWYgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvbmRpdGlvbiwgbm9kZXMpIHtcbiAgICAgICAgc3VwZXIobm9kZXMpO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBgaWYoJHt0aGlzLmNvbmRpdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGNvZGUgKz0gXCJlbHNlIFwiICsgdGhpcy5lbHNlLnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgY29uc3QgY29uZCA9IHRoaXMuY29uZGl0aW9uO1xuICAgICAgICBpZiAoY29uZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVzOyAvLyBlbHNlIGlzIGlnbm9yZWQgaGVyZVxuICAgICAgICBsZXQgZSA9IHRoaXMuZWxzZTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gZS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBlID0gdGhpcy5lbHNlID0gQXJyYXkuaXNBcnJheShucykgPyBuZXcgRWxzZShucykgOiBucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgSWYgPyBlIDogZS5ub2RlcztcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWYobm90KGNvbmQpLCBlIGluc3RhbmNlb2YgSWYgPyBbZV0gOiBlLm5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UgfHwgIXRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZWxzZSA9IChfYSA9IHRoaXMuZWxzZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIGlmICghKHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykgfHwgdGhpcy5lbHNlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5jb25kaXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmVsc2UubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuSWYua2luZCA9IFwiaWZcIjtcbmNsYXNzIEZvciBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5Gb3Iua2luZCA9IFwiZm9yXCI7XG5jbGFzcyBGb3JMb29wIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy5pdGVyYXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmF0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhdGlvbi5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRm9yUmFuZ2UgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJvbSA9IGZyb207XG4gICAgICAgIHRoaXMudG8gPSB0bztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IG9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZnJvbSwgdG8gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dmFyS2luZH0gJHtuYW1lfT0ke2Zyb219OyAke25hbWV9PCR7dG99OyAke25hbWV9KyspYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IGFkZEV4cHJOYW1lcyhzdXBlci5uYW1lcywgdGhpcy5mcm9tKTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy50byk7XG4gICAgfVxufVxuY2xhc3MgRm9ySXRlciBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IobG9vcCwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb29wID0gbG9vcDtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IGl0ZXJhYmxlO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMudmFyS2luZH0gJHt0aGlzLm5hbWV9ICR7dGhpcy5sb29wfSAke3RoaXMuaXRlcmFibGV9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYWJsZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYWJsZS5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRnVuYyBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgYXJncywgYXN5bmMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5hc3luYyA9IGFzeW5jO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCBfYXN5bmMgPSB0aGlzLmFzeW5jID8gXCJhc3luYyBcIiA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHtfYXN5bmN9ZnVuY3Rpb24gJHt0aGlzLm5hbWV9KCR7dGhpcy5hcmdzfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZ1bmMua2luZCA9IFwiZnVuY1wiO1xuY2xhc3MgUmV0dXJuIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwicmV0dXJuIFwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cblJldHVybi5raW5kID0gXCJyZXR1cm5cIjtcbmNsYXNzIFRyeSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBcInRyeVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5jYXRjaC5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuZmluYWxseS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5jYXRjaC5uYW1lcyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5maW5hbGx5Lm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIENhdGNoIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgY2F0Y2goJHt0aGlzLmVycm9yfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkNhdGNoLmtpbmQgPSBcImNhdGNoXCI7XG5jbGFzcyBGaW5hbGx5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJmaW5hbGx5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRmluYWxseS5raW5kID0gXCJmaW5hbGx5XCI7XG5jbGFzcyBDb2RlR2VuIHtcbiAgICBjb25zdHJ1Y3RvcihleHRTY29wZSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cyA9IFtdO1xuICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IFwiXFxuXCIgOiBcIlwiIH07XG4gICAgICAgIHRoaXMuX2V4dFNjb3BlID0gZXh0U2NvcGU7XG4gICAgICAgIHRoaXMuX3Njb3BlID0gbmV3IHNjb3BlXzEuU2NvcGUoeyBwYXJlbnQ6IGV4dFNjb3BlIH0pO1xuICAgICAgICB0aGlzLl9ub2RlcyA9IFtuZXcgUm9vdCgpXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LnJlbmRlcih0aGlzLm9wdHMpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHVuaXF1ZSBuYW1lIGluIHRoZSBpbnRlcm5hbCBzY29wZVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZVxuICAgIHNjb3BlTmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlIGFuZCBhc3NpZ25zIHZhbHVlIHRvIGl0XG4gICAgc2NvcGVWYWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9leHRTY29wZS52YWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdIHx8ICh0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdID0gbmV3IFNldCgpKTtcbiAgICAgICAgdnMuYWRkKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0U2NvcGVWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5nZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGNvZGUgdGhhdCBhc3NpZ25zIHZhbHVlcyBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgdG8gdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgaW50ZXJuYWxseVxuICAgIC8vIChzYW1lIG5hbWVzIHRoYXQgd2VyZSByZXR1cm5lZCBieSBnZW4uc2NvcGVOYW1lIG9yIGdlbi5zY29wZVZhbHVlKVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhzY29wZU5hbWUsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBfZGVmKHZhcktpbmQsIG5hbWVPclByZWZpeCwgcmhzLCBjb25zdGFudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmIChyaHMgIT09IHVuZGVmaW5lZCAmJiBjb25zdGFudClcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tuYW1lLnN0cl0gPSByaHM7XG4gICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBEZWYodmFyS2luZCwgbmFtZSwgcmhzKSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICAvLyBgY29uc3RgIGRlY2xhcmF0aW9uIChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBjb25zdChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5jb25zdCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGBsZXRgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudCAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgbGV0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmxldCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGB2YXJgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudFxuICAgIHZhcihuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy52YXIsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBhc3NpZ25tZW50IGNvZGVcbiAgICBhc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykpO1xuICAgIH1cbiAgICAvLyBgKz1gIGNvZGVcbiAgICBhZGQobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ25PcChsaHMsIGV4cG9ydHMub3BlcmF0b3JzLkFERCwgcmhzKSk7XG4gICAgfVxuICAgIC8vIGFwcGVuZHMgcGFzc2VkIFNhZmVFeHByIHRvIGNvZGUgb3IgZXhlY3V0ZXMgQmxvY2tcbiAgICBjb2RlKGMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGMoKTtcbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gY29kZV8xLm5pbClcbiAgICAgICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBBbnlDb2RlKGMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIHJldHVybnMgY29kZSBmb3Igb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSBwYXNzZWQgYXJndW1lbnQgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnNcbiAgICBvYmplY3QoLi4ua2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBbXCJ7XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBrZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChjb2RlLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiLFwiKTtcbiAgICAgICAgICAgIGNvZGUucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gdmFsdWUgfHwgdGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIjpcIik7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5hZGRDb2RlQXJnKShjb2RlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29kZS5wdXNoKFwifVwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoY29kZSk7XG4gICAgfVxuICAgIC8vIGBpZmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYHRoZW5Cb2R5YCBhbmQsIG9wdGlvbmFsbHksIGBlbHNlQm9keWAgYXJlIHBhc3NlZClcbiAgICBpZihjb25kaXRpb24sIHRoZW5Cb2R5LCBlbHNlQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgICAgICBpZiAodGhlbkJvZHkgJiYgZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZWxzZSgpLmNvZGUoZWxzZUJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhlbkJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiBib2R5IHdpdGhvdXQgXCJ0aGVuXCIgYm9keScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZWxzZSBpZmAgY2xhdXNlIC0gaW52YWxpZCB3aXRob3V0IGBpZmAgb3IgYWZ0ZXIgYGVsc2VgIGNsYXVzZXNcbiAgICBlbHNlSWYoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgfVxuICAgIC8vIGBlbHNlYCBjbGF1c2UgLSBvbmx5IHZhbGlkIGFmdGVyIGBpZmAgb3IgYGVsc2UgaWZgIGNsYXVzZXNcbiAgICBlbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IEVsc2UoKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgaWZgIHN0YXRlbWVudCAobmVlZGVkIGlmIGdlbi5pZiB3YXMgdXNlZCBvbmx5IHdpdGggY29uZGl0aW9uKVxuICAgIGVuZElmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKElmLCBFbHNlKTtcbiAgICB9XG4gICAgX2Zvcihub2RlLCBmb3JCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZvckJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZm9yQm9keSkuZW5kRm9yKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBhIGdlbmVyaWMgYGZvcmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYGZvckJvZHlgIGlzIHBhc3NlZClcbiAgICBmb3IoaXRlcmF0aW9uLCBmb3JCb2R5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckxvb3AoaXRlcmF0aW9uKSwgZm9yQm9keSk7XG4gICAgfVxuICAgIC8vIGBmb3JgIHN0YXRlbWVudCBmb3IgYSByYW5nZSBvZiB2YWx1ZXNcbiAgICBmb3JSYW5nZShuYW1lT3JQcmVmaXgsIGZyb20sIHRvLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5sZXQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JSYW5nZSh2YXJLaW5kLCBuYW1lLCBmcm9tLCB0byksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLW9mYCBzdGF0ZW1lbnQgKGluIGVzNSBtb2RlIHJlcGxhY2Ugd2l0aCBhIG5vcm1hbCBmb3IgbG9vcClcbiAgICBmb3JPZihuYW1lT3JQcmVmaXgsIGl0ZXJhYmxlLCBmb3JCb2R5LCB2YXJLaW5kID0gc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBpdGVyYWJsZSBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gaXRlcmFibGUgOiB0aGlzLnZhcihcIl9hcnJcIiwgaXRlcmFibGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yUmFuZ2UoXCJfaVwiLCAwLCAoMCwgY29kZV8xLl8pIGAke2Fycn0ubGVuZ3RoYCwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcihuYW1lLCAoMCwgY29kZV8xLl8pIGAke2Fycn1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBmb3JCb2R5KG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcIm9mXCIsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3ItaW5gIHN0YXRlbWVudC5cbiAgICAvLyBXaXRoIG9wdGlvbiBgb3duUHJvcGVydGllc2AgcmVwbGFjZWQgd2l0aCBhIGBmb3Itb2ZgIGxvb3AgZm9yIG9iamVjdCBrZXlzXG4gICAgZm9ySW4obmFtZU9yUHJlZml4LCBvYmosIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMub3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yT2YobmFtZU9yUHJlZml4LCAoMCwgY29kZV8xLl8pIGBPYmplY3Qua2V5cygke29ian0pYCwgZm9yQm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwiaW5cIiwgdmFyS2luZCwgbmFtZSwgb2JqKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgZm9yYCBsb29wXG4gICAgZW5kRm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZvcik7XG4gICAgfVxuICAgIC8vIGBsYWJlbGAgc3RhdGVtZW50XG4gICAgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBMYWJlbChsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgYnJlYWtgIHN0YXRlbWVudFxuICAgIGJyZWFrKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQnJlYWsobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYHJldHVybmAgc3RhdGVtZW50XG4gICAgcmV0dXJuKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInJldHVyblwiIHNob3VsZCBoYXZlIG9uZSBub2RlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoUmV0dXJuKTtcbiAgICB9XG4gICAgLy8gYHRyeWAgc3RhdGVtZW50XG4gICAgdHJ5KHRyeUJvZHksIGNhdGNoQ29kZSwgZmluYWxseUNvZGUpIHtcbiAgICAgICAgaWYgKCFjYXRjaENvZGUgJiYgIWZpbmFsbHlDb2RlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInRyeVwiIHdpdGhvdXQgXCJjYXRjaFwiIGFuZCBcImZpbmFsbHlcIicpO1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyeSgpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh0cnlCb2R5KTtcbiAgICAgICAgaWYgKGNhdGNoQ29kZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5hbWUoXCJlXCIpO1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmNhdGNoID0gbmV3IENhdGNoKGVycm9yKTtcbiAgICAgICAgICAgIGNhdGNoQ29kZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsbHlDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuZmluYWxseSA9IG5ldyBGaW5hbGx5KCk7XG4gICAgICAgICAgICB0aGlzLmNvZGUoZmluYWxseUNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoQ2F0Y2gsIEZpbmFsbHkpO1xuICAgIH1cbiAgICAvLyBgdGhyb3dgIHN0YXRlbWVudFxuICAgIHRocm93KGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgVGhyb3coZXJyb3IpKTtcbiAgICB9XG4gICAgLy8gc3RhcnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBibG9jayhib2R5LCBub2RlQ291bnQpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpO1xuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShib2R5KS5lbmRCbG9jayhub2RlQ291bnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIHRoZSBjdXJyZW50IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgZW5kQmxvY2sobm9kZUNvdW50KSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuX2Jsb2NrU3RhcnRzLnBvcCgpO1xuICAgICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBub3QgaW4gc2VsZi1iYWxhbmNpbmcgYmxvY2tcIik7XG4gICAgICAgIGNvbnN0IHRvQ2xvc2UgPSB0aGlzLl9ub2Rlcy5sZW5ndGggLSBsZW47XG4gICAgICAgIGlmICh0b0Nsb3NlIDwgMCB8fCAobm9kZUNvdW50ICE9PSB1bmRlZmluZWQgJiYgdG9DbG9zZSAhPT0gbm9kZUNvdW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiB3cm9uZyBudW1iZXIgb2Ygbm9kZXM6ICR7dG9DbG9zZX0gdnMgJHtub2RlQ291bnR9IGV4cGVjdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm9kZXMubGVuZ3RoID0gbGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGZ1bmN0aW9uYCBoZWFkaW5nIChvciBkZWZpbml0aW9uIGlmIGZ1bmNCb2R5IGlzIHBhc3NlZClcbiAgICBmdW5jKG5hbWUsIGFyZ3MgPSBjb2RlXzEubmlsLCBhc3luYywgZnVuY0JvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBGdW5jKG5hbWUsIGFyZ3MsIGFzeW5jKSk7XG4gICAgICAgIGlmIChmdW5jQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmdW5jQm9keSkuZW5kRnVuYygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICBlbmRGdW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZ1bmMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShuID0gMSkge1xuICAgICAgICB3aGlsZSAobi0tID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTmFtZXModGhpcy5fcm9vdC5uYW1lcywgdGhpcy5fY29uc3RhbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbGVhZk5vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX2Jsb2NrTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIF9lbmRCbG9ja05vZGUoTjEsIE4yKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBOMSB8fCAoTjIgJiYgbiBpbnN0YW5jZW9mIE4yKSkge1xuICAgICAgICAgICAgdGhpcy5fbm9kZXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5vdCBpbiBibG9jayBcIiR7TjIgPyBgJHtOMS5raW5kfS8ke04yLmtpbmR9YCA6IE4xLmtpbmR9XCJgKTtcbiAgICB9XG4gICAgX2Vsc2VOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAoIShuIGluc3RhbmNlb2YgSWYpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIHdpdGhvdXQgXCJpZlwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBuLmVsc2UgPSBub2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IF9yb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbMF07XG4gICAgfVxuICAgIGdldCBfY3Vyck5vZGUoKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIHJldHVybiBuc1tucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgc2V0IF9jdXJyTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIG5zW25zLmxlbmd0aCAtIDFdID0gbm9kZTtcbiAgICB9XG59XG5leHBvcnRzLkNvZGVHZW4gPSBDb2RlR2VuO1xuZnVuY3Rpb24gYWRkTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgKyAoZnJvbVtuXSB8fCAwKTtcbiAgICByZXR1cm4gbmFtZXM7XG59XG5mdW5jdGlvbiBhZGRFeHByTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICByZXR1cm4gZnJvbSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IGFkZE5hbWVzKG5hbWVzLCBmcm9tLm5hbWVzKSA6IG5hbWVzO1xufVxuZnVuY3Rpb24gb3B0aW1pemVFeHByKGV4cHIsIG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICBpZiAoZXhwciBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICByZXR1cm4gcmVwbGFjZU5hbWUoZXhwcik7XG4gICAgaWYgKCFjYW5PcHRpbWl6ZShleHByKSlcbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoZXhwci5faXRlbXMucmVkdWNlKChpdGVtcywgYykgPT4ge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICAgICAgYyA9IHJlcGxhY2VOYW1lKGMpO1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSlcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uYy5faXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10pKTtcbiAgICBmdW5jdGlvbiByZXBsYWNlTmFtZShuKSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdGFudHNbbi5zdHJdO1xuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzW24uc3RyXSAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWxldGUgbmFtZXNbbi5zdHJdO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoZSkge1xuICAgICAgICByZXR1cm4gKGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUgJiZcbiAgICAgICAgICAgIGUuX2l0ZW1zLnNvbWUoKGMpID0+IGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiBuYW1lc1tjLnN0cl0gPT09IDEgJiYgY29uc3RhbnRzW2Muc3RyXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VidHJhY3ROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSAtIChmcm9tW25dIHx8IDApO1xufVxuZnVuY3Rpb24gbm90KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB4ID09PSBudWxsID8gIXggOiAoMCwgY29kZV8xLl8pIGAhJHtwYXIoeCl9YDtcbn1cbmV4cG9ydHMubm90ID0gbm90O1xuY29uc3QgYW5kQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuQU5EKTtcbi8vIGJvb2xlYW4gQU5EICgmJikgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBhbmQoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShhbmRDb2RlKTtcbn1cbmV4cG9ydHMuYW5kID0gYW5kO1xuY29uc3Qgb3JDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5PUik7XG4vLyBib29sZWFuIE9SICh8fCkgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBvciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKG9yQ29kZSk7XG59XG5leHBvcnRzLm9yID0gb3I7XG5mdW5jdGlvbiBtYXBwZW5kKG9wKSB7XG4gICAgcmV0dXJuICh4LCB5KSA9PiAoeCA9PT0gY29kZV8xLm5pbCA/IHkgOiB5ID09PSBjb2RlXzEubmlsID8geCA6ICgwLCBjb2RlXzEuXykgYCR7cGFyKHgpfSAke29wfSAke3Bhcih5KX1gKTtcbn1cbmZ1bmN0aW9uIHBhcih4KSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHggOiAoMCwgY29kZV8xLl8pIGAoJHt4fSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGV4cG9ydHMuZ2V0RXJyb3JQYXRoID0gZXhwb3J0cy5UeXBlID0gZXhwb3J0cy51c2VGdW5jID0gZXhwb3J0cy5zZXRFdmFsdWF0ZWQgPSBleHBvcnRzLmV2YWx1YXRlZFByb3BzVG9OYW1lID0gZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IGV4cG9ydHMuZWFjaEl0ZW0gPSBleHBvcnRzLnVuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUpzb25Qb2ludGVyID0gZXhwb3J0cy5lc2NhcGVGcmFnbWVudCA9IGV4cG9ydHMudW5lc2NhcGVGcmFnbWVudCA9IGV4cG9ydHMuc2NoZW1hUmVmT3JWYWwgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlcyA9IGV4cG9ydHMuY2hlY2tVbmtub3duUnVsZXMgPSBleHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gZXhwb3J0cy50b0hhc2ggPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZWdlbi9jb2RlXCIpO1xuLy8gVE9ETyByZWZhY3RvciB0byB1c2UgU2V0XG5mdW5jdGlvbiB0b0hhc2goYXJyKSB7XG4gICAgY29uc3QgaGFzaCA9IHt9O1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpXG4gICAgICAgIGhhc2hbaXRlbV0gPSB0cnVlO1xuICAgIHJldHVybiBoYXNoO1xufVxuZXhwb3J0cy50b0hhc2ggPSB0b0hhc2g7XG5mdW5jdGlvbiBhbHdheXNWYWxpZFNjaGVtYShpdCwgc2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYSkubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hKTtcbiAgICByZXR1cm4gIXNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgaXQuc2VsZi5SVUxFUy5hbGwpO1xufVxuZXhwb3J0cy5hbHdheXNWYWxpZFNjaGVtYSA9IGFsd2F5c1ZhbGlkU2NoZW1hO1xuZnVuY3Rpb24gY2hlY2tVbmtub3duUnVsZXMoaXQsIHNjaGVtYSA9IGl0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgaWYgKCFvcHRzLnN0cmljdFNjaGVtYSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHJ1bGVzID0gc2VsZi5SVUxFUy5rZXl3b3JkcztcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKCFydWxlc1trZXldKVxuICAgICAgICAgICAgY2hlY2tTdHJpY3RNb2RlKGl0LCBgdW5rbm93biBrZXl3b3JkOiBcIiR7a2V5fVwiYCk7XG4gICAgfVxufVxuZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGNoZWNrVW5rbm93blJ1bGVzO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChydWxlc1trZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlcyA9IHNjaGVtYUhhc1J1bGVzO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNCdXRSZWYoc2NoZW1hLCBSVUxFUykge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChrZXkgIT09IFwiJHJlZlwiICYmIFJVTEVTLmFsbFtrZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0J1dFJlZiA9IHNjaGVtYUhhc1J1bGVzQnV0UmVmO1xuZnVuY3Rpb24gc2NoZW1hUmVmT3JWYWwoeyB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGggfSwgc2NoZW1hLCBrZXl3b3JkLCAkZGF0YSkge1xuICAgIGlmICghJGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYX1gO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9YDtcbn1cbmV4cG9ydHMuc2NoZW1hUmVmT3JWYWwgPSBzY2hlbWFSZWZPclZhbDtcbmZ1bmN0aW9uIHVuZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIHVuZXNjYXBlSnNvblBvaW50ZXIoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpO1xufVxuZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gdW5lc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUZyYWdtZW50KHN0cikge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZXNjYXBlSnNvblBvaW50ZXIoc3RyKSk7XG59XG5leHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXNjYXBlRnJhZ21lbnQ7XG5mdW5jdGlvbiBlc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciA9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gYCR7c3RyfWA7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csIFwifjBcIikucmVwbGFjZSgvXFwvL2csIFwifjFcIik7XG59XG5leHBvcnRzLmVzY2FwZUpzb25Qb2ludGVyID0gZXNjYXBlSnNvblBvaW50ZXI7XG5mdW5jdGlvbiB1bmVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgXCIvXCIpLnJlcGxhY2UoL34wL2csIFwiflwiKTtcbn1cbmV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IHVuZXNjYXBlSnNvblBvaW50ZXI7XG5mdW5jdGlvbiBlYWNoSXRlbSh4cywgZikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHhzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgeHMpXG4gICAgICAgICAgICBmKHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZih4cyk7XG4gICAgfVxufVxuZXhwb3J0cy5lYWNoSXRlbSA9IGVhY2hJdGVtO1xuZnVuY3Rpb24gbWFrZU1lcmdlRXZhbHVhdGVkKHsgbWVyZ2VOYW1lcywgbWVyZ2VUb05hbWUsIG1lcmdlVmFsdWVzLCByZXN1bHRUb05hbWUsIH0pIHtcbiAgICByZXR1cm4gKGdlbiwgZnJvbSwgdG8sIHRvTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSB0byA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGZyb21cbiAgICAgICAgICAgIDogdG8gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgID8gKGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IG1lcmdlTmFtZXMoZ2VuLCBmcm9tLCB0bykgOiBtZXJnZVRvTmFtZShnZW4sIGZyb20sIHRvKSwgdG8pXG4gICAgICAgICAgICAgICAgOiBmcm9tIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyAobWVyZ2VUb05hbWUoZ2VuLCB0bywgZnJvbSksIGZyb20pXG4gICAgICAgICAgICAgICAgICAgIDogbWVyZ2VWYWx1ZXMoZnJvbSwgdG8pO1xuICAgICAgICByZXR1cm4gdG9OYW1lID09PSBjb2RlZ2VuXzEuTmFtZSAmJiAhKHJlcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSA/IHJlc3VsdFRvTmFtZShnZW4sIHJlcykgOiByZXM7XG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VFdmFsdWF0ZWQgPSB7XG4gICAgcHJvcHM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZnJvbX0gPT09IHRydWVgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCB0cnVlKSwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gfHwge31gKS5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5hc3NpZ24oJHt0b30sICR7ZnJvbX0pYCkpO1xuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VUb05hbWU6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWVgLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZnJvbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odG8sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gfHwge31gKTtcbiAgICAgICAgICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCB0bywgZnJvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVZhbHVlczogKGZyb20sIHRvKSA9PiAoZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiB7IC4uLmZyb20sIC4uLnRvIH0pLFxuICAgICAgICByZXN1bHRUb05hbWU6IGV2YWx1YXRlZFByb3BzVG9OYW1lLFxuICAgIH0pLFxuICAgIGl0ZW1zOiBtYWtlTWVyZ2VFdmFsdWF0ZWQoe1xuICAgICAgICBtZXJnZU5hbWVzOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlICYmICR7ZnJvbX0gIT09IHVuZGVmaW5lZGAsICgpID0+IGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnJvbX0gPT09IHRydWUgPyB0cnVlIDogJHt0b30gPiAke2Zyb219ID8gJHt0b30gOiAke2Zyb219YCkpLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIGZyb20gPT09IHRydWUgPyB0cnVlIDogKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gPiAke2Zyb219ID8gJHt0b30gOiAke2Zyb219YCkpLFxuICAgICAgICBtZXJnZVZhbHVlczogKGZyb20sIHRvKSA9PiAoZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiBNYXRoLm1heChmcm9tLCB0bykpLFxuICAgICAgICByZXN1bHRUb05hbWU6IChnZW4sIGl0ZW1zKSA9PiBnZW4udmFyKFwiaXRlbXNcIiwgaXRlbXMpLFxuICAgIH0pLFxufTtcbmZ1bmN0aW9uIGV2YWx1YXRlZFByb3BzVG9OYW1lKGdlbiwgcHMpIHtcbiAgICBpZiAocHMgPT09IHRydWUpXG4gICAgICAgIHJldHVybiBnZW4udmFyKFwicHJvcHNcIiwgdHJ1ZSk7XG4gICAgY29uc3QgcHJvcHMgPSBnZW4udmFyKFwicHJvcHNcIiwgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICBpZiAocHMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc2V0RXZhbHVhdGVkKGdlbiwgcHJvcHMsIHBzKTtcbiAgICByZXR1cm4gcHJvcHM7XG59XG5leHBvcnRzLmV2YWx1YXRlZFByb3BzVG9OYW1lID0gZXZhbHVhdGVkUHJvcHNUb05hbWU7XG5mdW5jdGlvbiBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpIHtcbiAgICBPYmplY3Qua2V5cyhwcykuZm9yRWFjaCgocCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3Byb3BzfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocCl9YCwgdHJ1ZSkpO1xufVxuZXhwb3J0cy5zZXRFdmFsdWF0ZWQgPSBzZXRFdmFsdWF0ZWQ7XG5jb25zdCBzbmlwcGV0cyA9IHt9O1xuZnVuY3Rpb24gdXNlRnVuYyhnZW4sIGYpIHtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJmdW5jXCIsIHtcbiAgICAgICAgcmVmOiBmLFxuICAgICAgICBjb2RlOiBzbmlwcGV0c1tmLmNvZGVdIHx8IChzbmlwcGV0c1tmLmNvZGVdID0gbmV3IGNvZGVfMS5fQ29kZShmLmNvZGUpKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlRnVuYyA9IHVzZUZ1bmM7XG52YXIgVHlwZTtcbihmdW5jdGlvbiAoVHlwZSkge1xuICAgIFR5cGVbVHlwZVtcIk51bVwiXSA9IDBdID0gXCJOdW1cIjtcbiAgICBUeXBlW1R5cGVbXCJTdHJcIl0gPSAxXSA9IFwiU3RyXCI7XG59KShUeXBlIHx8IChleHBvcnRzLlR5cGUgPSBUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldEVycm9yUGF0aChkYXRhUHJvcCwgZGF0YVByb3BUeXBlLCBqc1Byb3BlcnR5U3ludGF4KSB7XG4gICAgLy8gbGV0IHBhdGhcbiAgICBpZiAoZGF0YVByb3AgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IGRhdGFQcm9wVHlwZSA9PT0gVHlwZS5OdW07XG4gICAgICAgIHJldHVybiBqc1Byb3BlcnR5U3ludGF4XG4gICAgICAgICAgICA/IGlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBcIltcIiArICR7ZGF0YVByb3B9ICsgXCJdXCJgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIlsnXCIgKyAke2RhdGFQcm9wfSArIFwiJ11cImBcbiAgICAgICAgICAgIDogaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH1gXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIi9cIiArICR7ZGF0YVByb3B9LnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXFxcLy9nLCBcIn4xXCIpYDsgLy8gVE9ETyBtYXliZSB1c2UgZ2xvYmFsIGVzY2FwZVBvaW50ZXJcbiAgICB9XG4gICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXggPyAoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCkudG9TdHJpbmcoKSA6IFwiL1wiICsgZXNjYXBlSnNvblBvaW50ZXIoZGF0YVByb3ApO1xufVxuZXhwb3J0cy5nZXRFcnJvclBhdGggPSBnZXRFcnJvclBhdGg7XG5mdW5jdGlvbiBjaGVja1N0cmljdE1vZGUoaXQsIG1zZywgbW9kZSA9IGl0Lm9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgaWYgKCFtb2RlKVxuICAgICAgICByZXR1cm47XG4gICAgbXNnID0gYHN0cmljdCBtb2RlOiAke21zZ31gO1xuICAgIGlmIChtb2RlID09PSB0cnVlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICBpdC5zZWxmLmxvZ2dlci53YXJuKG1zZyk7XG59XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGNoZWNrU3RyaWN0TW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXMgPSB7XG4gICAgLy8gdmFsaWRhdGlvbiBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICBkYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkYXRhXCIpLCAvLyBkYXRhIHBhc3NlZCB0byB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gICAgLy8gYXJncyBwYXNzZWQgZnJvbSByZWZlcmVuY2luZyBzY2hlbWFcbiAgICB2YWxDeHQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZhbEN4dFwiKSwgLy8gdmFsaWRhdGlvbi9kYXRhIGNvbnRleHQgLSBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHksIGl0IGlzIGRlc3RydWN0dXJlZCB0byB0aGUgbmFtZXMgYmVsb3dcbiAgICBpbnN0YW5jZVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImluc3RhbmNlUGF0aFwiKSxcbiAgICBwYXJlbnREYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnREYXRhXCIpLFxuICAgIHBhcmVudERhdGFQcm9wZXJ0eTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVByb3BlcnR5XCIpLFxuICAgIHJvb3REYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJyb290RGF0YVwiKSwgLy8gcm9vdCBkYXRhIC0gc2FtZSBhcyB0aGUgZGF0YSBwYXNzZWQgdG8gdGhlIGZpcnN0L3RvcCB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gICAgZHluYW1pY0FuY2hvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImR5bmFtaWNBbmNob3JzXCIpLCAvLyB1c2VkIHRvIHN1cHBvcnQgcmVjdXJzaXZlUmVmIGFuZCBkeW5hbWljUmVmXG4gICAgLy8gZnVuY3Rpb24gc2NvcGVkIHZhcmlhYmxlc1xuICAgIHZFcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZFcnJvcnNcIiksIC8vIG51bGwgb3IgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICBlcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImVycm9yc1wiKSwgLy8gY291bnRlciBvZiB2YWxpZGF0aW9uIGVycm9yc1xuICAgIHRoaXM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInRoaXNcIiksXG4gICAgLy8gXCJnbG9iYWxzXCJcbiAgICBzZWxmOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzZWxmXCIpLFxuICAgIHNjb3BlOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY29wZVwiKSxcbiAgICAvLyBKVEQgc2VyaWFsaXplL3BhcnNlIG5hbWUgZm9yIEpTT04gc3RyaW5nIGFuZCBwb3NpdGlvblxuICAgIGpzb246IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25cIiksXG4gICAganNvblBvczogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBvc1wiKSxcbiAgICBqc29uTGVuOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uTGVuXCIpLFxuICAgIGpzb25QYXJ0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uUGFydFwiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBuYW1lcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hbWVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSBleHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSBleHBvcnRzLnJlcG9ydEVycm9yID0gZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5leHBvcnRzLmtleXdvcmRFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBwYXNzIFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgdmFsaWRhdGlvbmAsXG59O1xuZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFUeXBlIH0pID0+IHNjaGVtYVR5cGVcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgbXVzdCBiZSAke3NjaGVtYVR5cGV9ICgkZGF0YSlgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0RXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzLCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgaWYgKG92ZXJyaWRlQWxsRXJyb3JzICE9PSBudWxsICYmIG92ZXJyaWRlQWxsRXJyb3JzICE9PSB2b2lkIDAgPyBvdmVycmlkZUFsbEVycm9ycyA6IChjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJPYmp9XWApO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXJyb3IgPSByZXBvcnRFcnJvcjtcbmZ1bmN0aW9uIHJlcG9ydEV4dHJhRXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgaWYgKCEoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IHJlcG9ydEV4dHJhRXJyb3I7XG5mdW5jdGlvbiByZXNldEVycm9yc0NvdW50KGdlbiwgZXJyc0NvdW50KSB7XG4gICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCBlcnJzQ291bnQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsICgpID0+IGdlbi5pZihlcnJzQ291bnQsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCwgZXJyc0NvdW50KSwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCkpKTtcbn1cbmV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IHJlc2V0RXJyb3JzQ291bnQ7XG5mdW5jdGlvbiBleHRlbmRFcnJvcnMoeyBnZW4sIGtleXdvcmQsIHNjaGVtYVZhbHVlLCBkYXRhLCBlcnJzQ291bnQsIGl0LCB9KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgZXJyID0gZ2VuLm5hbWUoXCJlcnJcIik7XG4gICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBlcnJzQ291bnQsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIChpKSA9PiB7XG4gICAgICAgIGdlbi5jb25zdChlcnIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9WyR7aX1dYCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaXQuZXJyb3JQYXRoKSkpO1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHIpIGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hYCwgc2NoZW1hVmFsdWUpO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uZGF0YWAsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4dGVuZEVycm9ycztcbmZ1bmN0aW9uIGFkZEVycm9yKGdlbiwgZXJyT2JqKSB7XG4gICAgY29uc3QgZXJyID0gZ2VuLmNvbnN0KFwiZXJyXCIsIGVyck9iaik7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsYCwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyfV1gKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ucHVzaCgke2Vycn0pYCk7XG4gICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSsrYCk7XG59XG5mdW5jdGlvbiByZXR1cm5FcnJvcnMoaXQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWFFbnYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KCR7ZXJyc30pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBlcnJzKTtcbiAgICAgICAgZ2VuLnJldHVybihmYWxzZSk7XG4gICAgfVxufVxuY29uc3QgRSA9IHtcbiAgICBrZXl3b3JkOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJrZXl3b3JkXCIpLFxuICAgIHNjaGVtYVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVBhdGhcIiksIC8vIGFsc28gdXNlZCBpbiBKVEQgZXJyb3JzXG4gICAgcGFyYW1zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJhbXNcIiksXG4gICAgcHJvcGVydHlOYW1lOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwcm9wZXJ0eU5hbWVcIiksXG4gICAgbWVzc2FnZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwibWVzc2FnZVwiKSxcbiAgICBzY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVwiKSxcbiAgICBwYXJlbnRTY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudFNjaGVtYVwiKSxcbn07XG5mdW5jdGlvbiBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgY3JlYXRlRXJyb3JzIH0gPSBjeHQuaXQ7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7fWA7XG4gICAgcmV0dXJuIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xufVxuZnVuY3Rpb24gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyA9IHt9KSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW1xuICAgICAgICBlcnJvckluc3RhbmNlUGF0aChpdCwgZXJyb3JQYXRocyksXG4gICAgICAgIGVycm9yU2NoZW1hUGF0aChjeHQsIGVycm9yUGF0aHMpLFxuICAgIF07XG4gICAgZXh0cmFFcnJvclByb3BzKGN4dCwgZXJyb3IsIGtleVZhbHVlcyk7XG4gICAgcmV0dXJuIGdlbi5vYmplY3QoLi4ua2V5VmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGVycm9ySW5zdGFuY2VQYXRoKHsgZXJyb3JQYXRoIH0sIHsgaW5zdGFuY2VQYXRoIH0pIHtcbiAgICBjb25zdCBpbnN0UGF0aCA9IGluc3RhbmNlUGF0aFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoaW5zdGFuY2VQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWBcbiAgICAgICAgOiBlcnJvclBhdGg7XG4gICAgcmV0dXJuIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaW5zdFBhdGgpXTtcbn1cbmZ1bmN0aW9uIGVycm9yU2NoZW1hUGF0aCh7IGtleXdvcmQsIGl0OiB7IGVyclNjaGVtYVBhdGggfSB9LCB7IHNjaGVtYVBhdGgsIHBhcmVudFNjaGVtYSB9KSB7XG4gICAgbGV0IHNjaFBhdGggPSBwYXJlbnRTY2hlbWEgPyBlcnJTY2hlbWFQYXRoIDogKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gO1xuICAgIGlmIChzY2hlbWFQYXRoKSB7XG4gICAgICAgIHNjaFBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7c2NoUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShzY2hlbWFQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWA7XG4gICAgfVxuICAgIHJldHVybiBbRS5zY2hlbWFQYXRoLCBzY2hQYXRoXTtcbn1cbmZ1bmN0aW9uIGV4dHJhRXJyb3JQcm9wcyhjeHQsIHsgcGFyYW1zLCBtZXNzYWdlIH0sIGtleVZhbHVlcykge1xuICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hVmFsdWUsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBvcHRzLCBwcm9wZXJ0eU5hbWUsIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAga2V5VmFsdWVzLnB1c2goW0Uua2V5d29yZCwga2V5d29yZF0sIFtFLnBhcmFtcywgdHlwZW9mIHBhcmFtcyA9PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoY3h0KSA6IHBhcmFtcyB8fCAoMCwgY29kZWdlbl8xLl8pIGB7fWBdKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlcykge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5tZXNzYWdlLCB0eXBlb2YgbWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgPyBtZXNzYWdlKGN4dCkgOiBtZXNzYWdlXSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnZlcmJvc2UpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0Uuc2NoZW1hLCBzY2hlbWFWYWx1ZV0sIFtFLnBhcmVudFNjaGVtYSwgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWBdLCBbbmFtZXNfMS5kZWZhdWx0LmRhdGEsIGRhdGFdKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5TmFtZSlcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBleHBvcnRzLnRvcEJvb2xPckVtcHR5U2NoZW1hID0gdm9pZCAwO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgYm9vbEVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcIixcbn07XG5mdW5jdGlvbiB0b3BCb29sT3JFbXB0eVNjaGVtYShpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG51bGwpO1xuICAgICAgICBnZW4ucmV0dXJuKHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB0b3BCb29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGJvb2xPckVtcHR5U2NoZW1hKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIGZhbHNlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICB9XG59XG5leHBvcnRzLmJvb2xPckVtcHR5U2NoZW1hID0gYm9vbE9yRW1wdHlTY2hlbWE7XG5mdW5jdGlvbiBmYWxzZVNjaGVtYUVycm9yKGl0LCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhIH0gPSBpdDtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgb3RoZXIgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciBub24ta2V5d29yZCB2YWxpZGF0aW9uIGVycm9ycy4uLlxuICAgIGNvbnN0IGN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcImZhbHNlIHNjaGVtYVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IGZhbHNlLFxuICAgICAgICBzY2hlbWFDb2RlOiBmYWxzZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IGZhbHNlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCBib29sRXJyb3IsIHVuZGVmaW5lZCwgb3ZlcnJpZGVBbGxFcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbFNjaGVtYS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UnVsZXMgPSBleHBvcnRzLmlzSlNPTlR5cGUgPSB2b2lkIDA7XG5jb25zdCBfanNvblR5cGVzID0gW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImJvb2xlYW5cIiwgXCJudWxsXCIsIFwib2JqZWN0XCIsIFwiYXJyYXlcIl07XG5jb25zdCBqc29uVHlwZXMgPSBuZXcgU2V0KF9qc29uVHlwZXMpO1xuZnVuY3Rpb24gaXNKU09OVHlwZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwic3RyaW5nXCIgJiYganNvblR5cGVzLmhhcyh4KTtcbn1cbmV4cG9ydHMuaXNKU09OVHlwZSA9IGlzSlNPTlR5cGU7XG5mdW5jdGlvbiBnZXRSdWxlcygpIHtcbiAgICBjb25zdCBncm91cHMgPSB7XG4gICAgICAgIG51bWJlcjogeyB0eXBlOiBcIm51bWJlclwiLCBydWxlczogW10gfSxcbiAgICAgICAgc3RyaW5nOiB7IHR5cGU6IFwic3RyaW5nXCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBhcnJheTogeyB0eXBlOiBcImFycmF5XCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBvYmplY3Q6IHsgdHlwZTogXCJvYmplY3RcIiwgcnVsZXM6IFtdIH0sXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlczogeyAuLi5ncm91cHMsIGludGVnZXI6IHRydWUsIGJvb2xlYW46IHRydWUsIG51bGw6IHRydWUgfSxcbiAgICAgICAgcnVsZXM6IFt7IHJ1bGVzOiBbXSB9LCBncm91cHMubnVtYmVyLCBncm91cHMuc3RyaW5nLCBncm91cHMuYXJyYXksIGdyb3Vwcy5vYmplY3RdLFxuICAgICAgICBwb3N0OiB7IHJ1bGVzOiBbXSB9LFxuICAgICAgICBhbGw6IHt9LFxuICAgICAgICBrZXl3b3Jkczoge30sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0UnVsZXMgPSBnZXRSdWxlcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJ1bGVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gdm9pZCAwO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNGb3JUeXBlKHsgc2NoZW1hLCBzZWxmIH0sIHR5cGUpIHtcbiAgICBjb25zdCBncm91cCA9IHNlbGYuUlVMRVMudHlwZXNbdHlwZV07XG4gICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwICE9PSB0cnVlICYmIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSBzY2hlbWFIYXNSdWxlc0ZvclR5cGU7XG5mdW5jdGlvbiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKSB7XG4gICAgcmV0dXJuIGdyb3VwLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZUdyb3VwID0gc2hvdWxkVXNlR3JvdXA7XG5mdW5jdGlvbiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKHNjaGVtYVtydWxlLmtleXdvcmRdICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKChfYSA9IHJ1bGUuZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc29tZSgoa3dkKSA9PiBzY2hlbWFba3dkXSAhPT0gdW5kZWZpbmVkKSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gc2hvdWxkVXNlUnVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGxpY2FiaWxpdHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBleHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmdldEpTT05UeXBlcyA9IGV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBleHBvcnRzLkRhdGFUeXBlID0gdm9pZCAwO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuLi9ydWxlc1wiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xudmFyIERhdGFUeXBlO1xuKGZ1bmN0aW9uIChEYXRhVHlwZSkge1xuICAgIERhdGFUeXBlW0RhdGFUeXBlW1wiQ29ycmVjdFwiXSA9IDBdID0gXCJDb3JyZWN0XCI7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJXcm9uZ1wiXSA9IDFdID0gXCJXcm9uZ1wiO1xufSkoRGF0YVR5cGUgfHwgKGV4cG9ydHMuRGF0YVR5cGUgPSBEYXRhVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBnZXRTY2hlbWFUeXBlcyhzY2hlbWEpIHtcbiAgICBjb25zdCB0eXBlcyA9IGdldEpTT05UeXBlcyhzY2hlbWEudHlwZSk7XG4gICAgY29uc3QgaGFzTnVsbCA9IHR5cGVzLmluY2x1ZGVzKFwibnVsbFwiKTtcbiAgICBpZiAoaGFzTnVsbCkge1xuICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSBmYWxzZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInR5cGU6IG51bGwgY29udHJhZGljdHMgbnVsbGFibGU6IGZhbHNlXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0eXBlcy5sZW5ndGggJiYgc2NoZW1hLm51bGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJudWxsYWJsZVwiIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgXCJ0eXBlXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSB0cnVlKVxuICAgICAgICAgICAgdHlwZXMucHVzaChcIm51bGxcIik7XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbn1cbmV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBnZXRTY2hlbWFUeXBlcztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG5mdW5jdGlvbiBnZXRKU09OVHlwZXModHMpIHtcbiAgICBjb25zdCB0eXBlcyA9IEFycmF5LmlzQXJyYXkodHMpID8gdHMgOiB0cyA/IFt0c10gOiBbXTtcbiAgICBpZiAodHlwZXMuZXZlcnkocnVsZXNfMS5pc0pTT05UeXBlKSlcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIHRocm93IG5ldyBFcnJvcihcInR5cGUgbXVzdCBiZSBKU09OVHlwZSBvciBKU09OVHlwZVtdOiBcIiArIHR5cGVzLmpvaW4oXCIsXCIpKTtcbn1cbmV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZ2V0SlNPTlR5cGVzO1xuZnVuY3Rpb24gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZShpdCwgdHlwZXMpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgY29lcmNlVG8gPSBjb2VyY2VUb1R5cGVzKHR5cGVzLCBvcHRzLmNvZXJjZVR5cGVzKTtcbiAgICBjb25zdCBjaGVja1R5cGVzID0gdHlwZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAhKGNvZXJjZVRvLmxlbmd0aCA9PT0gMCAmJiB0eXBlcy5sZW5ndGggPT09IDEgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zY2hlbWFIYXNSdWxlc0ZvclR5cGUpKGl0LCB0eXBlc1swXSkpO1xuICAgIGlmIChjaGVja1R5cGVzKSB7XG4gICAgICAgIGNvbnN0IHdyb25nVHlwZSA9IGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMsIERhdGFUeXBlLldyb25nKTtcbiAgICAgICAgZ2VuLmlmKHdyb25nVHlwZSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZXJjZVRvLmxlbmd0aClcbiAgICAgICAgICAgICAgICBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJlcG9ydFR5cGVFcnJvcihpdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tUeXBlcztcbn1cbmV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGNvZXJjZUFuZENoZWNrRGF0YVR5cGU7XG5jb25zdCBDT0VSQ0lCTEUgPSBuZXcgU2V0KFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiXSk7XG5mdW5jdGlvbiBjb2VyY2VUb1R5cGVzKHR5cGVzLCBjb2VyY2VUeXBlcykge1xuICAgIHJldHVybiBjb2VyY2VUeXBlc1xuICAgICAgICA/IHR5cGVzLmZpbHRlcigodCkgPT4gQ09FUkNJQkxFLmhhcyh0KSB8fCAoY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIiAmJiB0ID09PSBcImFycmF5XCIpKVxuICAgICAgICA6IFtdO1xufVxuZnVuY3Rpb24gY29lcmNlRGF0YShpdCwgdHlwZXMsIGNvZXJjZVRvKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IGRhdGFUeXBlID0gZ2VuLmxldChcImRhdGFUeXBlXCIsICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9YCk7XG4gICAgY29uc3QgY29lcmNlZCA9IGdlbi5sZXQoXCJjb2VyY2VkXCIsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgIGlmIChvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoJHtkYXRhfSkgJiYgJHtkYXRhfS5sZW5ndGggPT0gMWAsICgpID0+IGdlblxuICAgICAgICAgICAgLmFzc2lnbihkYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9WzBdYClcbiAgICAgICAgICAgIC5hc3NpZ24oZGF0YVR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9YClcbiAgICAgICAgICAgIC5pZihjaGVja0RhdGFUeXBlcyh0eXBlcywgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzKSwgKCkgPT4gZ2VuLmFzc2lnbihjb2VyY2VkLCBkYXRhKSkpO1xuICAgIH1cbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb2VyY2VkfSAhPT0gdW5kZWZpbmVkYCk7XG4gICAgZm9yIChjb25zdCB0IG9mIGNvZXJjZVRvKSB7XG4gICAgICAgIGlmIChDT0VSQ0lCTEUuaGFzKHQpIHx8ICh0ID09PSBcImFycmF5XCIgJiYgb3B0cy5jb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiKSkge1xuICAgICAgICAgICAgY29lcmNlU3BlY2lmaWNUeXBlKHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdlbi5lbHNlKCk7XG4gICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICBnZW4uZW5kSWYoKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb2VyY2VkfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4ge1xuICAgICAgICBnZW4uYXNzaWduKGRhdGEsIGNvZXJjZWQpO1xuICAgICAgICBhc3NpZ25QYXJlbnREYXRhKGl0LCBjb2VyY2VkKTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBjb2VyY2VTcGVjaWZpY1R5cGUodCkge1xuICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSBcIm51bWJlclwiIHx8ICR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiICsgJHtkYXRhfWApXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcImApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PSBcInN0cmluZ1wiICYmICR7ZGF0YX0gJiYgJHtkYXRhfSA9PSArJHtkYXRhfSlgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYCske2RhdGF9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbFxuICAgICAgICAgICAgICB8fCAoJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9ICYmICEoJHtkYXRhfSAlIDEpKWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiZmFsc2VcIiB8fCAke2RhdGF9ID09PSAwIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwidHJ1ZVwiIHx8ICR7ZGF0YX0gPT09IDFgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcIlwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gZmFsc2VgKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGNvZXJjZWQsIG51bGwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcInN0cmluZ1wiIHx8ICR7ZGF0YVR5cGV9ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgIHx8ICR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBbJHtkYXRhfV1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2lnblBhcmVudERhdGEoeyBnZW4sIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSB9LCBleHByKSB7XG4gICAgLy8gVE9ETyB1c2UgZ2VuLnByb3BlcnR5XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7cGFyZW50RGF0YX0gIT09IHVuZGVmaW5lZGAsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfVske3BhcmVudERhdGFQcm9wZXJ0eX1dYCwgZXhwcikpO1xufVxuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZShkYXRhVHlwZSwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCA9IERhdGFUeXBlLkNvcnJlY3QpIHtcbiAgICBjb25zdCBFUSA9IGNvcnJlY3QgPT09IERhdGFUeXBlLkNvcnJlY3QgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkVRIDogY29kZWdlbl8xLm9wZXJhdG9ycy5ORVE7XG4gICAgbGV0IGNvbmQ7XG4gICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJHtFUX0gbnVsbGA7XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYEFycmF5LmlzQXJyYXkoJHtkYXRhfSlgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICYmIHR5cGVvZiAke2RhdGF9ID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoJHtkYXRhfSlgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICBjb25kID0gbnVtQ29uZCgoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZGF0YX0gJSAxKSAmJiAhaXNOYU4oJHtkYXRhfSlgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjb25kID0gbnVtQ29uZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gJHtFUX0gJHtkYXRhVHlwZX1gO1xuICAgIH1cbiAgICByZXR1cm4gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvbmQgOiAoMCwgY29kZWdlbl8xLm5vdCkoY29uZCk7XG4gICAgZnVuY3Rpb24gbnVtQ29uZChfY29uZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuYW5kKSgoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSA9PSBcIm51bWJlclwiYCwgX2NvbmQsIHN0cmljdE51bXMgPyAoMCwgY29kZWdlbl8xLl8pIGBpc0Zpbml0ZSgke2RhdGF9KWAgOiBjb2RlZ2VuXzEubmlsKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBjaGVja0RhdGFUeXBlO1xuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZXMoZGF0YVR5cGVzLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSB7XG4gICAgaWYgKGRhdGFUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGVzWzBdLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KTtcbiAgICB9XG4gICAgbGV0IGNvbmQ7XG4gICAgY29uc3QgdHlwZXMgPSAoMCwgdXRpbF8xLnRvSGFzaCkoZGF0YVR5cGVzKTtcbiAgICBpZiAodHlwZXMuYXJyYXkgJiYgdHlwZXMub2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IG5vdE9iaiA9ICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ICE9IFwib2JqZWN0XCJgO1xuICAgICAgICBjb25kID0gdHlwZXMubnVsbCA/IG5vdE9iaiA6ICgwLCBjb2RlZ2VuXzEuXykgYCEke2RhdGF9IHx8ICR7bm90T2JqfWA7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5udWxsO1xuICAgICAgICBkZWxldGUgdHlwZXMuYXJyYXk7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5vYmplY3Q7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25kID0gY29kZWdlbl8xLm5pbDtcbiAgICB9XG4gICAgaWYgKHR5cGVzLm51bWJlcilcbiAgICAgICAgZGVsZXRlIHR5cGVzLmludGVnZXI7XG4gICAgZm9yIChjb25zdCB0IGluIHR5cGVzKVxuICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5hbmQpKGNvbmQsIGNoZWNrRGF0YVR5cGUodCwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCkpO1xuICAgIHJldHVybiBjb25kO1xufVxuZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGNoZWNrRGF0YVR5cGVzO1xuY29uc3QgdHlwZUVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYSB9KSA9PiBgbXVzdCBiZSAke3NjaGVtYX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hLCBzY2hlbWFWYWx1ZSB9KSA9PiB0eXBlb2Ygc2NoZW1hID09IFwic3RyaW5nXCIgPyAoMCwgY29kZWdlbl8xLl8pIGB7dHlwZTogJHtzY2hlbWF9fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7dHlwZTogJHtzY2hlbWFWYWx1ZX19YCxcbn07XG5mdW5jdGlvbiByZXBvcnRUeXBlRXJyb3IoaXQpIHtcbiAgICBjb25zdCBjeHQgPSBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KTtcbiAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKGN4dCwgdHlwZUVycm9yKTtcbn1cbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gcmVwb3J0VHlwZUVycm9yO1xuZnVuY3Rpb24gZ2V0VHlwZUVycm9yQ29udGV4dChpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWEgfSA9IGl0O1xuICAgIGNvbnN0IHNjaGVtYUNvZGUgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgc2NoZW1hLCBcInR5cGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcInR5cGVcIixcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEudHlwZSxcbiAgICAgICAgc2NoZW1hQ29kZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IHNjaGVtYUNvZGUsXG4gICAgICAgIHBhcmVudFNjaGVtYTogc2NoZW1hLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YVR5cGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmZ1bmN0aW9uIGFzc2lnbkRlZmF1bHRzKGl0LCB0eSkge1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgaXRlbXMgfSA9IGl0LnNjaGVtYTtcbiAgICBpZiAodHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBhc3NpZ25EZWZhdWx0KGl0LCBrZXksIHByb3BlcnRpZXNba2V5XS5kZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eSA9PT0gXCJhcnJheVwiICYmIEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKHNjaCwgaSkgPT4gYXNzaWduRGVmYXVsdChpdCwgaSwgc2NoLmRlZmF1bHQpKTtcbiAgICB9XG59XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gYXNzaWduRGVmYXVsdHM7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0KGl0LCBwcm9wLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgY2hpbGREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcCl9YDtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBkZWZhdWx0IGlzIGlnbm9yZWQgZm9yOiAke2NoaWxkRGF0YX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgO1xuICAgIGlmIChvcHRzLnVzZURlZmF1bHRzID09PSBcImVtcHR5XCIpIHtcbiAgICAgICAgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kaXRpb259IHx8ICR7Y2hpbGREYXRhfSA9PT0gbnVsbCB8fCAke2NoaWxkRGF0YX0gPT09IFwiXCJgO1xuICAgIH1cbiAgICAvLyBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgICtcbiAgICAvLyAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiID8gYCB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYCA6IFwiXCIpXG4gICAgZ2VuLmlmKGNvbmRpdGlvbiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID0gJHsoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoZGVmYXVsdFZhbHVlKX1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gZXhwb3J0cy51c2VQYXR0ZXJuID0gZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBleHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuZnVuY3Rpb24gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcChjeHQsIHByb3ApIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wfWAgfSwgdHJ1ZSk7XG4gICAgICAgIGN4dC5lcnJvcigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGNoZWNrTWlzc2luZ1Byb3AoeyBnZW4sIGRhdGEsIGl0OiB7IG9wdHMgfSB9LCBwcm9wZXJ0aWVzLCBtaXNzaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BlcnRpZXMubWFwKChwcm9wKSA9PiAoMCwgY29kZWdlbl8xLmFuZCkobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgwLCBjb2RlZ2VuXzEuXykgYCR7bWlzc2luZ30gPSAke3Byb3B9YCkpKTtcbn1cbmV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGNoZWNrTWlzc2luZ1Byb3A7XG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nUHJvcChjeHQsIG1pc3NpbmcpIHtcbiAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0sIHRydWUpO1xuICAgIGN4dC5lcnJvcigpO1xufVxuZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IHJlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gaGFzUHJvcEZ1bmMoZ2VuKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgcmVmOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5YCxcbiAgICB9KTtcbn1cbmV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBoYXNQcm9wRnVuYztcbmZ1bmN0aW9uIGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BGdW5jKGdlbil9LmNhbGwoJHtkYXRhfSwgJHtwcm9wZXJ0eX0pYDtcbn1cbmV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGlzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBwcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gIT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7aXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KX1gIDogY29uZDtcbn1cbmV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBwcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ID09PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5vcikoY29uZCwgKDAsIGNvZGVnZW5fMS5ub3QpKGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkpKSA6IGNvbmQ7XG59XG5leHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBub1Byb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gc2NoZW1hTWFwID8gT2JqZWN0LmtleXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+IHAgIT09IFwiX19wcm90b19fXCIpIDogW107XG59XG5leHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBhbGxTY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gc2NoZW1hUHJvcGVydGllcyhpdCwgc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hTWFwW3BdKSk7XG59XG5leHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBzY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gY2FsbFZhbGlkYXRlQ29kZSh7IHNjaGVtYUNvZGUsIGRhdGEsIGl0OiB7IGdlbiwgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoLCBlcnJvclBhdGggfSwgaXQgfSwgZnVuYywgY29udGV4dCwgcGFzc1NjaGVtYSkge1xuICAgIGNvbnN0IGRhdGFBbmRTY2hlbWEgPSBwYXNzU2NoZW1hID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSwgJHtkYXRhfSwgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWAgOiBkYXRhO1xuICAgIGNvbnN0IHZhbEN4dCA9IFtcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBlcnJvclBhdGgpXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCBpdC5wYXJlbnREYXRhXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksIGl0LnBhcmVudERhdGFQcm9wZXJ0eV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YV0sXG4gICAgXTtcbiAgICBpZiAoaXQub3B0cy5keW5hbWljUmVmKVxuICAgICAgICB2YWxDeHQucHVzaChbbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCBuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnNdKTtcbiAgICBjb25zdCBhcmdzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhQW5kU2NoZW1hfSwgJHtnZW4ub2JqZWN0KC4uLnZhbEN4dCl9YDtcbiAgICByZXR1cm4gY29udGV4dCAhPT0gY29kZWdlbl8xLm5pbCA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30uY2FsbCgke2NvbnRleHR9LCAke2FyZ3N9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9KCR7YXJnc30pYDtcbn1cbmV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGNhbGxWYWxpZGF0ZUNvZGU7XG5jb25zdCBuZXdSZWdFeHAgPSAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYDtcbmZ1bmN0aW9uIHVzZVBhdHRlcm4oeyBnZW4sIGl0OiB7IG9wdHMgfSB9LCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgdSA9IG9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICBjb25zdCB7IHJlZ0V4cCB9ID0gb3B0cy5jb2RlO1xuICAgIGNvbnN0IHJ4ID0gcmVnRXhwKHBhdHRlcm4sIHUpO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcInBhdHRlcm5cIiwge1xuICAgICAgICBrZXk6IHJ4LnRvU3RyaW5nKCksXG4gICAgICAgIHJlZjogcngsXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwLmNvZGUgPT09IFwibmV3IFJlZ0V4cFwiID8gbmV3UmVnRXhwIDogKDAsIHV0aWxfMi51c2VGdW5jKShnZW4sIHJlZ0V4cCl9KCR7cGF0dGVybn0sICR7dX0pYCxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlUGF0dGVybiA9IHVzZVBhdHRlcm47XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQXJyID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5hc3NpZ24odmFsaWRBcnIsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiB2YWxpZEFycjtcbiAgICB9XG4gICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgcmV0dXJuIHZhbGlkO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMobm90VmFsaWQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCBub3RWYWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBcnJheSA9IHZhbGlkYXRlQXJyYXk7XG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICBjb25zdCBhbHdheXNWYWxpZCA9IHNjaGVtYS5zb21lKChzY2gpID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKTtcbiAgICBpZiAoYWx3YXlzVmFsaWQgJiYgIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICBnZW4uYmxvY2soKCkgPT4gc2NoZW1hLmZvckVhY2goKF9zY2gsIGkpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZH0gfHwgJHtzY2hWYWxpZH1gKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCBzY2hWYWxpZCk7XG4gICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXMvSXRlbXNgIG5vdCBzdXBwb3J0ZWQgKG9wdHMudW5ldmFsdWF0ZWQgIT09IHRydWUpXG4gICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIGFuZCBpdGVtcyB3ZXJlIGV2YWx1YXRlZCAoaXQucHJvcHMgPT09IHRydWUgJiYgaXQuaXRlbXMgPT09IHRydWUpXG4gICAgICAgIGlmICghbWVyZ2VkKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCkpO1xuICAgIH0pKTtcbiAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IHZhbGlkYXRlVW5pb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IGV4cG9ydHMudmFsaWRTY2hlbWFUeXBlID0gZXhwb3J0cy5mdW5jS2V5d29yZENvZGUgPSBleHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vLi4vdm9jYWJ1bGFyaWVzL2NvZGVcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5mdW5jdGlvbiBtYWNyb0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgY29uc3QgeyBnZW4sIGtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IG1hY3JvU2NoZW1hID0gZGVmLm1hY3JvLmNhbGwoaXQuc2VsZiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KTtcbiAgICBjb25zdCBzY2hlbWFSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgbWFjcm9TY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSlcbiAgICAgICAgaXQuc2VsZi52YWxpZGF0ZVNjaGVtYShtYWNyb1NjaGVtYSwgdHJ1ZSk7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICBzY2hlbWE6IG1hY3JvU2NoZW1hLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hlbWFSZWYsXG4gICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgfSwgdmFsaWQpO1xuICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xufVxuZXhwb3J0cy5tYWNyb0tleXdvcmRDb2RlID0gbWFjcm9LZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIGZ1bmNLZXl3b3JkQ29kZShjeHQsIGRlZikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsICRkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGNoZWNrQXN5bmNLZXl3b3JkKGl0LCBkZWYpO1xuICAgIGNvbnN0IHZhbGlkYXRlID0gISRkYXRhICYmIGRlZi5jb21waWxlID8gZGVmLmNvbXBpbGUuY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpIDogZGVmLnZhbGlkYXRlO1xuICAgIGNvbnN0IHZhbGlkYXRlUmVmID0gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIHZhbGlkYXRlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgdmFsaWRhdGVLZXl3b3JkKTtcbiAgICBjeHQub2soKF9hID0gZGVmLnZhbGlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWxpZCk7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkKCkge1xuICAgICAgICBpZiAoZGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGFzc2lnblZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoZGVmLm1vZGlmeWluZylcbiAgICAgICAgICAgICAgICBtb2RpZnlEYXRhKGN4dCk7XG4gICAgICAgICAgICByZXBvcnRFcnJzKCgpID0+IGN4dC5lcnJvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVFcnJzID0gZGVmLmFzeW5jID8gdmFsaWRhdGVBc3luYygpIDogdmFsaWRhdGVTeW5jKCk7XG4gICAgICAgICAgICBpZiAoZGVmLm1vZGlmeWluZylcbiAgICAgICAgICAgICAgICBtb2RpZnlEYXRhKGN4dCk7XG4gICAgICAgICAgICByZXBvcnRFcnJzKCgpID0+IGFkZEVycnMoY3h0LCBydWxlRXJycykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlQXN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFcnJzID0gZ2VuLmxldChcInJ1bGVFcnJzXCIsIG51bGwpO1xuICAgICAgICBnZW4udHJ5KCgpID0+IGFzc2lnblZhbGlkKCgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0IGApLCAoZSkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn1gLCAoKSA9PiBnZW4uYXNzaWduKHJ1bGVFcnJzLCAoMCwgY29kZWdlbl8xLl8pIGAke2V9LmVycm9yc2ApLCAoKSA9PiBnZW4udGhyb3coZSkpKTtcbiAgICAgICAgcmV0dXJuIHJ1bGVFcnJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVSZWZ9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWRhdGVFcnJzLCBudWxsKTtcbiAgICAgICAgYXNzaWduVmFsaWQoY29kZWdlbl8xLm5pbCk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzc2lnblZhbGlkKF9hd2FpdCA9IGRlZi5hc3luYyA/ICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0IGAgOiBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIGNvbnN0IHBhc3NDeHQgPSBpdC5vcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBuYW1lc18xLmRlZmF1bHQuc2VsZjtcbiAgICAgICAgY29uc3QgcGFzc1NjaGVtYSA9ICEoKFwiY29tcGlsZVwiIGluIGRlZiAmJiAhJGRhdGEpIHx8IGRlZi5zY2hlbWEgPT09IGZhbHNlKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtfYXdhaXR9JHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdmFsaWRhdGVSZWYsIHBhc3NDeHQsIHBhc3NTY2hlbWEpfWAsIGRlZi5tb2RpZnlpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBvcnRFcnJzKGVycm9ycykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoKF9hID0gZGVmLnZhbGlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWxpZCksIGVycm9ycyk7XG4gICAgfVxufVxuZXhwb3J0cy5mdW5jS2V5d29yZENvZGUgPSBmdW5jS2V5d29yZENvZGU7XG5mdW5jdGlvbiBtb2RpZnlEYXRhKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGdlbi5pZihpdC5wYXJlbnREYXRhLCAoKSA9PiBnZW4uYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQucGFyZW50RGF0YX1bJHtpdC5wYXJlbnREYXRhUHJvcGVydHl9XWApKTtcbn1cbmZ1bmN0aW9uIGFkZEVycnMoY3h0LCBlcnJzKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2VycnN9KWAsICgpID0+IHtcbiAgICAgICAgZ2VuXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKVxuICAgICAgICAgICAgLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICAgICAgKDAsIGVycm9yc18xLmV4dGVuZEVycm9ycykoY3h0KTtcbiAgICB9LCAoKSA9PiBjeHQuZXJyb3IoKSk7XG59XG5mdW5jdGlvbiBjaGVja0FzeW5jS2V5d29yZCh7IHNjaGVtYUVudiB9LCBkZWYpIHtcbiAgICBpZiAoZGVmLmFzeW5jICYmICFzY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hXCIpO1xufVxuZnVuY3Rpb24gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIHJlc3VsdCkge1xuICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiIGZhaWxlZCB0byBjb21waWxlYCk7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwia2V5d29yZFwiLCB0eXBlb2YgcmVzdWx0ID09IFwiZnVuY3Rpb25cIiA/IHsgcmVmOiByZXN1bHQgfSA6IHsgcmVmOiByZXN1bHQsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShyZXN1bHQpIH0pO1xufVxuZnVuY3Rpb24gdmFsaWRTY2hlbWFUeXBlKHNjaGVtYSwgc2NoZW1hVHlwZSwgYWxsb3dVbmRlZmluZWQgPSBmYWxzZSkge1xuICAgIC8vIFRPRE8gYWRkIHRlc3RzXG4gICAgcmV0dXJuICghc2NoZW1hVHlwZS5sZW5ndGggfHxcbiAgICAgICAgc2NoZW1hVHlwZS5zb21lKChzdCkgPT4gc3QgPT09IFwiYXJyYXlcIlxuICAgICAgICAgICAgPyBBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICAgICAgICAgIDogc3QgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgICAgIDogdHlwZW9mIHNjaGVtYSA9PSBzdCB8fCAoYWxsb3dVbmRlZmluZWQgJiYgdHlwZW9mIHNjaGVtYSA9PSBcInVuZGVmaW5lZFwiKSkpO1xufVxuZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSB2YWxpZFNjaGVtYVR5cGU7XG5mdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmRVc2FnZSh7IHNjaGVtYSwgb3B0cywgc2VsZiwgZXJyU2NoZW1hUGF0aCB9LCBkZWYsIGtleXdvcmQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWYua2V5d29yZCkgPyAhZGVmLmtleXdvcmQuaW5jbHVkZXMoa2V5d29yZCkgOiBkZWYua2V5d29yZCAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlcHMgPSBkZWYuZGVwZW5kZW5jaWVzO1xuICAgIGlmIChkZXBzID09PSBudWxsIHx8IGRlcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlcHMuc29tZSgoa3dkKSA9PiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNjaGVtYSwga3dkKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXJlbnQgc2NoZW1hIG11c3QgaGF2ZSBkZXBlbmRlbmNpZXMgb2YgJHtrZXl3b3JkfTogJHtkZXBzLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBpZiAoZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZGVmLnZhbGlkYXRlU2NoZW1hKHNjaGVtYVtrZXl3b3JkXSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiIHZhbHVlIGlzIGludmFsaWQgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cIjogYCArXG4gICAgICAgICAgICAgICAgc2VsZi5lcnJvcnNUZXh0KGRlZi52YWxpZGF0ZVNjaGVtYS5lcnJvcnMpO1xuICAgICAgICAgICAgaWYgKG9wdHMudmFsaWRhdGVTY2hlbWEgPT09IFwibG9nXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVLZXl3b3JkVXNhZ2UgPSB2YWxpZGF0ZUtleXdvcmRVc2FnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleXdvcmQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHBvcnRzLmdldFN1YnNjaGVtYSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBnZXRTdWJzY2hlbWEoaXQsIHsga2V5d29yZCwgc2NoZW1hUHJvcCwgc2NoZW1hLCBzY2hlbWFQYXRoLCBlcnJTY2hlbWFQYXRoLCB0b3BTY2hlbWFSZWYgfSkge1xuICAgIGlmIChrZXl3b3JkICE9PSB1bmRlZmluZWQgJiYgc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdib3RoIFwia2V5d29yZFwiIGFuZCBcInNjaGVtYVwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHNjaGVtYVByb3AgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2gsXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5zY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoW3NjaGVtYVByb3BdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9LyR7KDAsIHV0aWxfMS5lc2NhcGVGcmFnbWVudCkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgIH07XG4gICAgfVxuICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkIHx8IGVyclNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCB0b3BTY2hlbWFSZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInNjaGVtYVBhdGhcIiwgXCJlcnJTY2hlbWFQYXRoXCIgYW5kIFwidG9wU2NoZW1hUmVmXCIgYXJlIHJlcXVpcmVkIHdpdGggXCJzY2hlbWFcIicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBzY2hlbWFQYXRoLFxuICAgICAgICAgICAgdG9wU2NoZW1hUmVmLFxuICAgICAgICAgICAgZXJyU2NoZW1hUGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlaXRoZXIgXCJrZXl3b3JkXCIgb3IgXCJzY2hlbWFcIiBtdXN0IGJlIHBhc3NlZCcpO1xufVxuZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSBnZXRTdWJzY2hlbWE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFEYXRhKHN1YnNjaGVtYSwgaXQsIHsgZGF0YVByb3AsIGRhdGFQcm9wVHlwZTogZHBUeXBlLCBkYXRhLCBkYXRhVHlwZXMsIHByb3BlcnR5TmFtZSB9KSB7XG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImRhdGFcIiBhbmQgXCJkYXRhUHJvcFwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBjb25zdCB7IGdlbiB9ID0gaXQ7XG4gICAgaWYgKGRhdGFQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyBlcnJvclBhdGgsIGRhdGFQYXRoQXJyLCBvcHRzIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBnZW4ubGV0KFwiZGF0YVwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0LmRhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCl9YCwgdHJ1ZSk7XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBzdWJzY2hlbWEuZXJyb3JQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2Vycm9yUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShkYXRhUHJvcCwgZHBUeXBlLCBvcHRzLmpzUHJvcGVydHlTeW50YXgpfWA7XG4gICAgICAgIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHkgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFQcm9wfWA7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhUGF0aEFyciA9IFsuLi5kYXRhUGF0aEFyciwgc3Vic2NoZW1hLnBhcmVudERhdGFQcm9wZXJ0eV07XG4gICAgfVxuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBkYXRhIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBkYXRhIDogZ2VuLmxldChcImRhdGFcIiwgZGF0YSwgdHJ1ZSk7IC8vIHJlcGxhY2VhYmxlIGlmIHVzZWQgb25jZT9cbiAgICAgICAgZGF0YUNvbnRleHRQcm9wcyhuZXh0RGF0YSk7XG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHN1YnNjaGVtYS5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gICAgICAgIC8vIFRPRE8gc29tZXRoaW5nIGlzIHBvc3NpYmx5IHdyb25nIGhlcmUgd2l0aCBub3QgY2hhbmdpbmcgcGFyZW50RGF0YVByb3BlcnR5IGFuZCBub3QgYXBwZW5kaW5nIGRhdGFQYXRoQXJyXG4gICAgfVxuICAgIGlmIChkYXRhVHlwZXMpXG4gICAgICAgIHN1YnNjaGVtYS5kYXRhVHlwZXMgPSBkYXRhVHlwZXM7XG4gICAgZnVuY3Rpb24gZGF0YUNvbnRleHRQcm9wcyhfbmV4dERhdGEpIHtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGEgPSBfbmV4dERhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gW107XG4gICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YSA9IGl0LmRhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTmFtZXMgPSBbLi4uaXQuZGF0YU5hbWVzLCBfbmV4dERhdGFdO1xuICAgIH1cbn1cbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hRGF0YSA9IGV4dGVuZFN1YnNjaGVtYURhdGE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFNb2RlKHN1YnNjaGVtYSwgeyBqdGREaXNjcmltaW5hdG9yLCBqdGRNZXRhZGF0YSwgY29tcG9zaXRlUnVsZSwgY3JlYXRlRXJyb3JzLCBhbGxFcnJvcnMgfSkge1xuICAgIGlmIChjb21wb3NpdGVSdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jb21wb3NpdGVSdWxlID0gY29tcG9zaXRlUnVsZTtcbiAgICBpZiAoY3JlYXRlRXJyb3JzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jcmVhdGVFcnJvcnMgPSBjcmVhdGVFcnJvcnM7XG4gICAgaWYgKGFsbEVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuYWxsRXJyb3JzID0gYWxsRXJyb3JzO1xuICAgIHN1YnNjaGVtYS5qdGREaXNjcmltaW5hdG9yID0ganRkRGlzY3JpbWluYXRvcjsgLy8gbm90IGluaGVyaXRlZFxuICAgIHN1YnNjaGVtYS5qdGRNZXRhZGF0YSA9IGp0ZE1ldGFkYXRhOyAvLyBub3QgaW5oZXJpdGVkXG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHRlbmRTdWJzY2hlbWFNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NoZW1hLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdHJhdmVyc2UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlbWEsIG9wdHMsIGNiKSB7XG4gIC8vIExlZ2FjeSBzdXBwb3J0IGZvciB2MC4zLjEgYW5kIGVhcmxpZXIuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuXG4gIGNiID0gb3B0cy5jYiB8fCBjYjtcbiAgdmFyIHByZSA9ICh0eXBlb2YgY2IgPT0gJ2Z1bmN0aW9uJykgPyBjYiA6IGNiLnByZSB8fCBmdW5jdGlvbigpIHt9O1xuICB2YXIgcG9zdCA9IGNiLnBvc3QgfHwgZnVuY3Rpb24oKSB7fTtcblxuICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hlbWEsICcnLCBzY2hlbWEpO1xufTtcblxuXG50cmF2ZXJzZS5rZXl3b3JkcyA9IHtcbiAgYWRkaXRpb25hbEl0ZW1zOiB0cnVlLFxuICBpdGVtczogdHJ1ZSxcbiAgY29udGFpbnM6IHRydWUsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICBwcm9wZXJ0eU5hbWVzOiB0cnVlLFxuICBub3Q6IHRydWUsXG4gIGlmOiB0cnVlLFxuICB0aGVuOiB0cnVlLFxuICBlbHNlOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5hcnJheUtleXdvcmRzID0ge1xuICBpdGVtczogdHJ1ZSxcbiAgYWxsT2Y6IHRydWUsXG4gIGFueU9mOiB0cnVlLFxuICBvbmVPZjogdHJ1ZVxufTtcblxudHJhdmVyc2UucHJvcHNLZXl3b3JkcyA9IHtcbiAgJGRlZnM6IHRydWUsXG4gIGRlZmluaXRpb25zOiB0cnVlLFxuICBwcm9wZXJ0aWVzOiB0cnVlLFxuICBwYXR0ZXJuUHJvcGVydGllczogdHJ1ZSxcbiAgZGVwZW5kZW5jaWVzOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5za2lwS2V5d29yZHMgPSB7XG4gIGRlZmF1bHQ6IHRydWUsXG4gIGVudW06IHRydWUsXG4gIGNvbnN0OiB0cnVlLFxuICByZXF1aXJlZDogdHJ1ZSxcbiAgbWF4aW11bTogdHJ1ZSxcbiAgbWluaW11bTogdHJ1ZSxcbiAgZXhjbHVzaXZlTWF4aW11bTogdHJ1ZSxcbiAgZXhjbHVzaXZlTWluaW11bTogdHJ1ZSxcbiAgbXVsdGlwbGVPZjogdHJ1ZSxcbiAgbWF4TGVuZ3RoOiB0cnVlLFxuICBtaW5MZW5ndGg6IHRydWUsXG4gIHBhdHRlcm46IHRydWUsXG4gIGZvcm1hdDogdHJ1ZSxcbiAgbWF4SXRlbXM6IHRydWUsXG4gIG1pbkl0ZW1zOiB0cnVlLFxuICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgbWF4UHJvcGVydGllczogdHJ1ZSxcbiAgbWluUHJvcGVydGllczogdHJ1ZVxufTtcblxuXG5mdW5jdGlvbiBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpIHtcbiAgaWYgKHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBwcmUoc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICB2YXIgc2NoID0gc2NoZW1hW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdHJhdmVyc2UuYXJyYXlLZXl3b3Jkcykge1xuICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxzY2gubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hbaV0sIGpzb25QdHIgKyAnLycgKyBrZXkgKyAnLycgKyBpLCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHRyYXZlcnNlLnByb3BzS2V5d29yZHMpIHtcbiAgICAgICAgaWYgKHNjaCAmJiB0eXBlb2Ygc2NoID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzY2gpXG4gICAgICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hbcHJvcF0sIGpzb25QdHIgKyAnLycgKyBrZXkgKyAnLycgKyBlc2NhcGVKc29uUHRyKHByb3ApLCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSwgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHRyYXZlcnNlLmtleXdvcmRzIHx8IChvcHRzLmFsbEtleXMgJiYgIShrZXkgaW4gdHJhdmVyc2Uuc2tpcEtleXdvcmRzKSkpIHtcbiAgICAgICAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoLCBqc29uUHRyICsgJy8nICsga2V5LCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBvc3Qoc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUpzb25QdHIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGV4cG9ydHMucmVzb2x2ZVVybCA9IGV4cG9ydHMubm9ybWFsaXplSWQgPSBleHBvcnRzLl9nZXRGdWxsUGF0aCA9IGV4cG9ydHMuZ2V0RnVsbFBhdGggPSBleHBvcnRzLmlubGluZVJlZiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBlcXVhbCA9IHJlcXVpcmUoXCJmYXN0LWRlZXAtZXF1YWxcIik7XG5jb25zdCB0cmF2ZXJzZSA9IHJlcXVpcmUoXCJqc29uLXNjaGVtYS10cmF2ZXJzZVwiKTtcbi8vIFRPRE8gcmVmYWN0b3IgdG8gdXNlIGtleXdvcmQgZGVmaW5pdGlvbnNcbmNvbnN0IFNJTVBMRV9JTkxJTkVEID0gbmV3IFNldChbXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJmb3JtYXRcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwibWluTGVuZ3RoXCIsXG4gICAgXCJtYXhQcm9wZXJ0aWVzXCIsXG4gICAgXCJtaW5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJtYXhJdGVtc1wiLFxuICAgIFwibWluSXRlbXNcIixcbiAgICBcIm1heGltdW1cIixcbiAgICBcIm1pbmltdW1cIixcbiAgICBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgXCJtdWx0aXBsZU9mXCIsXG4gICAgXCJyZXF1aXJlZFwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiY29uc3RcIixcbl0pO1xuZnVuY3Rpb24gaW5saW5lUmVmKHNjaGVtYSwgbGltaXQgPSB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChsaW1pdCA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuICFoYXNSZWYoc2NoZW1hKTtcbiAgICBpZiAoIWxpbWl0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvdW50S2V5cyhzY2hlbWEpIDw9IGxpbWl0O1xufVxuZXhwb3J0cy5pbmxpbmVSZWYgPSBpbmxpbmVSZWY7XG5jb25zdCBSRUZfS0VZV09SRFMgPSBuZXcgU2V0KFtcbiAgICBcIiRyZWZcIixcbiAgICBcIiRyZWN1cnNpdmVSZWZcIixcbiAgICBcIiRyZWN1cnNpdmVBbmNob3JcIixcbiAgICBcIiRkeW5hbWljUmVmXCIsXG4gICAgXCIkZHluYW1pY0FuY2hvclwiLFxuXSk7XG5mdW5jdGlvbiBoYXNSZWYoc2NoZW1hKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChSRUZfS0VZV09SRFMuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkgJiYgc2NoLnNvbWUoaGFzUmVmKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiICYmIGhhc1JlZihzY2gpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvdW50S2V5cyhzY2hlbWEpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcIiRyZWZcIilcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKFNJTVBMRV9JTkxJTkVELmhhcyhrZXkpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hW2tleV0gPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoc2NoZW1hW2tleV0sIChzY2gpID0+IChjb3VudCArPSBjb3VudEtleXMoc2NoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3VudCA9PT0gSW5maW5pdHkpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbn1cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoKHJlc29sdmVyLCBpZCA9IFwiXCIsIG5vcm1hbGl6ZSkge1xuICAgIGlmIChub3JtYWxpemUgIT09IGZhbHNlKVxuICAgICAgICBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgICBjb25zdCBwID0gcmVzb2x2ZXIucGFyc2UoaWQpO1xuICAgIHJldHVybiBfZ2V0RnVsbFBhdGgocmVzb2x2ZXIsIHApO1xufVxuZXhwb3J0cy5nZXRGdWxsUGF0aCA9IGdldEZ1bGxQYXRoO1xuZnVuY3Rpb24gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHJlc29sdmVyLnNlcmlhbGl6ZShwKTtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zcGxpdChcIiNcIilbMF0gKyBcIiNcIjtcbn1cbmV4cG9ydHMuX2dldEZ1bGxQYXRoID0gX2dldEZ1bGxQYXRoO1xuY29uc3QgVFJBSUxJTkdfU0xBU0hfSEFTSCA9IC8jXFwvPyQvO1xuZnVuY3Rpb24gbm9ybWFsaXplSWQoaWQpIHtcbiAgICByZXR1cm4gaWQgPyBpZC5yZXBsYWNlKFRSQUlMSU5HX1NMQVNIX0hBU0gsIFwiXCIpIDogXCJcIjtcbn1cbmV4cG9ydHMubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbmZ1bmN0aW9uIHJlc29sdmVVcmwocmVzb2x2ZXIsIGJhc2VJZCwgaWQpIHtcbiAgICBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShiYXNlSWQsIGlkKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVVybCA9IHJlc29sdmVVcmw7XG5jb25zdCBBTkNIT1IgPSAvXlthLXpfXVstYS16MC05Ll9dKiQvaTtcbmZ1bmN0aW9uIGdldFNjaGVtYVJlZnMoc2NoZW1hLCBiYXNlSWQpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHsgc2NoZW1hSWQsIHVyaVJlc29sdmVyIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3Qgc2NoSWQgPSBub3JtYWxpemVJZChzY2hlbWFbc2NoZW1hSWRdIHx8IGJhc2VJZCk7XG4gICAgY29uc3QgYmFzZUlkcyA9IHsgXCJcIjogc2NoSWQgfTtcbiAgICBjb25zdCBwYXRoUHJlZml4ID0gZ2V0RnVsbFBhdGgodXJpUmVzb2x2ZXIsIHNjaElkLCBmYWxzZSk7XG4gICAgY29uc3QgbG9jYWxSZWZzID0ge307XG4gICAgY29uc3Qgc2NoZW1hUmVmcyA9IG5ldyBTZXQoKTtcbiAgICB0cmF2ZXJzZShzY2hlbWEsIHsgYWxsS2V5czogdHJ1ZSB9LCAoc2NoLCBqc29uUHRyLCBfLCBwYXJlbnRKc29uUHRyKSA9PiB7XG4gICAgICAgIGlmIChwYXJlbnRKc29uUHRyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aFByZWZpeCArIGpzb25QdHI7XG4gICAgICAgIGxldCBpbm5lckJhc2VJZCA9IGJhc2VJZHNbcGFyZW50SnNvblB0cl07XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoW3NjaGVtYUlkXSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgaW5uZXJCYXNlSWQgPSBhZGRSZWYuY2FsbCh0aGlzLCBzY2hbc2NoZW1hSWRdKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRhbmNob3IpO1xuICAgICAgICBhZGRBbmNob3IuY2FsbCh0aGlzLCBzY2guJGR5bmFtaWNBbmNob3IpO1xuICAgICAgICBiYXNlSWRzW2pzb25QdHJdID0gaW5uZXJCYXNlSWQ7XG4gICAgICAgIGZ1bmN0aW9uIGFkZFJlZihyZWYpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgICAgIGNvbnN0IF9yZXNvbHZlID0gdGhpcy5vcHRzLnVyaVJlc29sdmVyLnJlc29sdmU7XG4gICAgICAgICAgICByZWYgPSBub3JtYWxpemVJZChpbm5lckJhc2VJZCA/IF9yZXNvbHZlKGlubmVyQmFzZUlkLCByZWYpIDogcmVmKTtcbiAgICAgICAgICAgIGlmIChzY2hlbWFSZWZzLmhhcyhyZWYpKVxuICAgICAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgICAgICAgICBzY2hlbWFSZWZzLmFkZChyZWYpO1xuICAgICAgICAgICAgbGV0IHNjaE9yUmVmID0gdGhpcy5yZWZzW3JlZl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgc2NoT3JSZWYgPSB0aGlzLnJlZnNbc2NoT3JSZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIHNjaE9yUmVmLnNjaGVtYSwgcmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZiAhPT0gbm9ybWFsaXplSWQoZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZlswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIGxvY2FsUmVmc1tyZWZdLCByZWYpO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFJlZnNbcmVmXSA9IHNjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmc1tyZWZdID0gZnVsbFBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGRBbmNob3IoYW5jaG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFuY2hvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBTkNIT1IudGVzdChhbmNob3IpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW5jaG9yIFwiJHthbmNob3J9XCJgKTtcbiAgICAgICAgICAgICAgICBhZGRSZWYuY2FsbCh0aGlzLCBgIyR7YW5jaG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2FsUmVmcztcbiAgICBmdW5jdGlvbiBjaGVja0FtYmlndW9zUmVmKHNjaDEsIHNjaDIsIHJlZikge1xuICAgICAgICBpZiAoc2NoMiAhPT0gdW5kZWZpbmVkICYmICFlcXVhbChzY2gxLCBzY2gyKSlcbiAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFtYmlndW9zKHJlZikge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGByZWZlcmVuY2UgXCIke3JlZn1cIiByZXNvbHZlcyB0byBtb3JlIHRoYW4gb25lIHNjaGVtYWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGdldFNjaGVtYVJlZnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREYXRhID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGJvb2xTY2hlbWFfMSA9IHJlcXVpcmUoXCIuL2Jvb2xTY2hlbWFcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZGF0YVR5cGVfMiA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgZGVmYXVsdHNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRzXCIpO1xuY29uc3Qga2V5d29yZF8xID0gcmVxdWlyZShcIi4va2V5d29yZFwiKTtcbmNvbnN0IHN1YnNjaGVtYV8xID0gcmVxdWlyZShcIi4vc3Vic2NoZW1hXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4uL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIGdlbmVyYXRlcyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBzdWJzY2hlbWFDb2RlIChiZWxvdykgaXMgdXNlZCBmb3Igc3Vic2NoZW1hc1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvZGUoaXQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICB0b3BTY2hlbWFPYmpDb2RlKGl0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiAoMCwgYm9vbFNjaGVtYV8xLnRvcEJvb2xPckVtcHR5U2NoZW1hKShpdCkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZhbGlkYXRlRnVuY3Rpb25Db2RlO1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWEsIHNjaGVtYUVudiwgb3B0cyB9LCBib2R5KSB7XG4gICAgaWYgKG9wdHMuY29kZS5lczUpIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYFwidXNlIHN0cmljdFwiOyAke2Z1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKX1gKTtcbiAgICAgICAgICAgIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cyk7XG4gICAgICAgICAgICBnZW4uY29kZShib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke2Rlc3RydWN0dXJlVmFsQ3h0KG9wdHMpfWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IGdlbi5jb2RlKGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSkuY29kZShib2R5KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7JHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofT1cIlwiLCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fSwgJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9PSR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9JHtvcHRzLmR5bmFtaWNSZWYgPyAoMCwgY29kZWdlbl8xLl8pIGAsICR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfT17fWAgOiBjb2RlZ2VuXzEubmlsfX09e31gO1xufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKSB7XG4gICAgZ2VuLmlmKG5hbWVzXzEuZGVmYXVsdC52YWxDeHQsICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX1gKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfWApO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b3BTY2hlbWFPYmpDb2RlKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMsIGdlbiB9ID0gaXQ7XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4ge1xuICAgICAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgICAgIGNoZWNrTm9EZWZhdWx0KGl0KTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LmVycm9ycywgMCk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmVzZXRFdmFsdWF0ZWQoaXQpO1xuICAgICAgICB0eXBlQW5kS2V5d29yZHMoaXQpO1xuICAgICAgICByZXR1cm5SZXN1bHRzKGl0KTtcbiAgICB9KTtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiByZXNldEV2YWx1YXRlZChpdCkge1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBob29rIHRvIGV4ZWN1dGUgaXQgaW4gdGhlIGVuZCB0byBjaGVjayB3aGV0aGVyIHByb3BzL2l0ZW1zIGFyZSBOYW1lLCBhcyBpbiBhc3NpZ25FdmFsdWF0ZWRcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpdC5ldmFsdWF0ZWQgPSBnZW4uY29uc3QoXCJldmFsdWF0ZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmV2YWx1YXRlZGApO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY1Byb3BzYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0ucHJvcHNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljSXRlbXNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5pdGVtc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbn1cbmZ1bmN0aW9uIGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSB7XG4gICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hW29wdHMuc2NoZW1hSWRdO1xuICAgIHJldHVybiBzY2hJZCAmJiAob3B0cy5jb2RlLnNvdXJjZSB8fCBvcHRzLmNvZGUucHJvY2VzcykgPyAoMCwgY29kZWdlbl8xLl8pIGAvKiMgc291cmNlVVJMPSR7c2NoSWR9ICovYCA6IGNvZGVnZW5fMS5uaWw7XG59XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgdG8gZ2VuZXJhdGUgY29kZSBmb3Igc3ViLXNjaGVtYXNcbmZ1bmN0aW9uIHN1YnNjaGVtYUNvZGUoaXQsIHZhbGlkKSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBib29sU2NoZW1hXzEuYm9vbE9yRW1wdHlTY2hlbWEpKGl0LCB2YWxpZCk7XG59XG5mdW5jdGlvbiBzY2hlbWFDeHRIYXNSdWxlcyh7IHNjaGVtYSwgc2VsZiB9KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHNlbGYuUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NjaGVtYU9iaihpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQuc2NoZW1hICE9IFwiYm9vbGVhblwiO1xufVxuZnVuY3Rpb24gc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZ2VuLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICB1cGRhdGVDb250ZXh0KGl0KTtcbiAgICBjaGVja0FzeW5jU2NoZW1hKGl0KTtcbiAgICBjb25zdCBlcnJzQ291bnQgPSBnZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCk7XG4gICAgLy8gVE9ETyB2YXJcbiAgICBnZW4udmFyKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZHMoaXQpIHtcbiAgICAoMCwgdXRpbF8xLmNoZWNrVW5rbm93blJ1bGVzKShpdCk7XG4gICAgY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpO1xufVxuZnVuY3Rpb24gdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpIHtcbiAgICBpZiAoaXQub3B0cy5qdGQpXG4gICAgICAgIHJldHVybiBzY2hlbWFLZXl3b3JkcyhpdCwgW10sIGZhbHNlLCBlcnJzQ291bnQpO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKGl0LnNjaGVtYSk7XG4gICAgY29uc3QgY2hlY2tlZFR5cGVzID0gKDAsIGRhdGFUeXBlXzEuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoaXQsIHR5cGVzKTtcbiAgICBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsICFjaGVja2VkVHlwZXMsIGVycnNDb3VudCk7XG59XG5mdW5jdGlvbiBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgb3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgJiYgKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBzZWxmLlJVTEVTKSkge1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKGAkcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tOb0RlZmF1bHQoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgb3B0cy51c2VEZWZhdWx0cyAmJiBvcHRzLnN0cmljdFNjaGVtYSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIFwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGl0KSB7XG4gICAgY29uc3Qgc2NoSWQgPSBpdC5zY2hlbWFbaXQub3B0cy5zY2hlbWFJZF07XG4gICAgaWYgKHNjaElkKVxuICAgICAgICBpdC5iYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgc2NoSWQpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY1NjaGVtYShpdCkge1xuICAgIGlmIChpdC5zY2hlbWEuJGFzeW5jICYmICFpdC5zY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiBjb21tZW50S2V5d29yZCh7IGdlbiwgc2NoZW1hRW52LCBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMgfSkge1xuICAgIGNvbnN0IG1zZyA9IHNjaGVtYS4kY29tbWVudDtcbiAgICBpZiAob3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5sb2dnZXIubG9nKCR7bXNnfSlgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9wdHMuJGNvbW1lbnQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyU2NoZW1hUGF0aH0vJGNvbW1lbnRgO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogc2NoZW1hRW52LnJvb3QgfSk7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHttc2d9LCAke3NjaGVtYVBhdGh9LCAke3Jvb3ROYW1lfS5zY2hlbWEpYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmV0dXJuUmVzdWx0cyhpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFFbnYsIHZhbGlkYXRlTmFtZSwgVmFsaWRhdGlvbkVycm9yLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICAvLyBUT0RPIGFzc2lnbiB1bmV2YWx1YXRlZFxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsICgpID0+IGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpLCAoKSA9PiBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7VmFsaWRhdGlvbkVycm9yfSgke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSlgKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBuYW1lc18xLmRlZmF1bHQudkVycm9ycyk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgYXNzaWduRXZhbHVhdGVkKGl0KTtcbiAgICAgICAgZ2VuLnJldHVybigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduRXZhbHVhdGVkKHsgZ2VuLCBldmFsdWF0ZWQsIHByb3BzLCBpdGVtcyB9KSB7XG4gICAgaWYgKHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9LnByb3BzYCwgcHJvcHMpO1xuICAgIGlmIChpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5pdGVtc2AsIGl0ZW1zKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgdHlwZUVycm9ycywgZXJyc0NvdW50KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgYWxsRXJyb3JzLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSBzZWxmO1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiAob3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgfHwgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgUlVMRVMpKSkge1xuICAgICAgICBnZW4uYmxvY2soKCkgPT4ga2V5d29yZENvZGUoaXQsIFwiJHJlZlwiLCBSVUxFUy5hbGwuJHJlZi5kZWZpbml0aW9uKSk7IC8vIFRPRE8gdHlwZWNhc3RcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9wdHMuanRkKVxuICAgICAgICBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcylcbiAgICAgICAgICAgIGdyb3VwS2V5d29yZHMoZ3JvdXApO1xuICAgICAgICBncm91cEtleXdvcmRzKFJVTEVTLnBvc3QpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGdyb3VwS2V5d29yZHMoZ3JvdXApIHtcbiAgICAgICAgaWYgKCEoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZUdyb3VwKShzY2hlbWEsIGdyb3VwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlKShncm91cC50eXBlLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpKTtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0eXBlc1swXSA9PT0gZ3JvdXAudHlwZSAmJiB0eXBlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgICAgICAoMCwgZGF0YVR5cGVfMi5yZXBvcnRUeXBlRXJyb3IpKGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBtYWtlIGl0IFwib2tcIiBjYWxsP1xuICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAke2VycnNDb3VudCB8fCAwfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBvcHRzOiB7IHVzZURlZmF1bHRzIH0sIH0gPSBpdDtcbiAgICBpZiAodXNlRGVmYXVsdHMpXG4gICAgICAgICgwLCBkZWZhdWx0c18xLmFzc2lnbkRlZmF1bHRzKShpdCwgZ3JvdXAudHlwZSk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGdyb3VwLnJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShzY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAga2V5d29yZENvZGUoaXQsIHJ1bGUua2V5d29yZCwgcnVsZS5kZWZpbml0aW9uLCBncm91cC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoaXQuc2NoZW1hRW52Lm1ldGEgfHwgIWl0Lm9wdHMuc3RyaWN0VHlwZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGlmICghaXQub3B0cy5hbGxvd1VuaW9uVHlwZXMpXG4gICAgICAgIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGNoZWNrS2V5d29yZFR5cGVzKGl0LCBpdC5kYXRhVHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKCF0eXBlcy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIWl0LmRhdGFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgaXQuZGF0YVR5cGVzID0gdHlwZXM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHlwZXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAoIWluY2x1ZGVzVHlwZShpdC5kYXRhVHlwZXMsIHQpKSB7XG4gICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgdHlwZSBcIiR7dH1cIiBub3QgYWxsb3dlZCBieSBjb250ZXh0IFwiJHtpdC5kYXRhVHlwZXMuam9pbihcIixcIil9XCJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB0eXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja011bHRpcGxlVHlwZXMoaXQsIHRzKSB7XG4gICAgaWYgKHRzLmxlbmd0aCA+IDEgJiYgISh0cy5sZW5ndGggPT09IDIgJiYgdHMuaW5jbHVkZXMoXCJudWxsXCIpKSkge1xuICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBcInVzZSBhbGxvd1VuaW9uVHlwZXMgdG8gYWxsb3cgdW5pb24gdHlwZSBrZXl3b3JkXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZFR5cGVzKGl0LCB0cykge1xuICAgIGNvbnN0IHJ1bGVzID0gaXQuc2VsZi5SVUxFUy5hbGw7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIHJ1bGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShpdC5zY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICh0eXBlLmxlbmd0aCAmJiAhdHlwZS5zb21lKCh0KSA9PiBoYXNBcHBsaWNhYmxlVHlwZSh0cywgdCkpKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYG1pc3NpbmcgdHlwZSBcIiR7dHlwZS5qb2luKFwiLFwiKX1cIiBmb3Iga2V5d29yZCBcIiR7a2V5d29yZH1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzQXBwbGljYWJsZVR5cGUoc2NoVHMsIGt3ZFQpIHtcbiAgICByZXR1cm4gc2NoVHMuaW5jbHVkZXMoa3dkVCkgfHwgKGt3ZFQgPT09IFwibnVtYmVyXCIgJiYgc2NoVHMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpKTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzVHlwZSh0cywgdCkge1xuICAgIHJldHVybiB0cy5pbmNsdWRlcyh0KSB8fCAodCA9PT0gXCJpbnRlZ2VyXCIgJiYgdHMuaW5jbHVkZXMoXCJudW1iZXJcIikpO1xufVxuZnVuY3Rpb24gbmFycm93U2NoZW1hVHlwZXMoaXQsIHdpdGhUeXBlcykge1xuICAgIGNvbnN0IHRzID0gW107XG4gICAgZm9yIChjb25zdCB0IG9mIGl0LmRhdGFUeXBlcykge1xuICAgICAgICBpZiAoaW5jbHVkZXNUeXBlKHdpdGhUeXBlcywgdCkpXG4gICAgICAgICAgICB0cy5wdXNoKHQpO1xuICAgICAgICBlbHNlIGlmICh3aXRoVHlwZXMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpICYmIHQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB0cy5wdXNoKFwiaW50ZWdlclwiKTtcbiAgICB9XG4gICAgaXQuZGF0YVR5cGVzID0gdHM7XG59XG5mdW5jdGlvbiBzdHJpY3RUeXBlc0Vycm9yKGl0LCBtc2cpIHtcbiAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgbXNnICs9IGAgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFR5cGVzKWA7XG4gICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0VHlwZXMpO1xufVxuY2xhc3MgS2V5d29yZEN4dCB7XG4gICAgY29uc3RydWN0b3IoaXQsIGRlZiwga2V5d29yZCkge1xuICAgICAgICAoMCwga2V5d29yZF8xLnZhbGlkYXRlS2V5d29yZFVzYWdlKShpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICAgICAgdGhpcy5nZW4gPSBpdC5nZW47XG4gICAgICAgIHRoaXMuYWxsRXJyb3JzID0gaXQuYWxsRXJyb3JzO1xuICAgICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmRhdGEgPSBpdC5kYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgdGhpcy4kZGF0YSA9IGRlZi4kZGF0YSAmJiBpdC5vcHRzLiRkYXRhICYmIHRoaXMuc2NoZW1hICYmIHRoaXMuc2NoZW1hLiRkYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYVZhbHVlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHRoaXMuc2NoZW1hLCBrZXl3b3JkLCB0aGlzLiRkYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlbWFUeXBlID0gZGVmLnNjaGVtYVR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50U2NoZW1hID0gaXQuc2NoZW1hO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IHt9O1xuICAgICAgICB0aGlzLml0ID0gaXQ7XG4gICAgICAgIHRoaXMuZGVmID0gZGVmO1xuICAgICAgICBpZiAodGhpcy4kZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gaXQuZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBnZXREYXRhKHRoaXMuJGRhdGEsIGl0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSB0aGlzLnNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoMCwga2V5d29yZF8xLnZhbGlkU2NoZW1hVHlwZSkodGhpcy5zY2hlbWEsIGRlZi5zY2hlbWFUeXBlLCBkZWYuYWxsb3dVbmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleXdvcmR9IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShkZWYuc2NoZW1hVHlwZSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiY29kZVwiIGluIGRlZiA/IGRlZi50cmFja0Vycm9ycyA6IGRlZi5lcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmVycnNDb3VudCA9IGl0Lmdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbFJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKGZhaWxBY3Rpb24pXG4gICAgICAgICAgICBmYWlsQWN0aW9uKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIHN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhc3MoY29uZGl0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgdW5kZWZpbmVkLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbChjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGZhbHNlKTsgLy8gdGhpcyBicmFuY2ggd2lsbCBiZSByZW1vdmVkIGJ5IGdlbi5vcHRpbWl6ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgIH1cbiAgICBmYWlsJGRhdGEoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWwoY29uZGl0aW9uKTtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFDb2RlIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLCBjb2RlZ2VuXzEub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksIGNvbmRpdGlvbil9KWApO1xuICAgIH1cbiAgICBlcnJvcihhcHBlbmQsIGVycm9yUGFyYW1zLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIGlmIChlcnJvclBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoZXJyb3JQYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICBfZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIDtcbiAgICAgICAgKGFwcGVuZCA/IGVycm9yc18xLnJlcG9ydEV4dHJhRXJyb3IgOiBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICAkZGF0YUVycm9yKCkge1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLiRkYXRhRXJyb3IgfHwgZXJyb3JzXzEua2V5d29yZCREYXRhRXJyb3IpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyc0NvdW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZCBcInRyYWNrRXJyb3JzXCIgdG8ga2V5d29yZCBkZWZpbml0aW9uJyk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXNldEVycm9yc0NvdW50KSh0aGlzLmdlbiwgdGhpcy5lcnJzQ291bnQpO1xuICAgIH1cbiAgICBvayhjb25kKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5pZihjb25kKTtcbiAgICB9XG4gICAgc2V0UGFyYW1zKG9iaiwgYXNzaWduKSB7XG4gICAgICAgIGlmIChhc3NpZ24pXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLCBvYmopO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IG9iajtcbiAgICB9XG4gICAgYmxvY2skZGF0YSh2YWxpZCwgY29kZUJsb2NrLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICB0aGlzLmdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrJGRhdGEodmFsaWQsICRkYXRhVmFsaWQpO1xuICAgICAgICAgICAgY29kZUJsb2NrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjaGVjayRkYXRhKHZhbGlkID0gY29kZWdlbl8xLm5pbCwgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmIH0gPSB0aGlzO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5vcikoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gdW5kZWZpbmVkYCwgJGRhdGFWYWxpZCkpO1xuICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoIHx8IGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgZ2VuLmVsc2VJZih0aGlzLmludmFsaWQkZGF0YSgpKTtcbiAgICAgICAgICAgIHRoaXMuJGRhdGFFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBnZW4uZWxzZSgpO1xuICAgIH1cbiAgICBpbnZhbGlkJGRhdGEoKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYsIGl0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikod3JvbmckRGF0YVR5cGUoKSwgaW52YWxpZCREYXRhU2NoZW1hKCkpO1xuICAgICAgICBmdW5jdGlvbiB3cm9uZyREYXRhVHlwZSgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghKHNjaGVtYUNvZGUgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgPyBzY2hlbWFUeXBlIDogW3NjaGVtYVR5cGVdO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGVzKShzdCwgc2NoZW1hQ29kZSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8yLkRhdGFUeXBlLldyb25nKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW52YWxpZCREYXRhU2NoZW1hKCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlU2NoZW1hUmVmID0gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZSRkYXRhXCIsIHsgcmVmOiBkZWYudmFsaWRhdGVTY2hlbWEgfSk7IC8vIFRPRE8gdmFsdWUuY29kZSBmb3Igc3RhbmRhbG9uZVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZGF0ZVNjaGVtYVJlZn0oJHtzY2hlbWFDb2RlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NoZW1hKGFwcGwsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9ICgwLCBzdWJzY2hlbWFfMS5nZXRTdWJzY2hlbWEpKHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hRGF0YSkoc3Vic2NoZW1hLCB0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYU1vZGUpKHN1YnNjaGVtYSwgYXBwbCk7XG4gICAgICAgIGNvbnN0IG5leHRDb250ZXh0ID0geyAuLi50aGlzLml0LCAuLi5zdWJzY2hlbWEsIGl0ZW1zOiB1bmRlZmluZWQsIHByb3BzOiB1bmRlZmluZWQgfTtcbiAgICAgICAgc3Vic2NoZW1hQ29kZShuZXh0Q29udGV4dCwgdmFsaWQpO1xuICAgICAgICByZXR1cm4gbmV4dENvbnRleHQ7XG4gICAgfVxuICAgIG1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgdG9OYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgc2NoZW1hQ3h0LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoZW1hQ3h0LnByb3BzLCBpdC5wcm9wcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUgJiYgc2NoZW1hQ3h0Lml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoZW1hQ3h0Lml0ZW1zLCBpdC5pdGVtcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZVZhbGlkRXZhbHVhdGVkKHNjaGVtYUN4dCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiAoaXQucHJvcHMgIT09IHRydWUgfHwgaXQuaXRlbXMgIT09IHRydWUpKSB7XG4gICAgICAgICAgICBnZW4uaWYodmFsaWQsICgpID0+IHRoaXMubWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCBjb2RlZ2VuXzEuTmFtZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLktleXdvcmRDeHQgPSBLZXl3b3JkQ3h0O1xuZnVuY3Rpb24ga2V5d29yZENvZGUoaXQsIGtleXdvcmQsIGRlZiwgcnVsZVR5cGUpIHtcbiAgICBjb25zdCBjeHQgPSBuZXcgS2V5d29yZEN4dChpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICBpZiAoXCJjb2RlXCIgaW4gZGVmKSB7XG4gICAgICAgIGRlZi5jb2RlKGN4dCwgcnVsZVR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjeHQuJGRhdGEgJiYgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKFwibWFjcm9cIiBpbiBkZWYpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5tYWNyb0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRlZi5jb21waWxlIHx8IGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbn1cbmNvbnN0IEpTT05fUE9JTlRFUiA9IC9eXFwvKD86W15+XXx+MHx+MSkqJC87XG5jb25zdCBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIHsgZGF0YUxldmVsLCBkYXRhTmFtZXMsIGRhdGFQYXRoQXJyIH0pIHtcbiAgICBsZXQganNvblBvaW50ZXI7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKCRkYXRhID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIGlmICgkZGF0YVswXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgaWYgKCFKU09OX1BPSU5URVIudGVzdCgkZGF0YSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgICAgICBkYXRhID0gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFJFTEFUSVZFX0pTT05fUE9JTlRFUi5leGVjKCRkYXRhKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAgY29uc3QgdXAgPSArbWF0Y2hlc1sxXTtcbiAgICAgICAganNvblBvaW50ZXIgPSBtYXRjaGVzWzJdO1xuICAgICAgICBpZiAoanNvblBvaW50ZXIgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAodXAgPj0gZGF0YUxldmVsKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcInByb3BlcnR5L2luZGV4XCIsIHVwKSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVBhdGhBcnJbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCA+IGRhdGFMZXZlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcImRhdGFcIiwgdXApKTtcbiAgICAgICAgZGF0YSA9IGRhdGFOYW1lc1tkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIGlmICghanNvblBvaW50ZXIpXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgbGV0IGV4cHIgPSBkYXRhO1xuICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgZGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKCgwLCB1dGlsXzEudW5lc2NhcGVKc29uUG9pbnRlcikoc2VnbWVudCkpfWA7XG4gICAgICAgICAgICBleHByID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtleHByfSAmJiAke2RhdGF9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbiAgICBmdW5jdGlvbiBlcnJvck1zZyhwb2ludGVyVHlwZSwgdXApIHtcbiAgICAgICAgcmV0dXJuIGBDYW5ub3QgYWNjZXNzICR7cG9pbnRlclR5cGV9ICR7dXB9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke2RhdGFMZXZlbH1gO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RGF0YSA9IGdldERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcnMpIHtcbiAgICAgICAgc3VwZXIoXCJ2YWxpZGF0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIHRoaXMuYWp2ID0gdGhpcy52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBWYWxpZGF0aW9uRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0aW9uX2Vycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVwiKTtcbmNsYXNzIE1pc3NpbmdSZWZFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNvbHZlciwgYmFzZUlkLCByZWYsIG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgYGNhbid0IHJlc29sdmUgcmVmZXJlbmNlICR7cmVmfSBmcm9tIGlkICR7YmFzZUlkfWApO1xuICAgICAgICB0aGlzLm1pc3NpbmdSZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHJlc29sdmVyLCBiYXNlSWQsIHJlZik7XG4gICAgICAgIHRoaXMubWlzc2luZ1NjaGVtYSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKCgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHJlc29sdmVyLCB0aGlzLm1pc3NpbmdSZWYpKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBNaXNzaW5nUmVmRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWZfZXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSBleHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGV4cG9ydHMucmVzb2x2ZVJlZiA9IGV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGV4cG9ydHMuU2NoZW1hRW52ID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVwiKTtcbmNsYXNzIFNjaGVtYUVudiB7XG4gICAgY29uc3RydWN0b3IoZW52KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZHluYW1pY0FuY2hvcnMgPSB7fTtcbiAgICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYuc2NoZW1hID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBzY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hSWQgPSBlbnYuc2NoZW1hSWQ7XG4gICAgICAgIHRoaXMucm9vdCA9IGVudi5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuYmFzZUlkID0gKF9hID0gZW52LmJhc2VJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hW2Vudi5zY2hlbWFJZCB8fCBcIiRpZFwiXSk7XG4gICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IGVudi5zY2hlbWFQYXRoO1xuICAgICAgICB0aGlzLmxvY2FsUmVmcyA9IGVudi5sb2NhbFJlZnM7XG4gICAgICAgIHRoaXMubWV0YSA9IGVudi5tZXRhO1xuICAgICAgICB0aGlzLiRhc3luYyA9IHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYS4kYXN5bmM7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2NoZW1hRW52ID0gU2NoZW1hRW52O1xuLy8gbGV0IGNvZGVTaXplID0gMFxuLy8gbGV0IG5vZGVDb3VudCA9IDBcbi8vIENvbXBpbGVzIHNjaGVtYSBpbiBTY2hlbWFFbnZcbmZ1bmN0aW9uIGNvbXBpbGVTY2hlbWEoc2NoKSB7XG4gICAgLy8gVE9ETyByZWZhY3RvciAtIHJlbW92ZSBjb21waWxhdGlvbnNcbiAgICBjb25zdCBfc2NoID0gZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICBpZiAoX3NjaClcbiAgICAgICAgcmV0dXJuIF9zY2g7XG4gICAgY29uc3Qgcm9vdElkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBzY2gucm9vdC5iYXNlSWQpOyAvLyBUT0RPIGlmIGdldEZ1bGxQYXRoIHJlbW92ZWQgMSB0ZXN0cyBmYWlsc1xuICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgY29uc3QgeyBvd25Qcm9wZXJ0aWVzIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3QgZ2VuID0gbmV3IGNvZGVnZW5fMS5Db2RlR2VuKHRoaXMuc2NvcGUsIHsgZXM1LCBsaW5lcywgb3duUHJvcGVydGllcyB9KTtcbiAgICBsZXQgX1ZhbGlkYXRpb25FcnJvcjtcbiAgICBpZiAoc2NoLiRhc3luYykge1xuICAgICAgICBfVmFsaWRhdGlvbkVycm9yID0gZ2VuLnNjb3BlVmFsdWUoXCJFcnJvclwiLCB7XG4gICAgICAgICAgICByZWY6IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0LFxuICAgICAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKS5kZWZhdWx0YCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IGdlbi5zY29wZU5hbWUoXCJ2YWxpZGF0ZVwiKTtcbiAgICBzY2gudmFsaWRhdGVOYW1lID0gdmFsaWRhdGVOYW1lO1xuICAgIGNvbnN0IHNjaGVtYUN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBhbGxFcnJvcnM6IHRoaXMub3B0cy5hbGxFcnJvcnMsXG4gICAgICAgIGRhdGE6IG5hbWVzXzEuZGVmYXVsdC5kYXRhLFxuICAgICAgICBwYXJlbnREYXRhOiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSxcbiAgICAgICAgcGFyZW50RGF0YVByb3BlcnR5OiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LFxuICAgICAgICBkYXRhTmFtZXM6IFtuYW1lc18xLmRlZmF1bHQuZGF0YV0sXG4gICAgICAgIGRhdGFQYXRoQXJyOiBbY29kZWdlbl8xLm5pbF0sIC8vIFRPRE8gY2FuIGl0cyBsZW5ndGggYmUgdXNlZCBhcyBkYXRhTGV2ZWwgaWYgbmlsIGlzIHJlbW92ZWQ/XG4gICAgICAgIGRhdGFMZXZlbDogMCxcbiAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgZGVmaW5lZFByb3BlcnRpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCB0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWVcbiAgICAgICAgICAgID8geyByZWY6IHNjaC5zY2hlbWEsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2guc2NoZW1hKSB9XG4gICAgICAgICAgICA6IHsgcmVmOiBzY2guc2NoZW1hIH0pLFxuICAgICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjogX1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgc2NoZW1hOiBzY2guc2NoZW1hLFxuICAgICAgICBzY2hlbWFFbnY6IHNjaCxcbiAgICAgICAgcm9vdElkLFxuICAgICAgICBiYXNlSWQ6IHNjaC5iYXNlSWQgfHwgcm9vdElkLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBzY2guc2NoZW1hUGF0aCB8fCAodGhpcy5vcHRzLmp0ZCA/IFwiXCIgOiBcIiNcIiksXG4gICAgICAgIGVycm9yUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgXCJcImAsXG4gICAgICAgIG9wdHM6IHRoaXMub3B0cyxcbiAgICAgICAgc2VsZjogdGhpcyxcbiAgICB9O1xuICAgIGxldCBzb3VyY2VDb2RlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5hZGQoc2NoKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlXzEudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHNjaGVtYUN4dCk7XG4gICAgICAgIGdlbi5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7XG4gICAgICAgIC8vIGdlbi5vcHRpbWl6ZSgxKVxuICAgICAgICBjb25zdCB2YWxpZGF0ZUNvZGUgPSBnZW4udG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlQ29kZSA9IGAke2dlbi5zY29wZVJlZnMobmFtZXNfMS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHt2YWxpZGF0ZUNvZGV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coKGNvZGVTaXplICs9IHNvdXJjZUNvZGUubGVuZ3RoKSwgKG5vZGVDb3VudCArPSBnZW4ubm9kZUNvdW50KSlcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnByb2Nlc3MpXG4gICAgICAgICAgICBzb3VyY2VDb2RlID0gdGhpcy5vcHRzLmNvZGUucHJvY2Vzcyhzb3VyY2VDb2RlLCBzY2gpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUpXG4gICAgICAgIGNvbnN0IG1ha2VWYWxpZGF0ZSA9IG5ldyBGdW5jdGlvbihgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn1gLCBgJHtuYW1lc18xLmRlZmF1bHQuc2NvcGV9YCwgc291cmNlQ29kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKHRoaXMsIHRoaXMuc2NvcGUuZ2V0KCkpO1xuICAgICAgICB0aGlzLnNjb3BlLnZhbHVlKHZhbGlkYXRlTmFtZSwgeyByZWY6IHZhbGlkYXRlIH0pO1xuICAgICAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWEgPSBzY2guc2NoZW1hO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWFFbnYgPSBzY2g7XG4gICAgICAgIGlmIChzY2guJGFzeW5jKVxuICAgICAgICAgICAgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlID0geyB2YWxpZGF0ZU5hbWUsIHZhbGlkYXRlQ29kZSwgc2NvcGVWYWx1ZXM6IGdlbi5fdmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy51bmV2YWx1YXRlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgaXRlbXMgfSA9IHNjaGVtYUN4dDtcbiAgICAgICAgICAgIHZhbGlkYXRlLmV2YWx1YXRlZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IHByb3BzLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogaXRlbXMsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNJdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodmFsaWRhdGUuc291cmNlKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZS5ldmFsdWF0ZWQgPSAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkodmFsaWRhdGUuZXZhbHVhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzY2gudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZTtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZU5hbWU7XG4gICAgICAgIGlmIChzb3VyY2VDb2RlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOlwiLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlLCB0aGlzLm9wdHMpXG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKHNjaCk7XG4gICAgfVxufVxuZXhwb3J0cy5jb21waWxlU2NoZW1hID0gY29tcGlsZVNjaGVtYTtcbmZ1bmN0aW9uIHJlc29sdmVSZWYocm9vdCwgYmFzZUlkLCByZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICBjb25zdCBzY2hPckZ1bmMgPSByb290LnJlZnNbcmVmXTtcbiAgICBpZiAoc2NoT3JGdW5jKVxuICAgICAgICByZXR1cm4gc2NoT3JGdW5jO1xuICAgIGxldCBfc2NoID0gcmVzb2x2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSAoX2EgPSByb290LmxvY2FsUmVmcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3JlZl07IC8vIFRPRE8gbWF5YmUgbG9jYWxSZWZzIHNob3VsZCBob2xkIFNjaGVtYUVudlxuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmIChzY2hlbWEpXG4gICAgICAgICAgICBfc2NoID0gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiAocm9vdC5yZWZzW3JlZl0gPSBpbmxpbmVPckNvbXBpbGUuY2FsbCh0aGlzLCBfc2NoKSk7XG59XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZnVuY3Rpb24gaW5saW5lT3JDb21waWxlKHNjaCkge1xuICAgIGlmICgoMCwgcmVzb2x2ZV8xLmlubGluZVJlZikoc2NoLnNjaGVtYSwgdGhpcy5vcHRzLmlubGluZVJlZnMpKVxuICAgICAgICByZXR1cm4gc2NoLnNjaGVtYTtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlID8gc2NoIDogY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG59XG4vLyBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG5mdW5jdGlvbiBnZXRDb21waWxpbmdTY2hlbWEoc2NoRW52KSB7XG4gICAgZm9yIChjb25zdCBzY2ggb2YgdGhpcy5fY29tcGlsYXRpb25zKSB7XG4gICAgICAgIGlmIChzYW1lU2NoZW1hRW52KHNjaCwgc2NoRW52KSlcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBnZXRDb21waWxpbmdTY2hlbWE7XG5mdW5jdGlvbiBzYW1lU2NoZW1hRW52KHMxLCBzMikge1xuICAgIHJldHVybiBzMS5zY2hlbWEgPT09IHMyLnNjaGVtYSAmJiBzMS5yb290ID09PSBzMi5yb290ICYmIHMxLmJhc2VJZCA9PT0gczIuYmFzZUlkO1xufVxuLy8gcmVzb2x2ZSBhbmQgY29tcGlsZSB0aGUgcmVmZXJlbmNlcyAoJHJlZilcbi8vIFRPRE8gcmV0dXJucyBBbnlTY2hlbWFPYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbmZ1bmN0aW9uIHJlc29sdmUocm9vdCwgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgbGV0IHNjaDtcbiAgICB3aGlsZSAodHlwZW9mIChzY2ggPSB0aGlzLnJlZnNbcmVmXSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmVmID0gc2NoO1xuICAgIHJldHVybiBzY2ggfHwgdGhpcy5zY2hlbWFzW3JlZl0gfHwgcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG59XG4vLyBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCAvLyByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZzIFRPRE8gYmVsb3cgU2NoZW1hRW52IGlzIGFzc2lnbmVkIHRvIGl0XG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGNvbnN0IHAgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucGFyc2UocmVmKTtcbiAgICBjb25zdCByZWZQYXRoID0gKDAsIHJlc29sdmVfMS5fZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcCk7XG4gICAgbGV0IGJhc2VJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcm9vdC5iYXNlSWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gVE9ETyBgT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDBgIHNob3VsZCBub3QgYmUgbmVlZGVkIC0gYnV0IHJlbW92aW5nIGJyZWFrcyAyIHRlc3RzXG4gICAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwICYmIHJlZlBhdGggPT09IGJhc2VJZCkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCByb290KTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWZQYXRoKTtcbiAgICBjb25zdCBzY2hPclJlZiA9IHRoaXMucmVmc1tpZF0gfHwgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHNjaE9yUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHNjaE9yUmVmID09PSBudWxsIHx8IHNjaE9yUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hPclJlZi5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFzY2hPclJlZi52YWxpZGF0ZSlcbiAgICAgICAgY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaE9yUmVmKTtcbiAgICBpZiAoaWQgPT09ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZikpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHNjaE9yUmVmO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGNvbnN0IHNjaElkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgaWYgKHNjaElkKVxuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoT3JSZWYpO1xufVxuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gcmVzb2x2ZVNjaGVtYTtcbmNvbnN0IFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gbmV3IFNldChbXG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuXSk7XG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIHsgYmFzZUlkLCBzY2hlbWEsIHJvb3QgfSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKChfYSA9IHBhcnNlZFJlZi5mcmFnbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSAhPT0gXCIvXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFyc2VkUmVmLmZyYWdtZW50LnNsaWNlKDEpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnRTY2hlbWEgPSBzY2hlbWFbKDAsIHV0aWxfMS51bmVzY2FwZUZyYWdtZW50KShwYXJ0KV07XG4gICAgICAgIGlmIChwYXJ0U2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNjaGVtYSA9IHBhcnRTY2hlbWE7XG4gICAgICAgIC8vIFRPRE8gUFJFVkVOVF9TQ09QRV9DSEFOR0UgY291bGQgYmUgZGVmaW5lZCBpbiBrZXl3b3JkIGRlZj9cbiAgICAgICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYVt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFLmhhcyhwYXJ0KSAmJiBzY2hJZCkge1xuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBlbnY7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIgJiYgc2NoZW1hLiRyZWYgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgdGhpcy5SVUxFUykpIHtcbiAgICAgICAgY29uc3QgJHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgZW52ID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgIH1cbiAgICAvLyBldmVuIHRob3VnaCByZXNvbHV0aW9uIGZhaWxlZCB3ZSBuZWVkIHRvIHJldHVybiBTY2hlbWFFbnYgdG8gdGhyb3cgZXhjZXB0aW9uXG4gICAgLy8gc28gdGhhdCBjb21waWxlQXN5bmMgbG9hZHMgbWlzc2luZyBzY2hlbWEuXG4gICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgIGVudiA9IGVudiB8fCBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIGlmIChlbnYuc2NoZW1hICE9PSBlbnYucm9vdC5zY2hlbWEpXG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBIRVggPSB7XG4gIDA6IDAsXG4gIDE6IDEsXG4gIDI6IDIsXG4gIDM6IDMsXG4gIDQ6IDQsXG4gIDU6IDUsXG4gIDY6IDYsXG4gIDc6IDcsXG4gIDg6IDgsXG4gIDk6IDksXG4gIGE6IDEwLFxuICBBOiAxMCxcbiAgYjogMTEsXG4gIEI6IDExLFxuICBjOiAxMixcbiAgQzogMTIsXG4gIGQ6IDEzLFxuICBEOiAxMyxcbiAgZTogMTQsXG4gIEU6IDE0LFxuICBmOiAxNSxcbiAgRjogMTVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhFWFxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSEVYIH0gPSByZXF1aXJlKCcuL3Njb3BlZENoYXJzJylcblxuZnVuY3Rpb24gbm9ybWFsaXplSVB2NCAoaG9zdCkge1xuICBpZiAoZmluZFRva2VuKGhvc3QsICcuJykgPCAzKSB7IHJldHVybiB7IGhvc3QsIGlzSVBWNDogZmFsc2UgfSB9XG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC91KSB8fCBbXVxuICBjb25zdCBbYWRkcmVzc10gPSBtYXRjaGVzXG4gIGlmIChhZGRyZXNzKSB7XG4gICAgcmV0dXJuIHsgaG9zdDogc3RyaXBMZWFkaW5nWmVyb3MoYWRkcmVzcywgJy4nKSwgaXNJUFY0OiB0cnVlIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyBob3N0LCBpc0lQVjQ6IGZhbHNlIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGlucHV0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtrZWVwWmVybz1mYWxzZV1cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWQgKGlucHV0LCBrZWVwWmVybyA9IGZhbHNlKSB7XG4gIGxldCBhY2MgPSAnJ1xuICBsZXQgc3RyaXAgPSB0cnVlXG4gIGZvciAoY29uc3QgYyBvZiBpbnB1dCkge1xuICAgIGlmIChIRVhbY10gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChjICE9PSAnMCcgJiYgc3RyaXAgPT09IHRydWUpIHN0cmlwID0gZmFsc2VcbiAgICBpZiAoIXN0cmlwKSBhY2MgKz0gY1xuICB9XG4gIGlmIChrZWVwWmVybyAmJiBhY2MubGVuZ3RoID09PSAwKSBhY2MgPSAnMCdcbiAgcmV0dXJuIGFjY1xufVxuXG5mdW5jdGlvbiBnZXRJUFY2IChpbnB1dCkge1xuICBsZXQgdG9rZW5Db3VudCA9IDBcbiAgY29uc3Qgb3V0cHV0ID0geyBlcnJvcjogZmFsc2UsIGFkZHJlc3M6ICcnLCB6b25lOiAnJyB9XG4gIGNvbnN0IGFkZHJlc3MgPSBbXVxuICBjb25zdCBidWZmZXIgPSBbXVxuICBsZXQgaXNab25lID0gZmFsc2VcbiAgbGV0IGVuZGlwdjZFbmNvdW50ZXJlZCA9IGZhbHNlXG4gIGxldCBlbmRJcHY2ID0gZmFsc2VcblxuICBmdW5jdGlvbiBjb25zdW1lICgpIHtcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgaWYgKGlzWm9uZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgaGV4ID0gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkKGJ1ZmZlcilcbiAgICAgICAgaWYgKGhleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkcmVzcy5wdXNoKGhleClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQuZXJyb3IgPSB0cnVlXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1ZmZlci5sZW5ndGggPSAwXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY3Vyc29yID0gaW5wdXRbaV1cbiAgICBpZiAoY3Vyc29yID09PSAnWycgfHwgY3Vyc29yID09PSAnXScpIHsgY29udGludWUgfVxuICAgIGlmIChjdXJzb3IgPT09ICc6Jykge1xuICAgICAgaWYgKGVuZGlwdjZFbmNvdW50ZXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBlbmRJcHY2ID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKCFjb25zdW1lKCkpIHsgYnJlYWsgfVxuICAgICAgdG9rZW5Db3VudCsrXG4gICAgICBhZGRyZXNzLnB1c2goJzonKVxuICAgICAgaWYgKHRva2VuQ291bnQgPiA3KSB7XG4gICAgICAgIC8vIG5vdCB2YWxpZFxuICAgICAgICBvdXRwdXQuZXJyb3IgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAoaSAtIDEgPj0gMCAmJiBpbnB1dFtpIC0gMV0gPT09ICc6Jykge1xuICAgICAgICBlbmRpcHY2RW5jb3VudGVyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoY3Vyc29yID09PSAnJScpIHtcbiAgICAgIGlmICghY29uc3VtZSgpKSB7IGJyZWFrIH1cbiAgICAgIC8vIHN3aXRjaCB0byB6b25lIGRldGVjdGlvblxuICAgICAgaXNab25lID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIucHVzaChjdXJzb3IpXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgfVxuICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChpc1pvbmUpIHtcbiAgICAgIG91dHB1dC56b25lID0gYnVmZmVyLmpvaW4oJycpXG4gICAgfSBlbHNlIGlmIChlbmRJcHY2KSB7XG4gICAgICBhZGRyZXNzLnB1c2goYnVmZmVyLmpvaW4oJycpKVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzLnB1c2goc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkKGJ1ZmZlcikpXG4gICAgfVxuICB9XG4gIG91dHB1dC5hZGRyZXNzID0gYWRkcmVzcy5qb2luKCcnKVxuICByZXR1cm4gb3V0cHV0XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlQdjYgKGhvc3QsIG9wdHMgPSB7fSkge1xuICBpZiAoZmluZFRva2VuKGhvc3QsICc6JykgPCAyKSB7IHJldHVybiB7IGhvc3QsIGlzSVBWNjogZmFsc2UgfSB9XG4gIGNvbnN0IGlwdjYgPSBnZXRJUFY2KGhvc3QpXG5cbiAgaWYgKCFpcHY2LmVycm9yKSB7XG4gICAgbGV0IG5ld0hvc3QgPSBpcHY2LmFkZHJlc3NcbiAgICBsZXQgZXNjYXBlZEhvc3QgPSBpcHY2LmFkZHJlc3NcbiAgICBpZiAoaXB2Ni56b25lKSB7XG4gICAgICBuZXdIb3N0ICs9ICclJyArIGlwdjYuem9uZVxuICAgICAgZXNjYXBlZEhvc3QgKz0gJyUyNScgKyBpcHY2LnpvbmVcbiAgICB9XG4gICAgcmV0dXJuIHsgaG9zdDogbmV3SG9zdCwgZXNjYXBlZEhvc3QsIGlzSVBWNjogdHJ1ZSB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgaG9zdCwgaXNJUFY2OiBmYWxzZSB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaXBMZWFkaW5nWmVyb3MgKHN0ciwgdG9rZW4pIHtcbiAgbGV0IG91dCA9ICcnXG4gIGxldCBza2lwID0gdHJ1ZVxuICBjb25zdCBsID0gc3RyLmxlbmd0aFxuICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IGMgPSBzdHJbaV1cbiAgICBpZiAoYyA9PT0gJzAnICYmIHNraXApIHtcbiAgICAgIGlmICgoaSArIDEgPD0gbCAmJiBzdHJbaSArIDFdID09PSB0b2tlbikgfHwgaSArIDEgPT09IGwpIHtcbiAgICAgICAgb3V0ICs9IGNcbiAgICAgICAgc2tpcCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjID09PSB0b2tlbikge1xuICAgICAgICBza2lwID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2tpcCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBvdXQgKz0gY1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIGZpbmRUb2tlbiAoc3RyLCB0b2tlbikge1xuICBsZXQgaW5kID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHJbaV0gPT09IHRva2VuKSBpbmQrK1xuICB9XG4gIHJldHVybiBpbmRcbn1cblxuY29uc3QgUkRTMSA9IC9eXFwuXFwuP1xcLy91XG5jb25zdCBSRFMyID0gL15cXC9cXC4oPzpcXC98JCkvdVxuY29uc3QgUkRTMyA9IC9eXFwvXFwuXFwuKD86XFwvfCQpL3VcbmNvbnN0IFJEUzUgPSAvXlxcLz8oPzoufFxcbikqPyg/PVxcL3wkKS91XG5cbmZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzIChpbnB1dCkge1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIHdoaWxlIChpbnB1dC5sZW5ndGgpIHtcbiAgICBpZiAoaW5wdXQubWF0Y2goUkRTMSkpIHtcbiAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMxLCAnJylcbiAgICB9IGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzIpKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMiwgJy8nKVxuICAgIH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMykpIHtcbiAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMzLCAnLycpXG4gICAgICBvdXRwdXQucG9wKClcbiAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAnLicgfHwgaW5wdXQgPT09ICcuLicpIHtcbiAgICAgIGlucHV0ID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW0gPSBpbnB1dC5tYXRjaChSRFM1KVxuICAgICAgaWYgKGltKSB7XG4gICAgICAgIGNvbnN0IHMgPSBpbVswXVxuICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKVxuICAgICAgICBvdXRwdXQucHVzaChzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGRvdCBzZWdtZW50IGNvbmRpdGlvbicpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcgKGNvbXBvbmVudHMsIGVzYykge1xuICBjb25zdCBmdW5jID0gZXNjICE9PSB0cnVlID8gZXNjYXBlIDogdW5lc2NhcGVcbiAgaWYgKGNvbXBvbmVudHMuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnRzLnNjaGVtZSA9IGZ1bmMoY29tcG9uZW50cy5zY2hlbWUpXG4gIH1cbiAgaWYgKGNvbXBvbmVudHMudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudHMudXNlcmluZm8gPSBmdW5jKGNvbXBvbmVudHMudXNlcmluZm8pXG4gIH1cbiAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50cy5ob3N0ID0gZnVuYyhjb21wb25lbnRzLmhvc3QpXG4gIH1cbiAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50cy5wYXRoID0gZnVuYyhjb21wb25lbnRzLnBhdGgpXG4gIH1cbiAgaWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudHMucXVlcnkgPSBmdW5jKGNvbXBvbmVudHMucXVlcnkpXG4gIH1cbiAgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudHMuZnJhZ21lbnQgPSBmdW5jKGNvbXBvbmVudHMuZnJhZ21lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gcmVjb21wb3NlQXV0aG9yaXR5IChjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHVyaVRva2VucyA9IFtdXG5cbiAgaWYgKGNvbXBvbmVudHMudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMudXNlcmluZm8pXG4gICAgdXJpVG9rZW5zLnB1c2goJ0AnKVxuICB9XG5cbiAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGhvc3QgPSB1bmVzY2FwZShjb21wb25lbnRzLmhvc3QpXG4gICAgY29uc3QgaXBWNHJlcyA9IG5vcm1hbGl6ZUlQdjQoaG9zdClcblxuICAgIGlmIChpcFY0cmVzLmlzSVBWNCkge1xuICAgICAgaG9zdCA9IGlwVjRyZXMuaG9zdFxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpcFY2cmVzID0gbm9ybWFsaXplSVB2NihpcFY0cmVzLmhvc3QsIHsgaXNJUFY0OiBmYWxzZSB9KVxuICAgICAgaWYgKGlwVjZyZXMuaXNJUFY2ID09PSB0cnVlKSB7XG4gICAgICAgIGhvc3QgPSBgWyR7aXBWNnJlcy5lc2NhcGVkSG9zdH1dYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaG9zdCA9IGNvbXBvbmVudHMuaG9zdFxuICAgICAgfVxuICAgIH1cbiAgICB1cmlUb2tlbnMucHVzaChob3N0KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnRzLnBvcnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBjb21wb25lbnRzLnBvcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goJzonKVxuICAgIHVyaVRva2Vucy5wdXNoKFN0cmluZyhjb21wb25lbnRzLnBvcnQpKVxuICB9XG5cbiAgcmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbignJykgOiB1bmRlZmluZWRcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWNvbXBvc2VBdXRob3JpdHksXG4gIG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nLFxuICByZW1vdmVEb3RTZWdtZW50cyxcbiAgbm9ybWFsaXplSVB2NCxcbiAgbm9ybWFsaXplSVB2NixcbiAgc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgVVVJRF9SRUcgPSAvXltcXGRhLWZdezh9XFxiLVtcXGRhLWZdezR9XFxiLVtcXGRhLWZdezR9XFxiLVtcXGRhLWZdezR9XFxiLVtcXGRhLWZdezEyfSQvaXVcbmNvbnN0IFVSTl9SRUcgPSAvKFtcXGRhLXpdW1xcZFxcLWEtel17MCwzMX0pOigoPzpbXFx3ISQnKCkqKyxcXC0uOjs9QF18JVtcXGRhLWZdezJ9KSspL2l1XG5cbmZ1bmN0aW9uIGlzU2VjdXJlICh3c0NvbXBvbmVudHMpIHtcbiAgcmV0dXJuIHR5cGVvZiB3c0NvbXBvbmVudHMuc2VjdXJlID09PSAnYm9vbGVhbicgPyB3c0NvbXBvbmVudHMuc2VjdXJlIDogU3RyaW5nKHdzQ29tcG9uZW50cy5zY2hlbWUpLnRvTG93ZXJDYXNlKCkgPT09ICd3c3MnXG59XG5cbmZ1bmN0aW9uIGh0dHBQYXJzZSAoY29tcG9uZW50cykge1xuICBpZiAoIWNvbXBvbmVudHMuaG9zdCkge1xuICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8ICdIVFRQIFVSSXMgbXVzdCBoYXZlIGEgaG9zdC4nXG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBodHRwU2VyaWFsaXplIChjb21wb25lbnRzKSB7XG4gIGNvbnN0IHNlY3VyZSA9IFN0cmluZyhjb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gJ2h0dHBzJ1xuXG4gIC8vIG5vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmIChjb21wb25lbnRzLnBvcnQgPT09IChzZWN1cmUgPyA0NDMgOiA4MCkgfHwgY29tcG9uZW50cy5wb3J0ID09PSAnJykge1xuICAgIGNvbXBvbmVudHMucG9ydCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXG4gIGlmICghY29tcG9uZW50cy5wYXRoKSB7XG4gICAgY29tcG9uZW50cy5wYXRoID0gJy8nXG4gIH1cblxuICAvLyBOT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gIC8vIGFzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuICAvLyBhbmQgbm90IHRoZSBIVFRQIHNwZWMuXG5cbiAgcmV0dXJuIGNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gd3NQYXJzZSAod3NDb21wb25lbnRzKSB7XG4vLyBpbmRpY2F0ZSBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0XG4gIHdzQ29tcG9uZW50cy5zZWN1cmUgPSBpc1NlY3VyZSh3c0NvbXBvbmVudHMpXG5cbiAgLy8gY29uc3RydWN0IHJlc291Y2UgbmFtZVxuICB3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lID0gKHdzQ29tcG9uZW50cy5wYXRoIHx8ICcvJykgKyAod3NDb21wb25lbnRzLnF1ZXJ5ID8gJz8nICsgd3NDb21wb25lbnRzLnF1ZXJ5IDogJycpXG4gIHdzQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkXG4gIHdzQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiB3c0NvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gd3NTZXJpYWxpemUgKHdzQ29tcG9uZW50cykge1xuLy8gbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgaWYgKHdzQ29tcG9uZW50cy5wb3J0ID09PSAoaXNTZWN1cmUod3NDb21wb25lbnRzKSA/IDQ0MyA6IDgwKSB8fCB3c0NvbXBvbmVudHMucG9ydCA9PT0gJycpIHtcbiAgICB3c0NvbXBvbmVudHMucG9ydCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gZW5zdXJlIHNjaGVtZSBtYXRjaGVzIHNlY3VyZSBmbGFnXG4gIGlmICh0eXBlb2Ygd3NDb21wb25lbnRzLnNlY3VyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgd3NDb21wb25lbnRzLnNjaGVtZSA9ICh3c0NvbXBvbmVudHMuc2VjdXJlID8gJ3dzcycgOiAnd3MnKVxuICAgIHdzQ29tcG9uZW50cy5zZWN1cmUgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIHJlY29uc3RydWN0IHBhdGggZnJvbSByZXNvdXJjZSBuYW1lXG4gIGlmICh3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lKSB7XG4gICAgY29uc3QgW3BhdGgsIHF1ZXJ5XSA9IHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUuc3BsaXQoJz8nKVxuICAgIHdzQ29tcG9uZW50cy5wYXRoID0gKHBhdGggJiYgcGF0aCAhPT0gJy8nID8gcGF0aCA6IHVuZGVmaW5lZClcbiAgICB3c0NvbXBvbmVudHMucXVlcnkgPSBxdWVyeVxuICAgIHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIGZvcmJpZCBmcmFnbWVudCBjb21wb25lbnRcbiAgd3NDb21wb25lbnRzLmZyYWdtZW50ID0gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHdzQ29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiB1cm5QYXJzZSAodXJuQ29tcG9uZW50cywgb3B0aW9ucykge1xuICBpZiAoIXVybkNvbXBvbmVudHMucGF0aCkge1xuICAgIHVybkNvbXBvbmVudHMuZXJyb3IgPSAnVVJOIGNhbiBub3QgYmUgcGFyc2VkJ1xuICAgIHJldHVybiB1cm5Db21wb25lbnRzXG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHVybkNvbXBvbmVudHMucGF0aC5tYXRjaChVUk5fUkVHKVxuICBpZiAobWF0Y2hlcykge1xuICAgIGNvbnN0IHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudHMuc2NoZW1lIHx8ICd1cm4nXG4gICAgdXJuQ29tcG9uZW50cy5uaWQgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKClcbiAgICB1cm5Db21wb25lbnRzLm5zcyA9IG1hdGNoZXNbMl1cbiAgICBjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgdXJuQ29tcG9uZW50cy5uaWR9YFxuICAgIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV1cbiAgICB1cm5Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWRcblxuICAgIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgICB1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5wYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB1cm5Db21wb25lbnRzLmVycm9yID0gdXJuQ29tcG9uZW50cy5lcnJvciB8fCAnVVJOIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuXG4gIHJldHVybiB1cm5Db21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIHVyblNlcmlhbGl6ZSAodXJuQ29tcG9uZW50cywgb3B0aW9ucykge1xuICBjb25zdCBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCAndXJuJ1xuICBjb25zdCBuaWQgPSB1cm5Db21wb25lbnRzLm5pZC50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHVyblNjaGVtZSA9IGAke3NjaGVtZX06JHtvcHRpb25zLm5pZCB8fCBuaWR9YFxuICBjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1t1cm5TY2hlbWVdXG5cbiAgaWYgKHNjaGVtZUhhbmRsZXIpIHtcbiAgICB1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50cywgb3B0aW9ucylcbiAgfVxuXG4gIGNvbnN0IHVyaUNvbXBvbmVudHMgPSB1cm5Db21wb25lbnRzXG4gIGNvbnN0IG5zcyA9IHVybkNvbXBvbmVudHMubnNzXG4gIHVyaUNvbXBvbmVudHMucGF0aCA9IGAke25pZCB8fCBvcHRpb25zLm5pZH06JHtuc3N9YFxuXG4gIG9wdGlvbnMuc2tpcEVzY2FwZSA9IHRydWVcbiAgcmV0dXJuIHVyaUNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gdXJudXVpZFBhcnNlICh1cm5Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHV1aWRDb21wb25lbnRzID0gdXJuQ29tcG9uZW50c1xuICB1dWlkQ29tcG9uZW50cy51dWlkID0gdXVpZENvbXBvbmVudHMubnNzXG4gIHV1aWRDb21wb25lbnRzLm5zcyA9IHVuZGVmaW5lZFxuXG4gIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiAoIXV1aWRDb21wb25lbnRzLnV1aWQgfHwgIVVVSURfUkVHLnRlc3QodXVpZENvbXBvbmVudHMudXVpZCkpKSB7XG4gICAgdXVpZENvbXBvbmVudHMuZXJyb3IgPSB1dWlkQ29tcG9uZW50cy5lcnJvciB8fCAnVVVJRCBpcyBub3QgdmFsaWQuJ1xuICB9XG5cbiAgcmV0dXJuIHV1aWRDb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIHVybnV1aWRTZXJpYWxpemUgKHV1aWRDb21wb25lbnRzKSB7XG4gIGNvbnN0IHVybkNvbXBvbmVudHMgPSB1dWlkQ29tcG9uZW50c1xuICAvLyBub3JtYWxpemUgVVVJRFxuICB1cm5Db21wb25lbnRzLm5zcyA9ICh1dWlkQ29tcG9uZW50cy51dWlkIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiB1cm5Db21wb25lbnRzXG59XG5cbmNvbnN0IGh0dHAgPSB7XG4gIHNjaGVtZTogJ2h0dHAnLFxuICBkb21haW5Ib3N0OiB0cnVlLFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn1cblxuY29uc3QgaHR0cHMgPSB7XG4gIHNjaGVtZTogJ2h0dHBzJyxcbiAgZG9tYWluSG9zdDogaHR0cC5kb21haW5Ib3N0LFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn1cblxuY29uc3Qgd3MgPSB7XG4gIHNjaGVtZTogJ3dzJyxcbiAgZG9tYWluSG9zdDogdHJ1ZSxcbiAgcGFyc2U6IHdzUGFyc2UsXG4gIHNlcmlhbGl6ZTogd3NTZXJpYWxpemVcbn1cblxuY29uc3Qgd3NzID0ge1xuICBzY2hlbWU6ICd3c3MnLFxuICBkb21haW5Ib3N0OiB3cy5kb21haW5Ib3N0LFxuICBwYXJzZTogd3MucGFyc2UsXG4gIHNlcmlhbGl6ZTogd3Muc2VyaWFsaXplXG59XG5cbmNvbnN0IHVybiA9IHtcbiAgc2NoZW1lOiAndXJuJyxcbiAgcGFyc2U6IHVyblBhcnNlLFxuICBzZXJpYWxpemU6IHVyblNlcmlhbGl6ZSxcbiAgc2tpcE5vcm1hbGl6ZTogdHJ1ZVxufVxuXG5jb25zdCB1cm51dWlkID0ge1xuICBzY2hlbWU6ICd1cm46dXVpZCcsXG4gIHBhcnNlOiB1cm51dWlkUGFyc2UsXG4gIHNlcmlhbGl6ZTogdXJudXVpZFNlcmlhbGl6ZSxcbiAgc2tpcE5vcm1hbGl6ZTogdHJ1ZVxufVxuXG5jb25zdCBTQ0hFTUVTID0ge1xuICBodHRwLFxuICBodHRwcyxcbiAgd3MsXG4gIHdzcyxcbiAgdXJuLFxuICAndXJuOnV1aWQnOiB1cm51dWlkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU0NIRU1FU1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbm9ybWFsaXplSVB2Niwgbm9ybWFsaXplSVB2NCwgcmVtb3ZlRG90U2VnbWVudHMsIHJlY29tcG9zZUF1dGhvcml0eSwgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4vbGliL3V0aWxzJylcbmNvbnN0IFNDSEVNRVMgPSByZXF1aXJlKCcuL2xpYi9zY2hlbWVzJylcblxuZnVuY3Rpb24gbm9ybWFsaXplICh1cmksIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpID0gc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaSA9PT0gJ29iamVjdCcpIHtcbiAgICB1cmkgPSBwYXJzZShzZXJpYWxpemUodXJpLCBvcHRpb25zKSwgb3B0aW9ucylcbiAgfVxuICByZXR1cm4gdXJpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmUgKGJhc2VVUkksIHJlbGF0aXZlVVJJLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNjaGVtZWxlc3NPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IHNjaGVtZTogJ251bGwnIH0sIG9wdGlvbnMpXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNvbXBvbmVudHMocGFyc2UoYmFzZVVSSSwgc2NoZW1lbGVzc09wdGlvbnMpLCBwYXJzZShyZWxhdGl2ZVVSSSwgc2NoZW1lbGVzc09wdGlvbnMpLCBzY2hlbWVsZXNzT3B0aW9ucywgdHJ1ZSlcbiAgcmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlZCwgeyAuLi5zY2hlbWVsZXNzT3B0aW9ucywgc2tpcEVzY2FwZTogdHJ1ZSB9KVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50cyAoYmFzZSwgcmVsYXRpdmUsIG9wdGlvbnMsIHNraXBOb3JtYWxpemF0aW9uKSB7XG4gIGNvbnN0IHRhcmdldCA9IHt9XG4gIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICBiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgYmFzZSBjb21wb25lbnRzXG4gICAgcmVsYXRpdmUgPSBwYXJzZShzZXJpYWxpemUocmVsYXRpdmUsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgcmVsYXRpdmUgY29tcG9uZW50c1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmIHJlbGF0aXZlLnNjaGVtZSkge1xuICAgIHRhcmdldC5zY2hlbWUgPSByZWxhdGl2ZS5zY2hlbWVcbiAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgIHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvXG4gICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0XG4gICAgdGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0XG4gICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8ICcnKVxuICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJlbGF0aXZlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICAgIHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvXG4gICAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3RcbiAgICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydFxuICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8ICcnKVxuICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFyZWxhdGl2ZS5wYXRoKSB7XG4gICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoXG4gICAgICAgIGlmIChyZWxhdGl2ZS5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXQucXVlcnkgPSBiYXNlLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZWxhdGl2ZS5wYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoYmFzZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IGJhc2UuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IGJhc2UucG9ydCAhPT0gdW5kZWZpbmVkKSAmJiAhYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9ICcvJyArIHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICB9XG4gICAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvXG4gICAgICB0YXJnZXQuaG9zdCA9IGJhc2UuaG9zdFxuICAgICAgdGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnRcbiAgICB9XG4gICAgdGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lXG4gIH1cblxuICB0YXJnZXQuZnJhZ21lbnQgPSByZWxhdGl2ZS5mcmFnbWVudFxuXG4gIHJldHVybiB0YXJnZXRcbn1cblxuZnVuY3Rpb24gZXF1YWwgKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmlBID09PSAnc3RyaW5nJykge1xuICAgIHVyaUEgPSB1bmVzY2FwZSh1cmlBKVxuICAgIHVyaUEgPSBzZXJpYWxpemUobm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcocGFyc2UodXJpQSwgb3B0aW9ucyksIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpQSA9PT0gJ29iamVjdCcpIHtcbiAgICB1cmlBID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHVyaUEsIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgdXJpQiA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlCID0gdW5lc2NhcGUodXJpQilcbiAgICB1cmlCID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaUIgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpQiA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyh1cmlCLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4gdXJpQS50b0xvd2VyQ2FzZSgpID09PSB1cmlCLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplIChjbXB0cywgb3B0cykge1xuICBjb25zdCBjb21wb25lbnRzID0ge1xuICAgIGhvc3Q6IGNtcHRzLmhvc3QsXG4gICAgc2NoZW1lOiBjbXB0cy5zY2hlbWUsXG4gICAgdXNlcmluZm86IGNtcHRzLnVzZXJpbmZvLFxuICAgIHBvcnQ6IGNtcHRzLnBvcnQsXG4gICAgcGF0aDogY21wdHMucGF0aCxcbiAgICBxdWVyeTogY21wdHMucXVlcnksXG4gICAgbmlkOiBjbXB0cy5uaWQsXG4gICAgbnNzOiBjbXB0cy5uc3MsXG4gICAgdXVpZDogY21wdHMudXVpZCxcbiAgICBmcmFnbWVudDogY21wdHMuZnJhZ21lbnQsXG4gICAgcmVmZXJlbmNlOiBjbXB0cy5yZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VOYW1lOiBjbXB0cy5yZXNvdXJjZU5hbWUsXG4gICAgc2VjdXJlOiBjbXB0cy5zZWN1cmUsXG4gICAgZXJyb3I6ICcnXG4gIH1cbiAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdHMpXG4gIGNvbnN0IHVyaVRva2VucyA9IFtdXG5cbiAgLy8gZmluZCBzY2hlbWUgaGFuZGxlclxuICBjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1sob3B0aW9ucy5zY2hlbWUgfHwgY29tcG9uZW50cy5zY2hlbWUgfHwgJycpLnRvTG93ZXJDYXNlKCldXG5cbiAgLy8gcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50cywgb3B0aW9ucylcblxuICBpZiAoY29tcG9uZW50cy5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIW9wdGlvbnMuc2tpcEVzY2FwZSkge1xuICAgICAgY29tcG9uZW50cy5wYXRoID0gZXNjYXBlKGNvbXBvbmVudHMucGF0aClcblxuICAgICAgaWYgKGNvbXBvbmVudHMuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29tcG9uZW50cy5wYXRoID0gY29tcG9uZW50cy5wYXRoLnNwbGl0KCclM0EnKS5qb2luKCc6JylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50cy5wYXRoID0gdW5lc2NhcGUoY29tcG9uZW50cy5wYXRoKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcgJiYgY29tcG9uZW50cy5zY2hlbWUpIHtcbiAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnNjaGVtZSwgJzonKVxuICB9XG5cbiAgY29uc3QgYXV0aG9yaXR5ID0gcmVjb21wb3NlQXV0aG9yaXR5KGNvbXBvbmVudHMsIG9wdGlvbnMpXG4gIGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvLycpXG4gICAgfVxuXG4gICAgdXJpVG9rZW5zLnB1c2goYXV0aG9yaXR5KVxuXG4gICAgaWYgKGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGguY2hhckF0KDApICE9PSAnLycpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvJylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHMgPSBjb21wb25lbnRzLnBhdGhcblxuICAgIGlmICghb3B0aW9ucy5hYnNvbHV0ZVBhdGggJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLmFic29sdXRlUGF0aCkpIHtcbiAgICAgIHMgPSByZW1vdmVEb3RTZWdtZW50cyhzKVxuICAgIH1cblxuICAgIGlmIChhdXRob3JpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcyA9IHMucmVwbGFjZSgvXlxcL1xcLy91LCAnLyUyRicpIC8vIGRvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgfVxuXG4gICAgdXJpVG9rZW5zLnB1c2gocylcbiAgfVxuXG4gIGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnPycsIGNvbXBvbmVudHMucXVlcnkpXG4gIH1cblxuICBpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goJyMnLCBjb21wb25lbnRzLmZyYWdtZW50KVxuICB9XG4gIHJldHVybiB1cmlUb2tlbnMuam9pbignJylcbn1cblxuY29uc3QgaGV4TG9va1VwID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTI3IH0sICh2LCBrKSA9PiAvW14hXCIkJicoKSorLFxcLS47PV9gYS16e31+XS91LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShrKSkpXG5cbmZ1bmN0aW9uIG5vblNpbXBsZURvbWFpbiAodmFsdWUpIHtcbiAgbGV0IGNvZGUgPSAwXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpXG4gICAgaWYgKGNvZGUgPiAxMjYgfHwgaGV4TG9va1VwW2NvZGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW14jLzo/XSspOik/KD86XFwvXFwvKCg/OihbXiMvP0BdKilAKT8oXFxbW14jLz9cXF1dK1xcXXxbXiMvOj9dKikoPzo6KFxcZCopKT8pKT8oW14jP10qKSg/OlxcPyhbXiNdKikpPyg/OiMoKD86LnxbXFxuXFxyXSkqKSk/L3VcblxuZnVuY3Rpb24gcGFyc2UgKHVyaSwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgY29uc3QgcGFyc2VkID0ge1xuICAgIHNjaGVtZTogdW5kZWZpbmVkLFxuICAgIHVzZXJpbmZvOiB1bmRlZmluZWQsXG4gICAgaG9zdDogJycsXG4gICAgcG9ydDogdW5kZWZpbmVkLFxuICAgIHBhdGg6ICcnLFxuICAgIHF1ZXJ5OiB1bmRlZmluZWQsXG4gICAgZnJhZ21lbnQ6IHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGdvdEVuY29kaW5nID0gdXJpLmluZGV4T2YoJyUnKSAhPT0gLTFcbiAgbGV0IGlzSVAgPSBmYWxzZVxuICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgPT09ICdzdWZmaXgnKSB1cmkgPSAob3B0aW9ucy5zY2hlbWUgPyBvcHRpb25zLnNjaGVtZSArICc6JyA6ICcnKSArICcvLycgKyB1cmlcblxuICBjb25zdCBtYXRjaGVzID0gdXJpLm1hdGNoKFVSSV9QQVJTRSlcblxuICBpZiAobWF0Y2hlcykge1xuICAgIC8vIHN0b3JlIGVhY2ggY29tcG9uZW50XG4gICAgcGFyc2VkLnNjaGVtZSA9IG1hdGNoZXNbMV1cbiAgICBwYXJzZWQudXNlcmluZm8gPSBtYXRjaGVzWzNdXG4gICAgcGFyc2VkLmhvc3QgPSBtYXRjaGVzWzRdXG4gICAgcGFyc2VkLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMClcbiAgICBwYXJzZWQucGF0aCA9IG1hdGNoZXNbNl0gfHwgJydcbiAgICBwYXJzZWQucXVlcnkgPSBtYXRjaGVzWzddXG4gICAgcGFyc2VkLmZyYWdtZW50ID0gbWF0Y2hlc1s4XVxuXG4gICAgLy8gZml4IHBvcnQgbnVtYmVyXG4gICAgaWYgKGlzTmFOKHBhcnNlZC5wb3J0KSkge1xuICAgICAgcGFyc2VkLnBvcnQgPSBtYXRjaGVzWzVdXG4gICAgfVxuICAgIGlmIChwYXJzZWQuaG9zdCkge1xuICAgICAgY29uc3QgaXB2NHJlc3VsdCA9IG5vcm1hbGl6ZUlQdjQocGFyc2VkLmhvc3QpXG4gICAgICBpZiAoaXB2NHJlc3VsdC5pc0lQVjQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGlwdjZyZXN1bHQgPSBub3JtYWxpemVJUHY2KGlwdjRyZXN1bHQuaG9zdCwgeyBpc0lQVjQ6IGZhbHNlIH0pXG4gICAgICAgIHBhcnNlZC5ob3N0ID0gaXB2NnJlc3VsdC5ob3N0LnRvTG93ZXJDYXNlKClcbiAgICAgICAgaXNJUCA9IGlwdjZyZXN1bHQuaXNJUFY2XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQuaG9zdCA9IGlwdjRyZXN1bHQuaG9zdFxuICAgICAgICBpc0lQID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyc2VkLnNjaGVtZSA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC51c2VyaW5mbyA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC5ob3N0ID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLnBvcnQgPT09IHVuZGVmaW5lZCAmJiAhcGFyc2VkLnBhdGggJiYgcGFyc2VkLnF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAnc2FtZS1kb2N1bWVudCdcbiAgICB9IGVsc2UgaWYgKHBhcnNlZC5zY2hlbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICdyZWxhdGl2ZSdcbiAgICB9IGVsc2UgaWYgKHBhcnNlZC5mcmFnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ2Fic29sdXRlJ1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ3VyaSdcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgcmVmZXJlbmNlIGVycm9yc1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IHBhcnNlZC5yZWZlcmVuY2UpIHtcbiAgICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCAnVVJJIGlzIG5vdCBhICcgKyBvcHRpb25zLnJlZmVyZW5jZSArICcgcmVmZXJlbmNlLidcbiAgICB9XG5cbiAgICAvLyBmaW5kIHNjaGVtZSBoYW5kbGVyXG4gICAgY29uc3Qgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IHBhcnNlZC5zY2hlbWUgfHwgJycpLnRvTG93ZXJDYXNlKCldXG5cbiAgICAvLyBjaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcbiAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgLy8gaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgaWYgKHBhcnNlZC5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkgJiYgaXNJUCA9PT0gZmFsc2UgJiYgbm9uU2ltcGxlRG9tYWluKHBhcnNlZC5ob3N0KSkge1xuICAgICAgICAvLyBjb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gVVJMLmRvbWFpblRvQVNDSUkocGFyc2VkLmhvc3QudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSTogXCIgKyBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnZlcnQgSVJJIC0+IFVSSVxuICAgIH1cblxuICAgIGlmICghc2NoZW1lSGFuZGxlciB8fCAoc2NoZW1lSGFuZGxlciAmJiAhc2NoZW1lSGFuZGxlci5za2lwTm9ybWFsaXplKSkge1xuICAgICAgaWYgKGdvdEVuY29kaW5nICYmIHBhcnNlZC5zY2hlbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJzZWQuc2NoZW1lID0gdW5lc2NhcGUocGFyc2VkLnNjaGVtZSlcbiAgICAgIH1cbiAgICAgIGlmIChnb3RFbmNvZGluZyAmJiBwYXJzZWQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhcnNlZC5ob3N0ID0gdW5lc2NhcGUocGFyc2VkLmhvc3QpXG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLnBhdGggIT09IHVuZGVmaW5lZCAmJiBwYXJzZWQucGF0aC5sZW5ndGgpIHtcbiAgICAgICAgcGFyc2VkLnBhdGggPSBlc2NhcGUodW5lc2NhcGUocGFyc2VkLnBhdGgpKVxuICAgICAgfVxuICAgICAgaWYgKHBhcnNlZC5mcmFnbWVudCAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZC5mcmFnbWVudC5sZW5ndGgpIHtcbiAgICAgICAgcGFyc2VkLmZyYWdtZW50ID0gZW5jb2RlVVJJKGRlY29kZVVSSUNvbXBvbmVudChwYXJzZWQuZnJhZ21lbnQpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHBhcnNpbmdcbiAgICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnBhcnNlKSB7XG4gICAgICBzY2hlbWVIYW5kbGVyLnBhcnNlKHBhcnNlZCwgb3B0aW9ucylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkLmVycm9yID0gcGFyc2VkLmVycm9yIHx8ICdVUkkgY2FuIG5vdCBiZSBwYXJzZWQuJ1xuICB9XG4gIHJldHVybiBwYXJzZWRcbn1cblxuY29uc3QgZmFzdFVyaSA9IHtcbiAgU0NIRU1FUyxcbiAgbm9ybWFsaXplLFxuICByZXNvbHZlLFxuICByZXNvbHZlQ29tcG9uZW50cyxcbiAgZXF1YWwsXG4gIHNlcmlhbGl6ZSxcbiAgcGFyc2Vcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYXN0VXJpXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZmFzdFVyaVxubW9kdWxlLmV4cG9ydHMuZmFzdFVyaSA9IGZhc3RVcmlcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXJpID0gcmVxdWlyZShcImZhc3QtdXJpXCIpO1xudXJpLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdXJpXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gdXJpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJpLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gdm9pZCAwO1xudmFyIHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2V5d29yZEN4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVfMS5LZXl3b3JkQ3h0OyB9IH0pO1xudmFyIGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLk5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2RlR2VuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuQ29kZUdlbjsgfSB9KTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKTtcbmNvbnN0IHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCBydWxlc18xID0gcmVxdWlyZShcIi4vY29tcGlsZS9ydWxlc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGVcIik7XG5jb25zdCBjb2RlZ2VuXzIgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3Jlc29sdmVcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZS9kYXRhVHlwZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0ICRkYXRhUmVmU2NoZW1hID0gcmVxdWlyZShcIi4vcmVmcy9kYXRhLmpzb25cIik7XG5jb25zdCB1cmlfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWUvdXJpXCIpO1xuY29uc3QgZGVmYXVsdFJlZ0V4cCA9IChzdHIsIGZsYWdzKSA9PiBuZXcgUmVnRXhwKHN0ciwgZmxhZ3MpO1xuZGVmYXVsdFJlZ0V4cC5jb2RlID0gXCJuZXcgUmVnRXhwXCI7XG5jb25zdCBNRVRBX0lHTk9SRV9PUFRJT05TID0gW1wicmVtb3ZlQWRkaXRpb25hbFwiLCBcInVzZURlZmF1bHRzXCIsIFwiY29lcmNlVHlwZXNcIl07XG5jb25zdCBFWFRfU0NPUEVfTkFNRVMgPSBuZXcgU2V0KFtcbiAgICBcInZhbGlkYXRlXCIsXG4gICAgXCJzZXJpYWxpemVcIixcbiAgICBcInBhcnNlXCIsXG4gICAgXCJ3cmFwcGVyXCIsXG4gICAgXCJyb290XCIsXG4gICAgXCJzY2hlbWFcIixcbiAgICBcImtleXdvcmRcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcImZvcm1hdHNcIixcbiAgICBcInZhbGlkYXRlJGRhdGFcIixcbiAgICBcImZ1bmNcIixcbiAgICBcIm9ialwiLFxuICAgIFwiRXJyb3JcIixcbl0pO1xuY29uc3QgcmVtb3ZlZE9wdGlvbnMgPSB7XG4gICAgZXJyb3JEYXRhUGF0aDogXCJcIixcbiAgICBmb3JtYXQ6IFwiYHZhbGlkYXRlRm9ybWF0czogZmFsc2VgIGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgbnVsbGFibGU6ICdcIm51bGxhYmxlXCIga2V5d29yZCBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4nLFxuICAgIGpzb25Qb2ludGVyczogXCJEZXByZWNhdGVkIGpzUHJvcGVydHlTeW50YXggY2FuIGJlIHVzZWQgaW5zdGVhZC5cIixcbiAgICBleHRlbmRSZWZzOiBcIkRlcHJlY2F0ZWQgaWdub3JlS2V5d29yZHNXaXRoUmVmIGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgbWlzc2luZ1JlZnM6IFwiUGFzcyBlbXB0eSBzY2hlbWEgd2l0aCAkaWQgdGhhdCBzaG91bGQgYmUgaWdub3JlZCB0byBhanYuYWRkU2NoZW1hLlwiLFxuICAgIHByb2Nlc3NDb2RlOiBcIlVzZSBvcHRpb24gYGNvZGU6IHtwcm9jZXNzOiAoY29kZSwgc2NoZW1hRW52OiBvYmplY3QpID0+IHN0cmluZ31gXCIsXG4gICAgc291cmNlQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7c291cmNlOiB0cnVlfWBcIixcbiAgICBzdHJpY3REZWZhdWx0czogXCJJdCBpcyBkZWZhdWx0IG5vdywgc2VlIG9wdGlvbiBgc3RyaWN0YC5cIixcbiAgICBzdHJpY3RLZXl3b3JkczogXCJJdCBpcyBkZWZhdWx0IG5vdywgc2VlIG9wdGlvbiBgc3RyaWN0YC5cIixcbiAgICB1bmlxdWVJdGVtczogJ1widW5pcXVlSXRlbXNcIiBrZXl3b3JkIGlzIGFsd2F5cyB2YWxpZGF0ZWQuJyxcbiAgICB1bmtub3duRm9ybWF0czogXCJEaXNhYmxlIHN0cmljdCBtb2RlIG9yIHBhc3MgYHRydWVgIHRvIGBhanYuYWRkRm9ybWF0YCAob3IgYGZvcm1hdHNgIG9wdGlvbikuXCIsXG4gICAgY2FjaGU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIHNlcmlhbGl6ZTogXCJNYXAgaXMgdXNlZCBhcyBjYWNoZSwgc2NoZW1hIG9iamVjdCBhcyBrZXkuXCIsXG4gICAgYWp2RXJyb3JzOiBcIkl0IGlzIGRlZmF1bHQgbm93LlwiLFxufTtcbmNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0ge1xuICAgIGlnbm9yZUtleXdvcmRzV2l0aFJlZjogXCJcIixcbiAgICBqc1Byb3BlcnR5U3ludGF4OiBcIlwiLFxuICAgIHVuaWNvZGU6ICdcIm1pbkxlbmd0aFwiL1wibWF4TGVuZ3RoXCIgYWNjb3VudCBmb3IgdW5pY29kZSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQuJyxcbn07XG5jb25zdCBNQVhfRVhQUkVTU0lPTiA9IDIwMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiByZXF1aXJlZE9wdGlvbnMobykge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tLCBfbywgX3AsIF9xLCBfciwgX3MsIF90LCBfdSwgX3YsIF93LCBfeCwgX3ksIF96LCBfMDtcbiAgICBjb25zdCBzID0gby5zdHJpY3Q7XG4gICAgY29uc3QgX29wdHogPSAoX2EgPSBvLmNvZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZTtcbiAgICBjb25zdCBvcHRpbWl6ZSA9IF9vcHR6ID09PSB0cnVlIHx8IF9vcHR6ID09PSB1bmRlZmluZWQgPyAxIDogX29wdHogfHwgMDtcbiAgICBjb25zdCByZWdFeHAgPSAoX2MgPSAoX2IgPSBvLmNvZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZWdFeHApICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRSZWdFeHA7XG4gICAgY29uc3QgdXJpUmVzb2x2ZXIgPSAoX2QgPSBvLnVyaVJlc29sdmVyKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB1cmlfMS5kZWZhdWx0O1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0cmljdFNjaGVtYTogKF9mID0gKF9lID0gby5zdHJpY3RTY2hlbWEpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IHMpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IHRydWUsXG4gICAgICAgIHN0cmljdE51bWJlcnM6IChfaCA9IChfZyA9IG8uc3RyaWN0TnVtYmVycykgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogcykgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogdHJ1ZSxcbiAgICAgICAgc3RyaWN0VHlwZXM6IChfayA9IChfaiA9IG8uc3RyaWN0VHlwZXMpICE9PSBudWxsICYmIF9qICE9PSB2b2lkIDAgPyBfaiA6IHMpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IFwibG9nXCIsXG4gICAgICAgIHN0cmljdFR1cGxlczogKF9tID0gKF9sID0gby5zdHJpY3RUdXBsZXMpICE9PSBudWxsICYmIF9sICE9PSB2b2lkIDAgPyBfbCA6IHMpICE9PSBudWxsICYmIF9tICE9PSB2b2lkIDAgPyBfbSA6IFwibG9nXCIsXG4gICAgICAgIHN0cmljdFJlcXVpcmVkOiAoX3AgPSAoX28gPSBvLnN0cmljdFJlcXVpcmVkKSAhPT0gbnVsbCAmJiBfbyAhPT0gdm9pZCAwID8gX28gOiBzKSAhPT0gbnVsbCAmJiBfcCAhPT0gdm9pZCAwID8gX3AgOiBmYWxzZSxcbiAgICAgICAgY29kZTogby5jb2RlID8geyAuLi5vLmNvZGUsIG9wdGltaXplLCByZWdFeHAgfSA6IHsgb3B0aW1pemUsIHJlZ0V4cCB9LFxuICAgICAgICBsb29wUmVxdWlyZWQ6IChfcSA9IG8ubG9vcFJlcXVpcmVkKSAhPT0gbnVsbCAmJiBfcSAhPT0gdm9pZCAwID8gX3EgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbG9vcEVudW06IChfciA9IG8ubG9vcEVudW0pICE9PSBudWxsICYmIF9yICE9PSB2b2lkIDAgPyBfciA6IE1BWF9FWFBSRVNTSU9OLFxuICAgICAgICBtZXRhOiAoX3MgPSBvLm1ldGEpICE9PSBudWxsICYmIF9zICE9PSB2b2lkIDAgPyBfcyA6IHRydWUsXG4gICAgICAgIG1lc3NhZ2VzOiAoX3QgPSBvLm1lc3NhZ2VzKSAhPT0gbnVsbCAmJiBfdCAhPT0gdm9pZCAwID8gX3QgOiB0cnVlLFxuICAgICAgICBpbmxpbmVSZWZzOiAoX3UgPSBvLmlubGluZVJlZnMpICE9PSBudWxsICYmIF91ICE9PSB2b2lkIDAgPyBfdSA6IHRydWUsXG4gICAgICAgIHNjaGVtYUlkOiAoX3YgPSBvLnNjaGVtYUlkKSAhPT0gbnVsbCAmJiBfdiAhPT0gdm9pZCAwID8gX3YgOiBcIiRpZFwiLFxuICAgICAgICBhZGRVc2VkU2NoZW1hOiAoX3cgPSBvLmFkZFVzZWRTY2hlbWEpICE9PSBudWxsICYmIF93ICE9PSB2b2lkIDAgPyBfdyA6IHRydWUsXG4gICAgICAgIHZhbGlkYXRlU2NoZW1hOiAoX3ggPSBvLnZhbGlkYXRlU2NoZW1hKSAhPT0gbnVsbCAmJiBfeCAhPT0gdm9pZCAwID8gX3ggOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZUZvcm1hdHM6IChfeSA9IG8udmFsaWRhdGVGb3JtYXRzKSAhPT0gbnVsbCAmJiBfeSAhPT0gdm9pZCAwID8gX3kgOiB0cnVlLFxuICAgICAgICB1bmljb2RlUmVnRXhwOiAoX3ogPSBvLnVuaWNvZGVSZWdFeHApICE9PSBudWxsICYmIF96ICE9PSB2b2lkIDAgPyBfeiA6IHRydWUsXG4gICAgICAgIGludDMycmFuZ2U6IChfMCA9IG8uaW50MzJyYW5nZSkgIT09IG51bGwgJiYgXzAgIT09IHZvaWQgMCA/IF8wIDogdHJ1ZSxcbiAgICAgICAgdXJpUmVzb2x2ZXI6IHVyaVJlc29sdmVyLFxuICAgIH07XG59XG5jbGFzcyBBanYge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgICAgICB0aGlzLnNjaGVtYXMgPSB7fTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZm9ybWF0cyA9IHt9O1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIG9wdHMgPSB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIC4uLnJlcXVpcmVkT3B0aW9ucyhvcHRzKSB9O1xuICAgICAgICBjb25zdCB7IGVzNSwgbGluZXMgfSA9IHRoaXMub3B0cy5jb2RlO1xuICAgICAgICB0aGlzLnNjb3BlID0gbmV3IGNvZGVnZW5fMi5WYWx1ZVNjb3BlKHsgc2NvcGU6IHt9LCBwcmVmaXhlczogRVhUX1NDT1BFX05BTUVTLCBlczUsIGxpbmVzIH0pO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IGdldExvZ2dlcihvcHRzLmxvZ2dlcik7XG4gICAgICAgIGNvbnN0IGZvcm1hdE9wdCA9IG9wdHMudmFsaWRhdGVGb3JtYXRzO1xuICAgICAgICBvcHRzLnZhbGlkYXRlRm9ybWF0cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLlJVTEVTID0gKDAsIHJ1bGVzXzEuZ2V0UnVsZXMpKCk7XG4gICAgICAgIGNoZWNrT3B0aW9ucy5jYWxsKHRoaXMsIHJlbW92ZWRPcHRpb25zLCBvcHRzLCBcIk5PVCBTVVBQT1JURURcIik7XG4gICAgICAgIGNoZWNrT3B0aW9ucy5jYWxsKHRoaXMsIGRlcHJlY2F0ZWRPcHRpb25zLCBvcHRzLCBcIkRFUFJFQ0FURURcIiwgXCJ3YXJuXCIpO1xuICAgICAgICB0aGlzLl9tZXRhT3B0cyA9IGdldE1ldGFTY2hlbWFPcHRpb25zLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChvcHRzLmZvcm1hdHMpXG4gICAgICAgICAgICBhZGRJbml0aWFsRm9ybWF0cy5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLl9hZGRWb2NhYnVsYXJpZXMoKTtcbiAgICAgICAgdGhpcy5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKG9wdHMua2V5d29yZHMpXG4gICAgICAgICAgICBhZGRJbml0aWFsS2V5d29yZHMuY2FsbCh0aGlzLCBvcHRzLmtleXdvcmRzKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLm1ldGEgPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShvcHRzLm1ldGEpO1xuICAgICAgICBhZGRJbml0aWFsU2NoZW1hcy5jYWxsKHRoaXMpO1xuICAgICAgICBvcHRzLnZhbGlkYXRlRm9ybWF0cyA9IGZvcm1hdE9wdDtcbiAgICB9XG4gICAgX2FkZFZvY2FidWxhcmllcygpIHtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKFwiJGFzeW5jXCIpO1xuICAgIH1cbiAgICBfYWRkRGVmYXVsdE1ldGFTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IHsgJGRhdGEsIG1ldGEsIHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGxldCBfZGF0YVJlZlNjaGVtYSA9ICRkYXRhUmVmU2NoZW1hO1xuICAgICAgICBpZiAoc2NoZW1hSWQgPT09IFwiaWRcIikge1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEgPSB7IC4uLiRkYXRhUmVmU2NoZW1hIH07XG4gICAgICAgICAgICBfZGF0YVJlZlNjaGVtYS5pZCA9IF9kYXRhUmVmU2NoZW1hLiRpZDtcbiAgICAgICAgICAgIGRlbGV0ZSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGEgJiYgJGRhdGEpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEoX2RhdGFSZWZTY2hlbWEsIF9kYXRhUmVmU2NoZW1hW3NjaGVtYUlkXSwgZmFsc2UpO1xuICAgIH1cbiAgICBkZWZhdWx0TWV0YSgpIHtcbiAgICAgICAgY29uc3QgeyBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09IFwib2JqZWN0XCIgPyBtZXRhW3NjaGVtYUlkXSB8fCBtZXRhIDogdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdmFsaWRhdGUoc2NoZW1hS2V5UmVmLCAvLyBrZXksIHJlZiBvciBzY2hlbWEgb2JqZWN0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbiAgICBkYXRhIC8vIHRvIGJlIHZhbGlkYXRlZFxuICAgICkge1xuICAgICAgICBsZXQgdjtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFLZXlSZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdiA9IHRoaXMuZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICBpZiAoIXYpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBzY2hlbWEgd2l0aCBrZXkgb3IgcmVmIFwiJHtzY2hlbWFLZXlSZWZ9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmNvbXBpbGUoc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHYoZGF0YSk7XG4gICAgICAgIGlmICghKFwiJGFzeW5jXCIgaW4gdikpXG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IHYuZXJyb3JzO1xuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuICAgIGNvbXBpbGUoc2NoZW1hLCBfbWV0YSkge1xuICAgICAgICBjb25zdCBzY2ggPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIGNvbXBpbGVBc3luYyhzY2hlbWEsIG1ldGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMubG9hZFNjaGVtYSAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMubG9hZFNjaGVtYSBzaG91bGQgYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGxvYWRTY2hlbWEgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuIHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHNjaGVtYSwgbWV0YSk7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbXBpbGVBc3luYyhfc2NoZW1hLCBfbWV0YSkge1xuICAgICAgICAgICAgYXdhaXQgbG9hZE1ldGFTY2hlbWEuY2FsbCh0aGlzLCBfc2NoZW1hLiRzY2hlbWEpO1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKF9zY2hlbWEsIF9tZXRhKTtcbiAgICAgICAgICAgIHJldHVybiBzY2gudmFsaWRhdGUgfHwgX2NvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1ldGFTY2hlbWEoJHJlZikge1xuICAgICAgICAgICAgaWYgKCRyZWYgJiYgIXRoaXMuZ2V0U2NoZW1hKCRyZWYpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcnVuQ29tcGlsZUFzeW5jLmNhbGwodGhpcywgeyAkcmVmIH0sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIF9jb21waWxlQXN5bmMoc2NoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiByZWZfZXJyb3JfMS5kZWZhdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZC5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRNaXNzaW5nU2NoZW1hLmNhbGwodGhpcywgZS5taXNzaW5nU2NoZW1hKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoeyBtaXNzaW5nU2NoZW1hOiByZWYsIG1pc3NpbmdSZWYgfSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVmc1tyZWZdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbnlTY2hlbWEgJHtyZWZ9IGlzIGxvYWRlZCBidXQgJHttaXNzaW5nUmVmfSBjYW5ub3QgYmUgcmVzb2x2ZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBsb2FkTWlzc2luZ1NjaGVtYShyZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IF9zY2hlbWEgPSBhd2FpdCBfbG9hZFNjaGVtYS5jYWxsKHRoaXMsIHJlZik7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZWZzW3JlZl0pXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoX3NjaGVtYSwgcmVmLCBtZXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfbG9hZFNjaGVtYShyZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICBpZiAocClcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICh0aGlzLl9sb2FkaW5nW3JlZl0gPSBsb2FkU2NoZW1hKHJlZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xvYWRpbmdbcmVmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGRzIHNjaGVtYSB0byB0aGUgaW5zdGFuY2VcbiAgICBhZGRTY2hlbWEoc2NoZW1hLCAvLyBJZiBhcnJheSBpcyBwYXNzZWQsIGBrZXlgIHdpbGwgYmUgaWdub3JlZFxuICAgIGtleSwgLy8gT3B0aW9uYWwgc2NoZW1hIGtleS4gQ2FuIGJlIHBhc3NlZCB0byBgdmFsaWRhdGVgIG1ldGhvZCBpbnN0ZWFkIG9mIHNjaGVtYSBvYmplY3Qgb3IgaWQvcmVmLiBPbmUgc2NoZW1hIHBlciBpbnN0YW5jZSBjYW4gaGF2ZSBlbXB0eSBgaWRgIGFuZCBga2V5YC5cbiAgICBfbWV0YSwgLy8gdHJ1ZSBpZiBzY2hlbWEgaXMgYSBtZXRhLXNjaGVtYS4gVXNlZCBpbnRlcm5hbGx5LCBhZGRNZXRhU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAgX3ZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hIC8vIGZhbHNlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAgKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoIG9mIHNjaGVtYSlcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShzY2gsIHVuZGVmaW5lZCwgX21ldGEsIF92YWxpZGF0ZVNjaGVtYSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBpZCA9IHNjaGVtYVtzY2hlbWFJZF07XG4gICAgICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hICR7c2NoZW1hSWR9IG11c3QgYmUgc3RyaW5nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5IHx8IGlkKTtcbiAgICAgICAgdGhpcy5fY2hlY2tVbmlxdWUoa2V5KTtcbiAgICAgICAgdGhpcy5zY2hlbWFzW2tleV0gPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfbWV0YSwga2V5LCBfdmFsaWRhdGVTY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIHNjaGVtYSB0aGF0IHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBvdGhlciBzY2hlbWFzXG4gICAgLy8gb3B0aW9ucyBpbiBNRVRBX0lHTk9SRV9PUFRJT05TIGFyZSBhbHdheSBzZXQgdG8gZmFsc2VcbiAgICBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCAvLyBzY2hlbWEga2V5XG4gICAgX3ZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hIC8vIGZhbHNlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24sIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHZhbGlkYXRlU2NoZW1hIG9wdGlvbiBmb3IgbWV0YS1zY2hlbWFcbiAgICApIHtcbiAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoZW1hLCBrZXksIHRydWUsIF92YWxpZGF0ZVNjaGVtYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyAgVmFsaWRhdGUgc2NoZW1hIGFnYWluc3QgaXRzIG1ldGEtc2NoZW1hXG4gICAgdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0ICRzY2hlbWE7XG4gICAgICAgICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYTtcbiAgICAgICAgaWYgKCRzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJHNjaGVtYSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIkc2NoZW1hIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgJHNjaGVtYSA9ICRzY2hlbWEgfHwgdGhpcy5vcHRzLmRlZmF1bHRNZXRhIHx8IHRoaXMuZGVmYXVsdE1ldGEoKTtcbiAgICAgICAgaWYgKCEkc2NoZW1hKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwibWV0YS1zY2hlbWEgbm90IGF2YWlsYWJsZVwiKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZSgkc2NoZW1hLCBzY2hlbWEpO1xuICAgICAgICBpZiAoIXZhbGlkICYmIHRocm93T3JMb2dFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFwic2NoZW1hIGlzIGludmFsaWQ6IFwiICsgdGhpcy5lcnJvcnNUZXh0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hID09PSBcImxvZ1wiKVxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuICAgIC8vIEdldCBjb21waWxlZCBzY2hlbWEgYnkgYGtleWAgb3IgYHJlZmAuXG4gICAgLy8gKGBrZXlgIHRoYXQgd2FzIHBhc3NlZCB0byBgYWRkU2NoZW1hYCBvciBmdWxsIHNjaGVtYSByZWZlcmVuY2UgLSBgc2NoZW1hLiRpZGAgb3IgcmVzb2x2ZWQgaWQpXG4gICAgZ2V0U2NoZW1hKGtleVJlZikge1xuICAgICAgICBsZXQgc2NoO1xuICAgICAgICB3aGlsZSAodHlwZW9mIChzY2ggPSBnZXRTY2hFbnYuY2FsbCh0aGlzLCBrZXlSZWYpKSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAga2V5UmVmID0gc2NoO1xuICAgICAgICBpZiAoc2NoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYToge30sIHNjaGVtYUlkIH0pO1xuICAgICAgICAgICAgc2NoID0gY29tcGlsZV8xLnJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCBrZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCFzY2gpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2tleVJlZl0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChzY2gudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpKTtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gICAgLy8gSWYgbm8gcGFyYW1ldGVyIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyBidXQgbWV0YS1zY2hlbWFzIGFyZSByZW1vdmVkLlxuICAgIC8vIElmIFJlZ0V4cCBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgd2l0aCBrZXkvaWQgbWF0Y2hpbmcgcGF0dGVybiBidXQgbWV0YS1zY2hlbWFzIGFyZSByZW1vdmVkLlxuICAgIC8vIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAgICByZW1vdmVTY2hlbWEoc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgIGlmIChzY2hlbWFLZXlSZWYgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5zY2hlbWFzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnJlZnMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFLZXlSZWYpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnJlZnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2ggPSBnZXRTY2hFbnYuY2FsbCh0aGlzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShzY2guc2NoZW1hKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW3NjaGVtYUtleVJlZl07XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBzY2hlbWFLZXlSZWY7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgICBsZXQgaWQgPSBzY2hlbWFLZXlSZWZbdGhpcy5vcHRzLnNjaGVtYUlkXTtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShpZCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjaGVtYXNbaWRdO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZWZzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdi5yZW1vdmVTY2hlbWE6IGludmFsaWQgcGFyYW1ldGVyXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBcInZvY2FidWxhcnlcIiAtIGEgY29sbGVjdGlvbiBvZiBrZXl3b3Jkc1xuICAgIGFkZFZvY2FidWxhcnkoZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBkZWYgb2YgZGVmaW5pdGlvbnMpXG4gICAgICAgICAgICB0aGlzLmFkZEtleXdvcmQoZGVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFkZEtleXdvcmQoa3dkT3JEZWYsIGRlZiAvLyBkZXByZWNhdGVkXG4gICAgKSB7XG4gICAgICAgIGxldCBrZXl3b3JkO1xuICAgICAgICBpZiAodHlwZW9mIGt3ZE9yRGVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGtleXdvcmQgPSBrd2RPckRlZjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwidGhlc2UgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCwgc2VlIGRvY3MgZm9yIGFkZEtleXdvcmRcIik7XG4gICAgICAgICAgICAgICAgZGVmLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcIm9iamVjdFwiICYmIGRlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWYgPSBrd2RPckRlZjtcbiAgICAgICAgICAgIGtleXdvcmQgPSBkZWYua2V5d29yZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleXdvcmQpICYmICFrZXl3b3JkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFkZEtleXdvcmRzOiBrZXl3b3JkIG11c3QgYmUgc3RyaW5nIG9yIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgYWRkS2V5d29yZHMgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0tleXdvcmQuY2FsbCh0aGlzLCBrZXl3b3JkLCBkZWYpO1xuICAgICAgICBpZiAoIWRlZikge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4gYWRkUnVsZS5jYWxsKHRoaXMsIGt3ZCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAga2V5d29yZE1ldGFzY2hlbWEuY2FsbCh0aGlzLCBkZWYpO1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgLi4uZGVmLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYudHlwZSksXG4gICAgICAgICAgICBzY2hlbWFUeXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZi5zY2hlbWFUeXBlKSxcbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgZGVmaW5pdGlvbi50eXBlLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgPyAoaykgPT4gYWRkUnVsZS5jYWxsKHRoaXMsIGssIGRlZmluaXRpb24pXG4gICAgICAgICAgICA6IChrKSA9PiBkZWZpbml0aW9uLnR5cGUuZm9yRWFjaCgodCkgPT4gYWRkUnVsZS5jYWxsKHRoaXMsIGssIGRlZmluaXRpb24sIHQpKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXRLZXl3b3JkKGtleXdvcmQpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuUlVMRVMuYWxsW2tleXdvcmRdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJ1bGUgPT0gXCJvYmplY3RcIiA/IHJ1bGUuZGVmaW5pdGlvbiA6ICEhcnVsZTtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGtleXdvcmRcbiAgICByZW1vdmVLZXl3b3JkKGtleXdvcmQpIHtcbiAgICAgICAgLy8gVE9ETyByZXR1cm4gdHlwZSBzaG91bGQgYmUgQWp2XG4gICAgICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXTtcbiAgICAgICAgZGVsZXRlIFJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgaSA9IGdyb3VwLnJ1bGVzLmZpbmRJbmRleCgocnVsZSkgPT4gcnVsZS5rZXl3b3JkID09PSBrZXl3b3JkKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgZ3JvdXAucnVsZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBBZGQgZm9ybWF0XG4gICAgYWRkRm9ybWF0KG5hbWUsIGZvcm1hdCkge1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgZm9ybWF0ID0gbmV3IFJlZ0V4cChmb3JtYXQpO1xuICAgICAgICB0aGlzLmZvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlcnJvcnNUZXh0KGVycm9ycyA9IHRoaXMuZXJyb3JzLCAvLyBvcHRpb25hbCBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yc1xuICAgIHsgc2VwYXJhdG9yID0gXCIsIFwiLCBkYXRhVmFyID0gXCJkYXRhXCIgfSA9IHt9IC8vIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmBcbiAgICApIHtcbiAgICAgICAgaWYgKCFlcnJvcnMgfHwgZXJyb3JzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBcIk5vIGVycm9yc1wiO1xuICAgICAgICByZXR1cm4gZXJyb3JzXG4gICAgICAgICAgICAubWFwKChlKSA9PiBgJHtkYXRhVmFyfSR7ZS5pbnN0YW5jZVBhdGh9ICR7ZS5tZXNzYWdlfWApXG4gICAgICAgICAgICAucmVkdWNlKCh0ZXh0LCBtc2cpID0+IHRleHQgKyBzZXBhcmF0b3IgKyBtc2cpO1xuICAgIH1cbiAgICAkZGF0YU1ldGFTY2hlbWEobWV0YVNjaGVtYSwga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLlJVTEVTLmFsbDtcbiAgICAgICAgbWV0YVNjaGVtYSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobWV0YVNjaGVtYSkpO1xuICAgICAgICBmb3IgKGNvbnN0IGpzb25Qb2ludGVyIG9mIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IGpzb25Qb2ludGVyLnNwbGl0KFwiL1wiKS5zbGljZSgxKTsgLy8gZmlyc3Qgc2VnbWVudCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICAgIGxldCBrZXl3b3JkcyA9IG1ldGFTY2hlbWE7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdtZW50cylcbiAgICAgICAgICAgICAgICBrZXl3b3JkcyA9IGtleXdvcmRzW3NlZ107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBydWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZSAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7ICRkYXRhIH0gPSBydWxlLmRlZmluaXRpb247XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0ga2V5d29yZHNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoJGRhdGEgJiYgc2NoZW1hKVxuICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkc1trZXldID0gc2NoZW1hT3JEYXRhKHNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGFTY2hlbWE7XG4gICAgfVxuICAgIF9yZW1vdmVBbGxTY2hlbWFzKHNjaGVtYXMsIHJlZ2V4KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5UmVmIGluIHNjaGVtYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgIGlmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2ggJiYgIXNjaC5tZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShzY2guc2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2FkZFNjaGVtYShzY2hlbWEsIG1ldGEsIGJhc2VJZCwgdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEsIGFkZFNjaGVtYSA9IHRoaXMub3B0cy5hZGRVc2VkU2NoZW1hKSB7XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZCA9IHNjaGVtYVtzY2hlbWFJZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLmp0ZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3RcIik7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hICE9IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjaGVtYSBtdXN0IGJlIG9iamVjdCBvciBib29sZWFuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzY2ggPSB0aGlzLl9jYWNoZS5nZXQoc2NoZW1hKTtcbiAgICAgICAgaWYgKHNjaCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHNjaDtcbiAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQgfHwgYmFzZUlkKTtcbiAgICAgICAgY29uc3QgbG9jYWxSZWZzID0gcmVzb2x2ZV8xLmdldFNjaGVtYVJlZnMuY2FsbCh0aGlzLCBzY2hlbWEsIGJhc2VJZCk7XG4gICAgICAgIHNjaCA9IG5ldyBjb21waWxlXzEuU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgbWV0YSwgYmFzZUlkLCBsb2NhbFJlZnMgfSk7XG4gICAgICAgIHRoaXMuX2NhY2hlLnNldChzY2guc2NoZW1hLCBzY2gpO1xuICAgICAgICBpZiAoYWRkU2NoZW1hICYmICFiYXNlSWQuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gYXRtIGl0IGlzIGFsbG93ZWQgdG8gb3ZlcndyaXRlIHNjaGVtYXMgd2l0aG91dCBpZCAoaW5zdGVhZCBvZiBub3QgYWRkaW5nIHRoZW0pXG4gICAgICAgICAgICBpZiAoYmFzZUlkKVxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGJhc2VJZCk7XG4gICAgICAgICAgICB0aGlzLnJlZnNbYmFzZUlkXSA9IHNjaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRhdGVTY2hlbWEpXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxuICAgIF9jaGVja1VuaXF1ZShpZCkge1xuICAgICAgICBpZiAodGhpcy5zY2hlbWFzW2lkXSB8fCB0aGlzLnJlZnNbaWRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSB3aXRoIGtleSBvciBpZCBcIiR7aWR9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY29tcGlsZVNjaGVtYUVudihzY2gpIHtcbiAgICAgICAgaWYgKHNjaC5tZXRhKVxuICAgICAgICAgICAgdGhpcy5fY29tcGlsZU1ldGFTY2hlbWEoc2NoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY29tcGlsZV8xLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFzY2gudmFsaWRhdGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIHJldHVybiBzY2gudmFsaWRhdGU7XG4gICAgfVxuICAgIF9jb21waWxlTWV0YVNjaGVtYShzY2gpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE9wdHMgPSB0aGlzLm9wdHM7XG4gICAgICAgIHRoaXMub3B0cyA9IHRoaXMuX21ldGFPcHRzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29tcGlsZV8xLmNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5vcHRzID0gY3VycmVudE9wdHM7XG4gICAgICAgIH1cbiAgICB9XG59XG5BanYuVmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGlvbl9lcnJvcl8xLmRlZmF1bHQ7XG5BanYuTWlzc2luZ1JlZkVycm9yID0gcmVmX2Vycm9yXzEuZGVmYXVsdDtcbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbmZ1bmN0aW9uIGNoZWNrT3B0aW9ucyhjaGVja09wdHMsIG9wdGlvbnMsIG1zZywgbG9nID0gXCJlcnJvclwiKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY2hlY2tPcHRzKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IGtleTtcbiAgICAgICAgaWYgKG9wdCBpbiBvcHRpb25zKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXJbbG9nXShgJHttc2d9OiBvcHRpb24gJHtrZXl9LiAke2NoZWNrT3B0c1tvcHRdfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFNjaEVudihrZXlSZWYpIHtcbiAgICBrZXlSZWYgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShrZXlSZWYpOyAvLyBUT0RPIHRlc3RzIGZhaWwgd2l0aG91dCB0aGlzIGxpbmVcbiAgICByZXR1cm4gdGhpcy5zY2hlbWFzW2tleVJlZl0gfHwgdGhpcy5yZWZzW2tleVJlZl07XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsU2NoZW1hcygpIHtcbiAgICBjb25zdCBvcHRzU2NoZW1hcyA9IHRoaXMub3B0cy5zY2hlbWFzO1xuICAgIGlmICghb3B0c1NjaGVtYXMpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzU2NoZW1hcykpXG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzKTtcbiAgICBlbHNlXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9wdHNTY2hlbWFzKVxuICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxGb3JtYXRzKCkge1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLm9wdHMuZm9ybWF0cykge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLm9wdHMuZm9ybWF0c1tuYW1lXTtcbiAgICAgICAgaWYgKGZvcm1hdClcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybWF0KG5hbWUsIGZvcm1hdCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkSW5pdGlhbEtleXdvcmRzKGRlZnMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICB0aGlzLmFkZFZvY2FidWxhcnkoZGVmcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2dnZXIud2FybihcImtleXdvcmRzIG9wdGlvbiBhcyBtYXAgaXMgZGVwcmVjYXRlZCwgcGFzcyBhcnJheVwiKTtcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgaW4gZGVmcykge1xuICAgICAgICBjb25zdCBkZWYgPSBkZWZzW2tleXdvcmRdO1xuICAgICAgICBpZiAoIWRlZi5rZXl3b3JkKVxuICAgICAgICAgICAgZGVmLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmFkZEtleXdvcmQoZGVmKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNZXRhU2NoZW1hT3B0aW9ucygpIHtcbiAgICBjb25zdCBtZXRhT3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG4gICAgZm9yIChjb25zdCBvcHQgb2YgTUVUQV9JR05PUkVfT1BUSU9OUylcbiAgICAgICAgZGVsZXRlIG1ldGFPcHRzW29wdF07XG4gICAgcmV0dXJuIG1ldGFPcHRzO1xufVxuY29uc3Qgbm9Mb2dzID0geyBsb2coKSB7IH0sIHdhcm4oKSB7IH0sIGVycm9yKCkgeyB9IH07XG5mdW5jdGlvbiBnZXRMb2dnZXIobG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlciA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBub0xvZ3M7XG4gICAgaWYgKGxvZ2dlciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gY29uc29sZTtcbiAgICBpZiAobG9nZ2VyLmxvZyAmJiBsb2dnZXIud2FybiAmJiBsb2dnZXIuZXJyb3IpXG4gICAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibG9nZ2VyIG11c3QgaW1wbGVtZW50IGxvZywgd2FybiBhbmQgZXJyb3IgbWV0aG9kc1wiKTtcbn1cbmNvbnN0IEtFWVdPUkRfTkFNRSA9IC9eW2Etel8kXVthLXowLTlfJDotXSokL2k7XG5mdW5jdGlvbiBjaGVja0tleXdvcmQoa2V5d29yZCwgZGVmKSB7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCAoa3dkKSA9PiB7XG4gICAgICAgIGlmIChSVUxFUy5rZXl3b3Jkc1trd2RdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXl3b3JkICR7a3dkfSBpcyBhbHJlYWR5IGRlZmluZWRgKTtcbiAgICAgICAgaWYgKCFLRVlXT1JEX05BTUUudGVzdChrd2QpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXl3b3JkICR7a3dkfSBoYXMgaW52YWxpZCBuYW1lYCk7XG4gICAgfSk7XG4gICAgaWYgKCFkZWYpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVmLiRkYXRhICYmICEoXCJjb2RlXCIgaW4gZGVmIHx8IFwidmFsaWRhdGVcIiBpbiBkZWYpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignJGRhdGEga2V5d29yZCBtdXN0IGhhdmUgXCJjb2RlXCIgb3IgXCJ2YWxpZGF0ZVwiIGZ1bmN0aW9uJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkUnVsZShrZXl3b3JkLCBkZWZpbml0aW9uLCBkYXRhVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBwb3N0ID0gZGVmaW5pdGlvbiA9PT0gbnVsbCB8fCBkZWZpbml0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWZpbml0aW9uLnBvc3Q7XG4gICAgaWYgKGRhdGFUeXBlICYmIHBvc3QpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5d29yZCB3aXRoIFwicG9zdFwiIGZsYWcgY2Fubm90IGhhdmUgXCJ0eXBlXCInKTtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgIGxldCBydWxlR3JvdXAgPSBwb3N0ID8gUlVMRVMucG9zdCA6IFJVTEVTLnJ1bGVzLmZpbmQoKHsgdHlwZTogdCB9KSA9PiB0ID09PSBkYXRhVHlwZSk7XG4gICAgaWYgKCFydWxlR3JvdXApIHtcbiAgICAgICAgcnVsZUdyb3VwID0geyB0eXBlOiBkYXRhVHlwZSwgcnVsZXM6IFtdIH07XG4gICAgICAgIFJVTEVTLnJ1bGVzLnB1c2gocnVsZUdyb3VwKTtcbiAgICB9XG4gICAgUlVMRVMua2V5d29yZHNba2V5d29yZF0gPSB0cnVlO1xuICAgIGlmICghZGVmaW5pdGlvbilcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGtleXdvcmQsXG4gICAgICAgIGRlZmluaXRpb246IHtcbiAgICAgICAgICAgIC4uLmRlZmluaXRpb24sXG4gICAgICAgICAgICB0eXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZmluaXRpb24udHlwZSksXG4gICAgICAgICAgICBzY2hlbWFUeXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZmluaXRpb24uc2NoZW1hVHlwZSksXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoZGVmaW5pdGlvbi5iZWZvcmUpXG4gICAgICAgIGFkZEJlZm9yZVJ1bGUuY2FsbCh0aGlzLCBydWxlR3JvdXAsIHJ1bGUsIGRlZmluaXRpb24uYmVmb3JlKTtcbiAgICBlbHNlXG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgIFJVTEVTLmFsbFtrZXl3b3JkXSA9IHJ1bGU7XG4gICAgKF9hID0gZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9yRWFjaCgoa3dkKSA9PiB0aGlzLmFkZEtleXdvcmQoa3dkKSk7XG59XG5mdW5jdGlvbiBhZGRCZWZvcmVSdWxlKHJ1bGVHcm91cCwgcnVsZSwgYmVmb3JlKSB7XG4gICAgY29uc3QgaSA9IHJ1bGVHcm91cC5ydWxlcy5maW5kSW5kZXgoKF9ydWxlKSA9PiBfcnVsZS5rZXl3b3JkID09PSBiZWZvcmUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnNwbGljZShpLCAwLCBydWxlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBydWxlICR7YmVmb3JlfSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGtleXdvcmRNZXRhc2NoZW1hKGRlZikge1xuICAgIGxldCB7IG1ldGFTY2hlbWEgfSA9IGRlZjtcbiAgICBpZiAobWV0YVNjaGVtYSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiB0aGlzLm9wdHMuJGRhdGEpXG4gICAgICAgIG1ldGFTY2hlbWEgPSBzY2hlbWFPckRhdGEobWV0YVNjaGVtYSk7XG4gICAgZGVmLnZhbGlkYXRlU2NoZW1hID0gdGhpcy5jb21waWxlKG1ldGFTY2hlbWEsIHRydWUpO1xufVxuY29uc3QgJGRhdGFSZWYgPSB7XG4gICAgJHJlZjogXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWp2LXZhbGlkYXRvci9hanYvbWFzdGVyL2xpYi9yZWZzL2RhdGEuanNvbiNcIixcbn07XG5mdW5jdGlvbiBzY2hlbWFPckRhdGEoc2NoZW1hKSB7XG4gICAgcmV0dXJuIHsgYW55T2Y6IFtzY2hlbWEsICRkYXRhUmVmXSB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlkXCIsXG4gICAgY29kZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOT1QgU1VQUE9SVEVEOiBrZXl3b3JkIFwiaWRcIiwgdXNlIFwiJGlkXCIgZm9yIHNjaGVtYSBJRCcpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbGxSZWYgPSBleHBvcnRzLmdldFZhbGlkYXRlID0gdm9pZCAwO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkcmVmXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hOiAkcmVmLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGJhc2VJZCwgc2NoZW1hRW52OiBlbnYsIHZhbGlkYXRlTmFtZSwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHsgcm9vdCB9ID0gZW52O1xuICAgICAgICBpZiAoKCRyZWYgPT09IFwiI1wiIHx8ICRyZWYgPT09IFwiIy9cIikgJiYgYmFzZUlkID09PSByb290LmJhc2VJZClcbiAgICAgICAgICAgIHJldHVybiBjYWxsUm9vdFJlZigpO1xuICAgICAgICBjb25zdCBzY2hPckVudiA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoc2VsZiwgcm9vdCwgYmFzZUlkLCAkcmVmKTtcbiAgICAgICAgaWYgKHNjaE9yRW52ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgcmVmX2Vycm9yXzEuZGVmYXVsdChpdC5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxWYWxpZGF0ZShzY2hPckVudik7XG4gICAgICAgIHJldHVybiBpbmxpbmVSZWZTY2hlbWEoc2NoT3JFbnYpO1xuICAgICAgICBmdW5jdGlvbiBjYWxsUm9vdFJlZigpIHtcbiAgICAgICAgICAgIGlmIChlbnYgPT09IHJvb3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCB2YWxpZGF0ZU5hbWUsIGVudiwgZW52LiRhc3luYyk7XG4gICAgICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogcm9vdCB9KTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsUmVmKGN4dCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtyb290TmFtZX0udmFsaWRhdGVgLCByb290LCByb290LiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FsbFZhbGlkYXRlKHNjaCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IGdldFZhbGlkYXRlKGN4dCwgc2NoKTtcbiAgICAgICAgICAgIGNhbGxSZWYoY3h0LCB2LCBzY2gsIHNjaC4kYXN5bmMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlubGluZVJlZlNjaGVtYShzY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCBvcHRzLmNvZGUuc291cmNlID09PSB0cnVlID8geyByZWY6IHNjaCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaCkgfSA6IHsgcmVmOiBzY2ggfSk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgICAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hOYW1lLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6ICRyZWYsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldFZhbGlkYXRlKGN4dCwgc2NoKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlXG4gICAgICAgID8gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZVwiLCB7IHJlZjogc2NoLnZhbGlkYXRlIH0pXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtnZW4uc2NvcGVWYWx1ZShcIndyYXBwZXJcIiwgeyByZWY6IHNjaCB9KX0udmFsaWRhdGVgO1xufVxuZXhwb3J0cy5nZXRWYWxpZGF0ZSA9IGdldFZhbGlkYXRlO1xuZnVuY3Rpb24gY2FsbFJlZihjeHQsIHYsIHNjaCwgJGFzeW5jKSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBhbGxFcnJvcnMsIHNjaGVtYUVudjogZW52LCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBwYXNzQ3h0ID0gb3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogY29kZWdlbl8xLm5pbDtcbiAgICBpZiAoJGFzeW5jKVxuICAgICAgICBjYWxsQXN5bmNSZWYoKTtcbiAgICBlbHNlXG4gICAgICAgIGNhbGxTeW5jUmVmKCk7XG4gICAgZnVuY3Rpb24gY2FsbEFzeW5jUmVmKCkge1xuICAgICAgICBpZiAoIWVudi4kYXN5bmMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgIGdlbi50cnkoKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCl9YCk7XG4gICAgICAgICAgICBhZGRFdmFsdWF0ZWRGcm9tKHYpOyAvLyBUT0RPIHdpbGwgbm90IHdvcmsgd2l0aCBhc3luYywgaXQgaGFzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIHJlc3VsdFxuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgISgke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KWAsICgpID0+IGdlbi50aHJvdyhlKSk7XG4gICAgICAgICAgICBhZGRFcnJvcnNGcm9tKGUpO1xuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFN5bmNSZWYoKSB7XG4gICAgICAgIGN4dC5yZXN1bHQoKDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHYsIHBhc3NDeHQpLCAoKSA9PiBhZGRFdmFsdWF0ZWRGcm9tKHYpLCAoKSA9PiBhZGRFcnJvcnNGcm9tKHYpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXJyb3JzRnJvbShzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgZXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKTsgLy8gVE9ETyB0YWdnZWRcbiAgICAgICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXZhbHVhdGVkRnJvbShzb3VyY2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaEV2YWx1YXRlZCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC52YWxpZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2YWx1YXRlZDtcbiAgICAgICAgLy8gVE9ETyByZWZhY3RvclxuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hFdmFsdWF0ZWQucHJvcHMsIGl0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLnByb3BzYCk7XG4gICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBwcm9wcywgaXQucHJvcHMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hFdmFsdWF0ZWQuaXRlbXMsIGl0Lml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGdlbi52YXIoXCJpdGVtc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLml0ZW1zYCk7XG4gICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBpdGVtcywgaXQuaXRlbXMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2FsbFJlZiA9IGNhbGxSZWY7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWYuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpZF8xID0gcmVxdWlyZShcIi4vaWRcIik7XG5jb25zdCByZWZfMSA9IHJlcXVpcmUoXCIuL3JlZlwiKTtcbmNvbnN0IGNvcmUgPSBbXG4gICAgXCIkc2NoZW1hXCIsXG4gICAgXCIkaWRcIixcbiAgICBcIiRkZWZzXCIsXG4gICAgXCIkdm9jYWJ1bGFyeVwiLFxuICAgIHsga2V5d29yZDogXCIkY29tbWVudFwiIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuICAgIGlkXzEuZGVmYXVsdCxcbiAgICByZWZfMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNvcmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBtYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBtaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7S1dEc1trZXl3b3JkXS5mYWlsfSAke3NjaGVtYUNvZGV9IHx8IGlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdE51bWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBiZSBtdWx0aXBsZSBvZiAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge211bHRpcGxlT2Y6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBjb25zdCBiZHQgPSBiYWQkRGF0YVR5cGUoc2NoZW1hQ29kZSwgPHN0cmluZz5kZWYuc2NoZW1hVHlwZSwgJGRhdGEpXG4gICAgICAgIGNvbnN0IHByZWMgPSBpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb247XG4gICAgICAgIGNvbnN0IHJlcyA9IGdlbi5sZXQoXCJyZXNcIik7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBwcmVjXG4gICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYE1hdGguYWJzKE1hdGgucm91bmQoJHtyZXN9KSAtICR7cmVzfSkgPiAxZS0ke3ByZWN9YFxuICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke3Jlc30gIT09IHBhcnNlSW50KCR7cmVzfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCgke3NjaGVtYUNvZGV9ID09PSAwIHx8ICgke3Jlc30gPSAke2RhdGF9LyR7c2NoZW1hQ29kZX0sICR7aW52YWxpZH0pKWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlwbGVPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvcHVueWNvZGUuanMgLSBwdW55Y29kZS51Y3MyLmRlY29kZVxuZnVuY3Rpb24gdWNzMmxlbmd0aChzdHIpIHtcbiAgICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoO1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGxldCB2YWx1ZTtcbiAgICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgICAgIGxlbmd0aCsrO1xuICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcysrKTtcbiAgICAgICAgaWYgKHZhbHVlID49IDB4ZDgwMCAmJiB2YWx1ZSA8PSAweGRiZmYgJiYgcG9zIDwgbGVuKSB7XG4gICAgICAgICAgICAvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgICAgICAgIGlmICgodmFsdWUgJiAweGZjMDApID09PSAweGRjMDApXG4gICAgICAgICAgICAgICAgcG9zKys7IC8vIGxvdyBzdXJyb2dhdGVcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gdWNzMmxlbmd0aDtcbnVjczJsZW5ndGguY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91Y3MybGVuZ3RoXCIpLmRlZmF1bHQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dWNzMmxlbmd0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdWNzMmxlbmd0aF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvdWNzMmxlbmd0aFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBjaGFyYWN0ZXJzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4TGVuZ3RoXCIsIFwibWluTGVuZ3RoXCJdLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhMZW5ndGhcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjb25zdCBsZW4gPSBpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGN4dC5nZW4sIHVjczJsZW5ndGhfMS5kZWZhdWx0KX0oJHtkYXRhfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdExlbmd0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBUT0RPIHJlZ2V4cCBzaG91bGQgYmUgd3JhcHBlZCBpbiB0cnkvY2F0Y2hzXG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9ICRkYXRhID8gKDAsIGNvZGVnZW5fMS5fKSBgKG5ldyBSZWdFeHAoJHtzY2hlbWFDb2RlfSwgJHt1fSkpYCA6ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCEke3JlZ0V4cH0udGVzdCgke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IHByb3BlcnRpZXNgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwibWluUHJvcGVydGllc1wiXSxcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhQcm9wZXJ0aWVzXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3Qua2V5cygke2RhdGF9KS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRQcm9wZXJ0aWVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJHttaXNzaW5nUHJvcGVydHl9J2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge21pc3NpbmdQcm9wZXJ0eTogJHttaXNzaW5nUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicmVxdWlyZWRcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBzY2hlbWFDb2RlLCBkYXRhLCAkZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzIH0gPSBpdDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiBzY2hlbWEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB1c2VMb29wID0gc2NoZW1hLmxlbmd0aCA+PSBvcHRzLmxvb3BSZXF1aXJlZDtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycylcbiAgICAgICAgICAgIGFsbEVycm9yc01vZGUoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZXhpdE9uRXJyb3JNb2RlKCk7XG4gICAgICAgIGlmIChvcHRzLnN0cmljdFJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGN4dC5wYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmaW5lZFByb3BlcnRpZXMgfSA9IGN4dC5pdDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWlyZWRLZXkgb2Ygc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKChwcm9wcyA9PT0gbnVsbCB8fCBwcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcHNbcmVxdWlyZWRLZXldKSA9PT0gdW5kZWZpbmVkICYmICFkZWZpbmVkUHJvcGVydGllcy5oYXMocmVxdWlyZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSBpdC5zY2hlbWFFbnYuYmFzZUlkICsgaXQuZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYHJlcXVpcmVkIHByb3BlcnR5IFwiJHtyZXF1aXJlZEtleX1cIiBpcyBub3QgZGVmaW5lZCBhdCBcIiR7c2NoZW1hUGF0aH1cIiAoc3RyaWN0UmVxdWlyZWQpYDtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0UmVxdWlyZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbGxFcnJvcnNNb2RlKCkge1xuICAgICAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjeHQuYmxvY2skZGF0YShjb2RlZ2VuXzEubmlsLCBsb29wQWxsUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4aXRPbkVycm9yTW9kZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pc3NpbmcgPSBnZW4ubGV0KFwibWlzc2luZ1wiKTtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsICgpID0+IGxvb3BVbnRpbE1pc3NpbmcobWlzc2luZywgdmFsaWQpKTtcbiAgICAgICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBzY2hlbWEsIG1pc3NpbmcpKTtcbiAgICAgICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcEFsbFJlcXVpcmVkKCkge1xuICAgICAgICAgICAgZ2VuLmZvck9mKFwicHJvcFwiLCBzY2hlbWFDb2RlLCAocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IHByb3AgfSk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEubm9Qcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBvcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSB7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0pO1xuICAgICAgICAgICAgZ2VuLmZvck9mKG1pc3NpbmcsIHNjaGVtYUNvZGUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIG1pc3NpbmcsIG9wdHMub3duUHJvcGVydGllcykpO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGNvZGVnZW5fMS5uaWwpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1aXJlZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBpdGVtc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heEl0ZW1zXCIsIFwibWluSXRlbXNcIl0sXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRJdGVtcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9pc3N1ZXMvODg5XG5jb25zdCBlcXVhbCA9IHJlcXVpcmUoXCJmYXN0LWRlZXAtZXF1YWxcIik7XG5lcXVhbC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL2VxdWFsXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXF1YWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcXVhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZS9kYXRhVHlwZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGksIGogfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgZHVwbGljYXRlIGl0ZW1zIChpdGVtcyAjIyAke2p9IGFuZCAke2l9IGFyZSBpZGVudGljYWwpYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2k6ICR7aX0sIGo6ICR7an19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoISRkYXRhICYmICFzY2hlbWEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICBjb25zdCBpdGVtVHlwZXMgPSBwYXJlbnRTY2hlbWEuaXRlbXMgPyAoMCwgZGF0YVR5cGVfMS5nZXRTY2hlbWFUeXBlcykocGFyZW50U2NoZW1hLml0ZW1zKSA6IFtdO1xuICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgdmFsaWRhdGVVbmlxdWVJdGVtcywgKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gZmFsc2VgKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVVbmlxdWVJdGVtcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBnZW4ubGV0KFwiaVwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICAgICAgY29uc3QgaiA9IGdlbi5sZXQoXCJqXCIpO1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGksIGogfSk7XG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l9ID4gMWAsICgpID0+IChjYW5PcHRpbWl6ZSgpID8gbG9vcE4gOiBsb29wTjIpKGksIGopKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYW5PcHRpbWl6ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtVHlwZXMubGVuZ3RoID4gMCAmJiAhaXRlbVR5cGVzLnNvbWUoKHQpID0+IHQgPT09IFwib2JqZWN0XCIgfHwgdCA9PT0gXCJhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTihpLCBqKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZ2VuLm5hbWUoXCJpdGVtXCIpO1xuICAgICAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gKDAsIGRhdGFUeXBlXzEuY2hlY2tEYXRhVHlwZXMpKGl0ZW1UeXBlcywgaXRlbSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8xLkRhdGFUeXBlLldyb25nKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBnZW4uY29uc3QoXCJpbmRpY2VzXCIsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgICAgICAgICBnZW4uZm9yKCgwLCBjb2RlZ2VuXzEuXykgYDske2l9LS07YCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdlbi5sZXQoaXRlbSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfVske2l9XWApO1xuICAgICAgICAgICAgICAgIGdlbi5pZih3cm9uZ1R5cGUsICgwLCBjb2RlZ2VuXzEuXykgYGNvbnRpbnVlYCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1UeXBlcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7aXRlbX0gPT0gXCJzdHJpbmdcImAsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXRlbX0gKz0gXCJfXCJgKTtcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2luZGljZXN9WyR7aXRlbX1dID09IFwibnVtYmVyXCJgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpbmRpY2VzfVske2l0ZW19XWApO1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtpbmRpY2VzfVske2l0ZW19XSA9ICR7aX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BOMihpLCBqKSB7XG4gICAgICAgICAgICBjb25zdCBlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyID0gZ2VuLm5hbWUoXCJvdXRlclwiKTtcbiAgICAgICAgICAgIGdlbi5sYWJlbChvdXRlcikuZm9yKCgwLCBjb2RlZ2VuXzEuXykgYDske2l9LS07YCwgKCkgPT4gZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGAke2p9ID0gJHtpfTsgJHtqfS0tO2AsICgpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2VxbH0oJHtkYXRhfVske2l9XSwgJHtkYXRhfVske2p9XSlgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKG91dGVyKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuaXF1ZUl0ZW1zLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gY29uc3RhbnRcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZTogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnN0XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWFDb2RlLCBzY2hlbWEgfSA9IGN4dDtcbiAgICAgICAgaWYgKCRkYXRhIHx8IChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KX0oJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfSAhPT0gJHtkYXRhfWApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXNcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZXM6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJlbnVtXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoISRkYXRhICYmIHNjaGVtYS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbnVtIG11c3QgaGF2ZSBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgIGNvbnN0IHVzZUxvb3AgPSBzY2hlbWEubGVuZ3RoID49IGl0Lm9wdHMubG9vcEVudW07XG4gICAgICAgIGxldCBlcWw7XG4gICAgICAgIGNvbnN0IGdldEVxbCA9ICgpID0+IChlcWwgIT09IG51bGwgJiYgZXFsICE9PSB2b2lkIDAgPyBlcWwgOiAoZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCkpKTtcbiAgICAgICAgbGV0IHZhbGlkO1xuICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgbG9vcEVudW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgICAgICBjb25zdCB2U2NoZW1hID0gZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBzY2hlbWFDb2RlKTtcbiAgICAgICAgICAgIHZhbGlkID0gKDAsIGNvZGVnZW5fMS5vcikoLi4uc2NoZW1hLm1hcCgoX3gsIGkpID0+IGVxdWFsQ29kZSh2U2NoZW1hLCBpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gbG9vcEVudW0oKSB7XG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICBnZW4uZm9yT2YoXCJ2XCIsIHNjaGVtYUNvZGUsICh2KSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtnZXRFcWwoKX0oJHtkYXRhfSwgJHt2fSlgLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKS5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXF1YWxDb2RlKHZTY2hlbWEsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtpXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc2NoID09PSBcIm9iamVjdFwiICYmIHNjaCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtnZXRFcWwoKX0oJHtkYXRhfSwgJHt2U2NoZW1hfVske2l9XSlgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSAke3NjaH1gO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnVtLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbGltaXROdW1iZXJfMSA9IHJlcXVpcmUoXCIuL2xpbWl0TnVtYmVyXCIpO1xuY29uc3QgbXVsdGlwbGVPZl8xID0gcmVxdWlyZShcIi4vbXVsdGlwbGVPZlwiKTtcbmNvbnN0IGxpbWl0TGVuZ3RoXzEgPSByZXF1aXJlKFwiLi9saW1pdExlbmd0aFwiKTtcbmNvbnN0IHBhdHRlcm5fMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm5cIik7XG5jb25zdCBsaW1pdFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0UHJvcGVydGllc1wiKTtcbmNvbnN0IHJlcXVpcmVkXzEgPSByZXF1aXJlKFwiLi9yZXF1aXJlZFwiKTtcbmNvbnN0IGxpbWl0SXRlbXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0SXRlbXNcIik7XG5jb25zdCB1bmlxdWVJdGVtc18xID0gcmVxdWlyZShcIi4vdW5pcXVlSXRlbXNcIik7XG5jb25zdCBjb25zdF8xID0gcmVxdWlyZShcIi4vY29uc3RcIik7XG5jb25zdCBlbnVtXzEgPSByZXF1aXJlKFwiLi9lbnVtXCIpO1xuY29uc3QgdmFsaWRhdGlvbiA9IFtcbiAgICAvLyBudW1iZXJcbiAgICBsaW1pdE51bWJlcl8xLmRlZmF1bHQsXG4gICAgbXVsdGlwbGVPZl8xLmRlZmF1bHQsXG4gICAgLy8gc3RyaW5nXG4gICAgbGltaXRMZW5ndGhfMS5kZWZhdWx0LFxuICAgIHBhdHRlcm5fMS5kZWZhdWx0LFxuICAgIC8vIG9iamVjdFxuICAgIGxpbWl0UHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgcmVxdWlyZWRfMS5kZWZhdWx0LFxuICAgIC8vIGFycmF5XG4gICAgbGltaXRJdGVtc18xLmRlZmF1bHQsXG4gICAgdW5pcXVlSXRlbXNfMS5kZWZhdWx0LFxuICAgIC8vIGFueVxuICAgIHsga2V5d29yZDogXCJ0eXBlXCIsIHNjaGVtYVR5cGU6IFtcInN0cmluZ1wiLCBcImFycmF5XCJdIH0sXG4gICAgeyBrZXl3b3JkOiBcIm51bGxhYmxlXCIsIHNjaGVtYVR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgY29uc3RfMS5kZWZhdWx0LFxuICAgIGVudW1fMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZhbGlkYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWQgd2hlbiBcIml0ZW1zXCIgaXMgbm90IGFuIGFycmF5IG9mIHNjaGVtYXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbGVuOiBpdGVtcy5sZW5ndGggfSk7XG4gICAgICAgIGN4dC5wYXNzKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi52YXIoXCJ2YWxpZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXModmFsaWQpIHtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBpdGVtcy5sZW5ndGgsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbEl0ZW1zLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImFycmF5XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVR1cGxlKGN4dCwgXCJhZGRpdGlvbmFsSXRlbXNcIiwgc2NoZW1hKTtcbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN4dC5vaygoMCwgY29kZV8xLnZhbGlkYXRlQXJyYXkpKGN4dCkpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVUdXBsZShjeHQsIGV4dHJhSXRlbXMsIHNjaEFyciA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNoZWNrU3RyaWN0VHVwbGUocGFyZW50U2NoZW1hKTtcbiAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBzY2hBcnIubGVuZ3RoICYmIGl0Lml0ZW1zICE9PSB0cnVlKSB7XG4gICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoQXJyLmxlbmd0aCwgaXQuaXRlbXMpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgc2NoQXJyLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPiAke2l9YCwgKCkgPT4gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICB9LCB2YWxpZCkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNoZWNrU3RyaWN0VHVwbGUoc2NoKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IGwgPSBzY2hBcnIubGVuZ3RoO1xuICAgICAgICBjb25zdCBmdWxsVHVwbGUgPSBsID09PSBzY2gubWluSXRlbXMgJiYgKGwgPT09IHNjaC5tYXhJdGVtcyB8fCBzY2hbZXh0cmFJdGVtc10gPT09IGZhbHNlKTtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0VHVwbGVzICYmICFmdWxsVHVwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBcIiR7a2V5d29yZH1cIiBpcyAke2x9LXR1cGxlLCBidXQgbWluSXRlbXMgb3IgbWF4SXRlbXMvJHtleHRyYUl0ZW1zfSBhcmUgbm90IHNwZWNpZmllZCBvciBkaWZmZXJlbnQgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImA7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgb3B0cy5zdHJpY3RUdXBsZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdmFsaWRhdGVUdXBsZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZW1zLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaXRlbXNfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJlZml4SXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYXJyYXlcIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgY29kZTogKGN4dCkgPT4gKDAsIGl0ZW1zXzEudmFsaWRhdGVUdXBsZSkoY3h0LCBcIml0ZW1zXCIpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWZpeEl0ZW1zLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaW4sIG1heCB9IH0pID0+IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IHZhbGlkIGl0ZW0ocylgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IGFuZCBubyBtb3JlIHRoYW4gJHttYXh9IHZhbGlkIGl0ZW0ocylgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWQgPyAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge21pbkNvbnRhaW5zOiAke21pbn0sIG1heENvbnRhaW5zOiAke21heH19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgbGV0IG1pbjtcbiAgICAgICAgbGV0IG1heDtcbiAgICAgICAgY29uc3QgeyBtaW5Db250YWlucywgbWF4Q29udGFpbnMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKGl0Lm9wdHMubmV4dCkge1xuICAgICAgICAgICAgbWluID0gbWluQ29udGFpbnMgPT09IHVuZGVmaW5lZCA/IDEgOiBtaW5Db250YWlucztcbiAgICAgICAgICAgIG1heCA9IG1heENvbnRhaW5zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWluID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pbiwgbWF4IH0pO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAwKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIm1pbkNvbnRhaW5zXCIgPT0gMCB3aXRob3V0IFwibWF4Q29udGFpbnNcIjogXCJjb250YWluc1wiIGtleXdvcmQgaWdub3JlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBtaW4gPiBtYXgpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA+IFwibWF4Q29udGFpbnNcIiBpcyBhbHdheXMgaW52YWxpZGApO1xuICAgICAgICAgICAgY3h0LmZhaWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGxldCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59ID49ICR7bWlufWA7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtsZW59IDw9ICR7bWF4fWA7XG4gICAgICAgICAgICBjeHQucGFzcyhjb25kKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkICYmIG1pbiA9PT0gMSkge1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyh2YWxpZCwgKCkgPT4gZ2VuLmlmKHZhbGlkLCAoKSA9PiBnZW4uYnJlYWsoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoID4gMGAsIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IGdlbi5sZXQoXCJjb3VudFwiLCAwKTtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXMoc2NoVmFsaWQsICgpID0+IGdlbi5pZihzY2hWYWxpZCwgKCkgPT4gY2hlY2tMaW1pdHMoY291bnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhfdmFsaWQsIGJsb2NrKSB7XG4gICAgICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIDAsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSwgX3ZhbGlkKTtcbiAgICAgICAgICAgICAgICBibG9jaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMaW1pdHMoY291bnQpIHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9KytgKTtcbiAgICAgICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKS5icmVhaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+ICR7bWF4fWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpKTtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSAxKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRhaW5zLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSBleHBvcnRzLnZhbGlkYXRlUHJvcGVydHlEZXBzID0gZXhwb3J0cy5lcnJvciA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5leHBvcnRzLmVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBwcm9wZXJ0eSwgZGVwc0NvdW50LCBkZXBzIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eV9pZXMgPSBkZXBzQ291bnQgPT09IDEgPyBcInByb3BlcnR5XCIgOiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBoYXZlICR7cHJvcGVydHlfaWVzfSAke2RlcHN9IHdoZW4gcHJvcGVydHkgJHtwcm9wZXJ0eX0gaXMgcHJlc2VudGA7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBwcm9wZXJ0eSwgZGVwc0NvdW50LCBkZXBzLCBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHk6ICR7cHJvcGVydHl9LFxuICAgIG1pc3NpbmdQcm9wZXJ0eTogJHttaXNzaW5nUHJvcGVydHl9LFxuICAgIGRlcHNDb3VudDogJHtkZXBzQ291bnR9LFxuICAgIGRlcHM6ICR7ZGVwc319YCwgLy8gVE9ETyBjaGFuZ2UgdG8gcmVmZXJlbmNlXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGVycm9yOiBleHBvcnRzLmVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IFtwcm9wRGVwcywgc2NoRGVwc10gPSBzcGxpdERlcGVuZGVuY2llcyhjeHQpO1xuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5RGVwcyhjeHQsIHByb3BEZXBzKTtcbiAgICAgICAgdmFsaWRhdGVTY2hlbWFEZXBzKGN4dCwgc2NoRGVwcyk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiBzcGxpdERlcGVuZGVuY2llcyh7IHNjaGVtYSB9KSB7XG4gICAgY29uc3QgcHJvcGVydHlEZXBzID0ge307XG4gICAgY29uc3Qgc2NoZW1hRGVwcyA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcIl9fcHJvdG9fX1wiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGRlcHMgPSBBcnJheS5pc0FycmF5KHNjaGVtYVtrZXldKSA/IHByb3BlcnR5RGVwcyA6IHNjaGVtYURlcHM7XG4gICAgICAgIGRlcHNba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gW3Byb3BlcnR5RGVwcywgc2NoZW1hRGVwc107XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5RGVwcyhjeHQsIHByb3BlcnR5RGVwcyA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcGVydHlEZXBzKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BlcnR5RGVwcykge1xuICAgICAgICBjb25zdCBkZXBzID0gcHJvcGVydHlEZXBzW3Byb3BdO1xuICAgICAgICBpZiAoZGVwcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgaGFzUHJvcGVydHkgPSAoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyk7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoe1xuICAgICAgICAgICAgcHJvcGVydHk6IHByb3AsXG4gICAgICAgICAgICBkZXBzQ291bnQ6IGRlcHMubGVuZ3RoLFxuICAgICAgICAgICAgZGVwczogZGVwcy5qb2luKFwiLCBcIiksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgICAgICBnZW4uaWYoaGFzUHJvcGVydHksICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcFByb3Agb2YgZGVwcykge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgZGVwUHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtoYXNQcm9wZXJ0eX0gJiYgKCR7KDAsIGNvZGVfMS5jaGVja01pc3NpbmdQcm9wKShjeHQsIGRlcHMsIG1pc3NpbmcpfSlgKTtcbiAgICAgICAgICAgICgwLCBjb2RlXzEucmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgbWlzc2luZyk7XG4gICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IHZhbGlkYXRlUHJvcGVydHlEZXBzO1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWFEZXBzKGN4dCwgc2NoZW1hRGVwcyA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgZm9yIChjb25zdCBwcm9wIGluIHNjaGVtYURlcHMpIHtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFEZXBzW3Byb3BdKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCwgc2NoZW1hUHJvcDogcHJvcCB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgfSwgKCkgPT4gZ2VuLnZhcih2YWxpZCwgdHJ1ZSkgLy8gVE9ETyB2YXJcbiAgICAgICAgKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlU2NoZW1hRGVwcyA9IHZhbGlkYXRlU2NoZW1hRGVwcztcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGVuZGVuY2llcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJwcm9wZXJ0eSBuYW1lIG11c3QgYmUgdmFsaWRcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHlOYW1lOiAke3BhcmFtcy5wcm9wZXJ0eU5hbWV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwcm9wZXJ0eU5hbWU6IGtleSB9KTtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHlOYW1lcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FkZGl0aW9uYWxQcm9wZXJ0eTogJHtwYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogW1wib2JqZWN0XCJdLFxuICAgIHNjaGVtYVR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgYWxsb3dVbmRlZmluZWQ6IHRydWUsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBlcnJzQ291bnQsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWVycnNDb3VudClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgeyBhbGxFcnJvcnMsIG9wdHMgfSA9IGl0O1xuICAgICAgICBpdC5wcm9wcyA9IHRydWU7XG4gICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgIT09IFwiYWxsXCIgJiYgKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHBhdFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO1xuICAgICAgICBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGN4dC5vaygoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBZGRpdGlvbmFsUHJvcGVydGllcygpIHtcbiAgICAgICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wcy5sZW5ndGggJiYgIXBhdFByb3BzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKGlzQWRkaXRpb25hbChrZXkpLCAoKSA9PiBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgbGV0IGRlZmluZWRQcm9wO1xuICAgICAgICAgICAgaWYgKHByb3BzLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIG1heWJlIGFuIG9wdGlvbiBpbnN0ZWFkIG9mIGhhcmQtY29kZWQgOD9cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wc1NjaGVtYSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBwYXJlbnRTY2hlbWEucHJvcGVydGllcywgXCJwcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVfMS5pc093blByb3BlcnR5KShnZW4sIHByb3BzU2NoZW1hLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5wcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5fSA9PT0gJHtwfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRQcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKGRlZmluZWRQcm9wLCAuLi5wYXRQcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHApfS50ZXN0KCR7a2V5fSlgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5ub3QpKGRlZmluZWRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWxldGVBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgZGVsZXRlICR7ZGF0YX1bJHtrZXl9XWApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSB7XG4gICAgICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiIHx8IChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgJiYgc2NoZW1hID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVBZGRpdGlvbmFsKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgYWRkaXRpb25hbFByb3BlcnR5OiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiZmFpbGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGVycm9ycykge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuU3RyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdWJzY2hlbWEsIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoc3Vic2NoZW1hLCB2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChpdC5vcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgJiYgcGFyZW50U2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdC5jb2RlKG5ldyB2YWxpZGF0ZV8xLktleXdvcmRDeHQoaXQsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdCwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsUHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHNjaGVtYSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBhbGxQcm9wcykge1xuICAgICAgICAgICAgaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIGFsbFByb3BzLmxlbmd0aCAmJiBpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCAoMCwgdXRpbF8xLnRvSGFzaCkoYWxsUHJvcHMpLCBpdC5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGFsbFByb3BzLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFbcF0pKTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdChwcm9wKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uZWxzZSgpLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjeHQuaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNEZWZhdWx0KHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBpdC5vcHRzLnVzZURlZmF1bHRzICYmICFpdC5jb21wb3NpdGVSdWxlICYmIHNjaGVtYVtwcm9wXS5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKSB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wZXJ0aWVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJub3RcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAga2V5d29yZDogXCJub3RcIixcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICBjeHQuZmFpbFJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcigpKTtcbiAgICB9LFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBOT1QgYmUgdmFsaWRcIiB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYW55T2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZTogY29kZV8xLnZhbGlkYXRlVW5pb24sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGEgc2NoZW1hIGluIGFueU9mXCIgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbnlPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXNzaW5nU2NoZW1hczogJHtwYXJhbXMucGFzc2luZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMuZGlzY3JpbWluYXRvciAmJiBwYXJlbnRTY2hlbWEuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoQXJyID0gc2NoZW1hO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBhc3NpbmcgPSBnZW4ubGV0KFwicGFzc2luZ1wiLCBudWxsKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IHBhc3NpbmcgfSk7XG4gICAgICAgIC8vIFRPRE8gcG9zc2libHkgZmFpbCBzdHJhaWdodCBhd2F5ICh3aXRoIHdhcm5pbmcgb3IgZXhjZXB0aW9uKSBpZiB0aGVyZSBhcmUgdHdvIGVtcHR5IGFsd2F5cyB2YWxpZCBzY2hlbWFzXG4gICAgICAgIGdlbi5ibG9jayh2YWxpZGF0ZU9uZU9mKTtcbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlT25lT2YoKSB7XG4gICAgICAgICAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaEN4dDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcihzY2hWYWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGAke3NjaFZhbGlkfSAmJiAke3ZhbGlkfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHZhbGlkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24ocGFzc2luZywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7cGFzc2luZ30sICR7aX1dYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbHNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihwYXNzaW5nLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaEN4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbmVPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhbGxPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgc2NoZW1hLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkOiBcImFsbE9mXCIsIHNjaGVtYVByb3A6IGkgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICB9KTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsbE9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIFwiJHtwYXJhbXMuaWZDbGF1c2V9XCIgc2NoZW1hYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7ZmFpbGluZ0tleXdvcmQ6ICR7cGFyYW1zLmlmQ2xhdXNlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hLnRoZW4gPT09IHVuZGVmaW5lZCAmJiBwYXJlbnRTY2hlbWEuZWxzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImlmXCIgd2l0aG91dCBcInRoZW5cIiBhbmQgXCJlbHNlXCIgaXMgaWdub3JlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc1RoZW4gPSBoYXNTY2hlbWEoaXQsIFwidGhlblwiKTtcbiAgICAgICAgY29uc3QgaGFzRWxzZSA9IGhhc1NjaGVtYShpdCwgXCJlbHNlXCIpO1xuICAgICAgICBpZiAoIWhhc1RoZW4gJiYgIWhhc0Vsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICB2YWxpZGF0ZUlmKCk7XG4gICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICBpZiAoaGFzVGhlbiAmJiBoYXNFbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBpZkNsYXVzZSA9IGdlbi5sZXQoXCJpZkNsYXVzZVwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZSB9KTtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIsIGlmQ2xhdXNlKSwgdmFsaWRhdGVDbGF1c2UoXCJlbHNlXCIsIGlmQ2xhdXNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzVGhlbikge1xuICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCB2YWxpZGF0ZUNsYXVzZShcInRoZW5cIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KShzY2hWYWxpZCksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSWYoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUNsYXVzZShrZXl3b3JkLCBpZkNsYXVzZSkge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgdmFsaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpZkNsYXVzZSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihpZkNsYXVzZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl3b3JkfWApO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGlmQ2xhdXNlOiBrZXl3b3JkIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gaGFzU2NoZW1hKGl0LCBrZXl3b3JkKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgIHJldHVybiBzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgYWRkaXRpb25hbEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsSXRlbXNcIik7XG5jb25zdCBwcmVmaXhJdGVtc18xID0gcmVxdWlyZShcIi4vcHJlZml4SXRlbXNcIik7XG5jb25zdCBpdGVtc18xID0gcmVxdWlyZShcIi4vaXRlbXNcIik7XG5jb25zdCBpdGVtczIwMjBfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zMjAyMFwiKTtcbmNvbnN0IGNvbnRhaW5zXzEgPSByZXF1aXJlKFwiLi9jb250YWluc1wiKTtcbmNvbnN0IGRlcGVuZGVuY2llc18xID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzXCIpO1xuY29uc3QgcHJvcGVydHlOYW1lc18xID0gcmVxdWlyZShcIi4vcHJvcGVydHlOYW1lc1wiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IHByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL3Byb3BlcnRpZXNcIik7XG5jb25zdCBwYXR0ZXJuUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcGF0dGVyblByb3BlcnRpZXNcIik7XG5jb25zdCBub3RfMSA9IHJlcXVpcmUoXCIuL25vdFwiKTtcbmNvbnN0IGFueU9mXzEgPSByZXF1aXJlKFwiLi9hbnlPZlwiKTtcbmNvbnN0IG9uZU9mXzEgPSByZXF1aXJlKFwiLi9vbmVPZlwiKTtcbmNvbnN0IGFsbE9mXzEgPSByZXF1aXJlKFwiLi9hbGxPZlwiKTtcbmNvbnN0IGlmXzEgPSByZXF1aXJlKFwiLi9pZlwiKTtcbmNvbnN0IHRoZW5FbHNlXzEgPSByZXF1aXJlKFwiLi90aGVuRWxzZVwiKTtcbmZ1bmN0aW9uIGdldEFwcGxpY2F0b3IoZHJhZnQyMDIwID0gZmFsc2UpIHtcbiAgICBjb25zdCBhcHBsaWNhdG9yID0gW1xuICAgICAgICAvLyBhbnlcbiAgICAgICAgbm90XzEuZGVmYXVsdCxcbiAgICAgICAgYW55T2ZfMS5kZWZhdWx0LFxuICAgICAgICBvbmVPZl8xLmRlZmF1bHQsXG4gICAgICAgIGFsbE9mXzEuZGVmYXVsdCxcbiAgICAgICAgaWZfMS5kZWZhdWx0LFxuICAgICAgICB0aGVuRWxzZV8xLmRlZmF1bHQsXG4gICAgICAgIC8vIG9iamVjdFxuICAgICAgICBwcm9wZXJ0eU5hbWVzXzEuZGVmYXVsdCxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBkZXBlbmRlbmNpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICAgICAgcGF0dGVyblByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIF07XG4gICAgLy8gYXJyYXlcbiAgICBpZiAoZHJhZnQyMDIwKVxuICAgICAgICBhcHBsaWNhdG9yLnB1c2gocHJlZml4SXRlbXNfMS5kZWZhdWx0LCBpdGVtczIwMjBfMS5kZWZhdWx0KTtcbiAgICBlbHNlXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChhZGRpdGlvbmFsSXRlbXNfMS5kZWZhdWx0LCBpdGVtc18xLmRlZmF1bHQpO1xuICAgIGFwcGxpY2F0b3IucHVzaChjb250YWluc18xLmRlZmF1bHQpO1xuICAgIHJldHVybiBhcHBsaWNhdG9yO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZ2V0QXBwbGljYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5keW5hbWljQW5jaG9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgcmVmXzEgPSByZXF1aXJlKFwiLi4vY29yZS9yZWZcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkZHluYW1pY0FuY2hvclwiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgY29kZTogKGN4dCkgPT4gZHluYW1pY0FuY2hvcihjeHQsIGN4dC5zY2hlbWEpLFxufTtcbmZ1bmN0aW9uIGR5bmFtaWNBbmNob3IoY3h0LCBhbmNob3IpIHtcbiAgICBjb25zdCB7IGdlbiwgaXQgfSA9IGN4dDtcbiAgICBpdC5zY2hlbWFFbnYucm9vdC5keW5hbWljQW5jaG9yc1thbmNob3JdID0gdHJ1ZTtcbiAgICBjb25zdCB2ID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShhbmNob3IpfWA7XG4gICAgY29uc3QgdmFsaWRhdGUgPSBpdC5lcnJTY2hlbWFQYXRoID09PSBcIiNcIiA/IGl0LnZhbGlkYXRlTmFtZSA6IF9nZXRWYWxpZGF0ZShjeHQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAhJHt2fWAsICgpID0+IGdlbi5hc3NpZ24odiwgdmFsaWRhdGUpKTtcbn1cbmV4cG9ydHMuZHluYW1pY0FuY2hvciA9IGR5bmFtaWNBbmNob3I7XG5mdW5jdGlvbiBfZ2V0VmFsaWRhdGUoY3h0KSB7XG4gICAgY29uc3QgeyBzY2hlbWFFbnYsIHNjaGVtYSwgc2VsZiB9ID0gY3h0Lml0O1xuICAgIGNvbnN0IHsgcm9vdCwgYmFzZUlkLCBsb2NhbFJlZnMsIG1ldGEgfSA9IHNjaGVtYUVudi5yb290O1xuICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHNlbGYub3B0cztcbiAgICBjb25zdCBzY2ggPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCwgbG9jYWxSZWZzLCBtZXRhIH0pO1xuICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwoc2VsZiwgc2NoKTtcbiAgICByZXR1cm4gKDAsIHJlZl8xLmdldFZhbGlkYXRlKShjeHQsIHNjaCk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1keW5hbWljQW5jaG9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5keW5hbWljUmVmID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHJlZl8xID0gcmVxdWlyZShcIi4uL2NvcmUvcmVmXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiJGR5bmFtaWNSZWZcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgIGNvZGU6IChjeHQpID0+IGR5bmFtaWNSZWYoY3h0LCBjeHQuc2NoZW1hKSxcbn07XG5mdW5jdGlvbiBkeW5hbWljUmVmKGN4dCwgcmVmKSB7XG4gICAgY29uc3QgeyBnZW4sIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgaWYgKHJlZlswXSAhPT0gXCIjXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke2tleXdvcmR9XCIgb25seSBzdXBwb3J0cyBoYXNoIGZyYWdtZW50IHJlZmVyZW5jZWApO1xuICAgIGNvbnN0IGFuY2hvciA9IHJlZi5zbGljZSgxKTtcbiAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgIF9keW5hbWljUmVmKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIF9keW5hbWljUmVmKHZhbGlkKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2R5bmFtaWNSZWYodmFsaWQpIHtcbiAgICAgICAgLy8gVE9ETyB0aGUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYHJlY3Vyc2l2ZVJlZjogI2AgYWx3YXlzIHBvaW50cyB0byB0aGUgcm9vdFxuICAgICAgICAvLyBvZiB0aGUgc2NoZW1hIG9iamVjdCwgd2hpY2ggaXMgbm90IGNvcnJlY3QsIGJlY2F1c2UgdGhlcmUgbWF5IGJlICRpZCB0aGF0XG4gICAgICAgIC8vIG1ha2VzICMgcG9pbnQgdG8gaXQsIGFuZCB0aGUgdGFyZ2V0IHNjaGVtYSBtYXkgbm90IGNvbnRhaW4gZHluYW1pYy9yZWN1cnNpdmVBbmNob3IuXG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhhdCAyIHRlc3RzIGluIHJlY3Vyc2l2ZVJlZi5qc29uIGZhaWwuXG4gICAgICAgIC8vIFRoaXMgaXMgYSBzaW1pbGFyIHByb2JsZW0gdG8gIzgxNSAoYCRpZGAgZG9lc24ndCBhbHRlciByZXNvbHV0aW9uIHNjb3BlIGZvciBgeyBcIiRyZWZcIjogXCIjXCIgfWApLlxuICAgICAgICAvLyAoVGhpcyBwcm9ibGVtIGlzIG5vdCB0ZXN0ZWQgaW4gSlNPTi1TY2hlbWEtVGVzdC1TdWl0ZSlcbiAgICAgICAgaWYgKGl0LnNjaGVtYUVudi5yb290LmR5bmFtaWNBbmNob3JzW2FuY2hvcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBnZW4ubGV0KFwiX3ZcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShhbmNob3IpfWApO1xuICAgICAgICAgICAgZ2VuLmlmKHYsIF9jYWxsUmVmKHYsIHZhbGlkKSwgX2NhbGxSZWYoaXQudmFsaWRhdGVOYW1lLCB2YWxpZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX2NhbGxSZWYoaXQudmFsaWRhdGVOYW1lLCB2YWxpZCkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBfY2FsbFJlZih2YWxpZGF0ZSwgdmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkXG4gICAgICAgICAgICA/ICgpID0+IGdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgKDAsIHJlZl8xLmNhbGxSZWYpKGN4dCwgdmFsaWRhdGUpO1xuICAgICAgICAgICAgICAgIGdlbi5sZXQodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogKCkgPT4gKDAsIHJlZl8xLmNhbGxSZWYpKGN4dCwgdmFsaWRhdGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuZHluYW1pY1JlZiA9IGR5bmFtaWNSZWY7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1keW5hbWljUmVmLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZHluYW1pY0FuY2hvcl8xID0gcmVxdWlyZShcIi4vZHluYW1pY0FuY2hvclwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgaWYgKGN4dC5zY2hlbWEpXG4gICAgICAgICAgICAoMCwgZHluYW1pY0FuY2hvcl8xLmR5bmFtaWNBbmNob3IpKGN4dCwgXCJcIik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShjeHQuaXQsIFwiJHJlY3Vyc2l2ZUFuY2hvcjogZmFsc2UgaXMgaWdub3JlZFwiKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlY3Vyc2l2ZUFuY2hvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGR5bmFtaWNSZWZfMSA9IHJlcXVpcmUoXCIuL2R5bmFtaWNSZWZcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICBjb2RlOiAoY3h0KSA9PiAoMCwgZHluYW1pY1JlZl8xLmR5bmFtaWNSZWYpKGN4dCwgY3h0LnNjaGVtYSksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVjdXJzaXZlUmVmLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZHluYW1pY0FuY2hvcl8xID0gcmVxdWlyZShcIi4vZHluYW1pY0FuY2hvclwiKTtcbmNvbnN0IGR5bmFtaWNSZWZfMSA9IHJlcXVpcmUoXCIuL2R5bmFtaWNSZWZcIik7XG5jb25zdCByZWN1cnNpdmVBbmNob3JfMSA9IHJlcXVpcmUoXCIuL3JlY3Vyc2l2ZUFuY2hvclwiKTtcbmNvbnN0IHJlY3Vyc2l2ZVJlZl8xID0gcmVxdWlyZShcIi4vcmVjdXJzaXZlUmVmXCIpO1xuY29uc3QgZHluYW1pYyA9IFtkeW5hbWljQW5jaG9yXzEuZGVmYXVsdCwgZHluYW1pY1JlZl8xLmRlZmF1bHQsIHJlY3Vyc2l2ZUFuY2hvcl8xLmRlZmF1bHQsIHJlY3Vyc2l2ZVJlZl8xLmRlZmF1bHRdO1xuZXhwb3J0cy5kZWZhdWx0ID0gZHluYW1pYztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi4vYXBwbGljYXRvci9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkZXBlbmRlbnRSZXF1aXJlZFwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcjogZGVwZW5kZW5jaWVzXzEuZXJyb3IsXG4gICAgY29kZTogKGN4dCkgPT4gKDAsIGRlcGVuZGVuY2llc18xLnZhbGlkYXRlUHJvcGVydHlEZXBzKShjeHQpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGVuZGVudFJlcXVpcmVkLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkZXBlbmRlbnRTY2hlbWFzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGNvZGU6IChjeHQpID0+ICgwLCBkZXBlbmRlbmNpZXNfMS52YWxpZGF0ZVNjaGVtYURlcHMpKGN4dCksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwZW5kZW50U2NoZW1hcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4Q29udGFpbnNcIiwgXCJtaW5Db250YWluc1wiXSxcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuY29udGFpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCIke2tleXdvcmR9XCIgd2l0aG91dCBcImNvbnRhaW5zXCIgaXMgaWdub3JlZGApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdENvbnRhaW5zLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZGVwZW5kZW50UmVxdWlyZWRfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRpb24vZGVwZW5kZW50UmVxdWlyZWRcIik7XG5jb25zdCBkZXBlbmRlbnRTY2hlbWFzXzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhdG9yL2RlcGVuZGVudFNjaGVtYXNcIik7XG5jb25zdCBsaW1pdENvbnRhaW5zXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0aW9uL2xpbWl0Q29udGFpbnNcIik7XG5jb25zdCBuZXh0ID0gW2RlcGVuZGVudFJlcXVpcmVkXzEuZGVmYXVsdCwgZGVwZW5kZW50U2NoZW1hc18xLmRlZmF1bHQsIGxpbWl0Q29udGFpbnNfMS5kZWZhdWx0XTtcbmV4cG9ydHMuZGVmYXVsdCA9IG5leHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXh0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgTk9UIGhhdmUgdW5ldmFsdWF0ZWQgcHJvcGVydGllc1wiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHt1bmV2YWx1YXRlZFByb3BlcnR5OiAke3BhcmFtcy51bmV2YWx1YXRlZFByb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInVuZXZhbHVhdGVkUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBlcnJzQ291bnQsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWVycnNDb3VudClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgeyBhbGxFcnJvcnMsIHByb3BzIH0gPSBpdDtcbiAgICAgICAgaWYgKHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3Byb3BzfSAhPT0gdHJ1ZWAsICgpID0+IGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiBnZW4uaWYodW5ldmFsdWF0ZWREeW5hbWljKHByb3BzLCBrZXkpLCAoKSA9PiB1bmV2YWx1YXRlZFByb3BDb2RlKGtleSkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiBwcm9wcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB1bmV2YWx1YXRlZFByb3BDb2RlKGtleSlcbiAgICAgICAgICAgICAgICA6IGdlbi5pZih1bmV2YWx1YXRlZFN0YXRpYyhwcm9wcywga2V5KSwgKCkgPT4gdW5ldmFsdWF0ZWRQcm9wQ29kZShrZXkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaXQucHJvcHMgPSB0cnVlO1xuICAgICAgICBjeHQub2soKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJzQ291bnR9ID09PSAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9YCk7XG4gICAgICAgIGZ1bmN0aW9uIHVuZXZhbHVhdGVkUHJvcENvZGUoa2V5KSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyB1bmV2YWx1YXRlZFByb3BlcnR5OiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB1bmV2YWx1YXRlZER5bmFtaWMoZXZhbHVhdGVkUHJvcHMsIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCEke2V2YWx1YXRlZFByb3BzfSB8fCAhJHtldmFsdWF0ZWRQcm9wc31bJHtrZXl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdW5ldmFsdWF0ZWRTdGF0aWMoZXZhbHVhdGVkUHJvcHMsIGtleSkge1xuICAgICAgICAgICAgY29uc3QgcHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiBldmFsdWF0ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRQcm9wc1twXSA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgoMCwgY29kZWdlbl8xLl8pIGAke2tleX0gIT09ICR7cH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLmFuZCkoLi4ucHMpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmV2YWx1YXRlZFByb3BlcnRpZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJ1bmV2YWx1YXRlZEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBpdC5pdGVtcyB8fCAwO1xuICAgICAgICBpZiAoaXRlbXMgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGxlbjogaXRlbXMgfSk7XG4gICAgICAgICAgICBjeHQuZmFpbCgoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPiAke2l0ZW1zfWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLnZhcihcInZhbGlkXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zfWApO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHZhbGlkYXRlSXRlbXModmFsaWQsIGl0ZW1zKSk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICB9XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyh2YWxpZCwgZnJvbSkge1xuICAgICAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBmcm9tLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwidW5ldmFsdWF0ZWRJdGVtc1wiLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZXZhbHVhdGVkSXRlbXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1bmV2YWx1YXRlZFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL3VuZXZhbHVhdGVkUHJvcGVydGllc1wiKTtcbmNvbnN0IHVuZXZhbHVhdGVkSXRlbXNfMSA9IHJlcXVpcmUoXCIuL3VuZXZhbHVhdGVkSXRlbXNcIik7XG5jb25zdCB1bmV2YWx1YXRlZCA9IFt1bmV2YWx1YXRlZFByb3BlcnRpZXNfMS5kZWZhdWx0LCB1bmV2YWx1YXRlZEl0ZW1zXzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSB1bmV2YWx1YXRlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIGZvcm1hdCBcIiR7c2NoZW1hQ29kZX1cImAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtmb3JtYXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJmb3JtYXRcIixcbiAgICB0eXBlOiBbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCwgcnVsZVR5cGUpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCwgc2NoZW1hRW52LCBzZWxmIH0gPSBpdDtcbiAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlRm9ybWF0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCRkYXRhKVxuICAgICAgICAgICAgdmFsaWRhdGUkRGF0YUZvcm1hdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1hdCgpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSREYXRhRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm10cyA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBzZWxmLmZvcm1hdHMsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZEZWYgPSBnZW4uY29uc3QoXCJmRGVmXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10c31bJHtzY2hlbWFDb2RlfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGZUeXBlID0gZ2VuLmxldChcImZUeXBlXCIpO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZ2VuLmxldChcImZvcm1hdFwiKTtcbiAgICAgICAgICAgIC8vIFRPRE8gc2ltcGxpZnlcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtmRGVmfSA9PSBcIm9iamVjdFwiICYmICEoJHtmRGVmfSBpbnN0YW5jZW9mIFJlZ0V4cClgLCAoKSA9PiBnZW4uYXNzaWduKGZUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnR5cGUgfHwgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZkRlZn0udmFsaWRhdGVgKSwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsIGZEZWYpKTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5vcikodW5rbm93bkZtdCgpLCBpbnZhbGlkRm10KCkpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25GbXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gJiYgISR7Zm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZhbGlkRm10KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxGb3JtYXQgPSBzY2hlbWFFbnYuJGFzeW5jXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgKCR7ZkRlZn0uYXN5bmMgPyBhd2FpdCAke2Zvcm1hdH0oJHtkYXRhfSkgOiAke2Zvcm1hdH0oJHtkYXRhfSkpYFxuICAgICAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgKHR5cGVvZiAke2Zvcm1hdH0gPT0gXCJmdW5jdGlvblwiID8gJHtjYWxsRm9ybWF0fSA6ICR7Zm9ybWF0fS50ZXN0KCR7ZGF0YX0pKWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSAmJiAke2Zvcm1hdH0gIT09IHRydWUgJiYgJHtmVHlwZX0gPT09ICR7cnVsZVR5cGV9ICYmICEke3ZhbGlkRGF0YX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0RGVmID0gc2VsZi5mb3JtYXRzW3NjaGVtYV07XG4gICAgICAgICAgICBpZiAoIWZvcm1hdERlZikge1xuICAgICAgICAgICAgICAgIHVua25vd25Gb3JtYXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0RGVmID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IFtmbXRUeXBlLCBmb3JtYXQsIGZtdFJlZl0gPSBnZXRGb3JtYXQoZm9ybWF0RGVmKTtcbiAgICAgICAgICAgIGlmIChmbXRUeXBlID09PSBydWxlVHlwZSlcbiAgICAgICAgICAgICAgICBjeHQucGFzcyh2YWxpZENvbmRpdGlvbigpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Gb3JtYXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bk1zZygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB1bmtub3duIGZvcm1hdCBcIiR7c2NoZW1hfVwiIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEZvcm1hdChmbXREZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5yZWdleHBDb2RlKShmbXREZWYpXG4gICAgICAgICAgICAgICAgICAgIDogb3B0cy5jb2RlLmZvcm1hdHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtvcHRzLmNvZGUuZm9ybWF0c30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYSl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHsga2V5OiBzY2hlbWEsIHJlZjogZm10RGVmLCBjb2RlIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm10RGVmID09IFwib2JqZWN0XCIgJiYgIShmbXREZWYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZm10RGVmLnR5cGUgfHwgXCJzdHJpbmdcIiwgZm10RGVmLnZhbGlkYXRlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdH0udmFsaWRhdGVgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcInN0cmluZ1wiLCBmbXREZWYsIGZtdF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB2YWxpZENvbmRpdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm9ybWF0RGVmIGluc3RhbmNlb2YgUmVnRXhwKSAmJiBmb3JtYXREZWYuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHtmbXRSZWZ9KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBmb3JtYXQgPT0gXCJmdW5jdGlvblwiID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRSZWZ9KCR7ZGF0YX0pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfS50ZXN0KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGVudFZvY2FidWxhcnkgPSBleHBvcnRzLm1ldGFkYXRhVm9jYWJ1bGFyeSA9IHZvaWQgMDtcbmV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gW1xuICAgIFwidGl0bGVcIixcbiAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJkZXByZWNhdGVkXCIsXG4gICAgXCJyZWFkT25seVwiLFxuICAgIFwid3JpdGVPbmx5XCIsXG4gICAgXCJleGFtcGxlc1wiLFxuXTtcbmV4cG9ydHMuY29udGVudFZvY2FidWxhcnkgPSBbXG4gICAgXCJjb250ZW50TWVkaWFUeXBlXCIsXG4gICAgXCJjb250ZW50RW5jb2RpbmdcIixcbiAgICBcImNvbnRlbnRTY2hlbWFcIixcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRhZGF0YS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCB2YWxpZGF0aW9uXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0aW9uXCIpO1xuY29uc3QgYXBwbGljYXRvcl8xID0gcmVxdWlyZShcIi4vYXBwbGljYXRvclwiKTtcbmNvbnN0IGR5bmFtaWNfMSA9IHJlcXVpcmUoXCIuL2R5bmFtaWNcIik7XG5jb25zdCBuZXh0XzEgPSByZXF1aXJlKFwiLi9uZXh0XCIpO1xuY29uc3QgdW5ldmFsdWF0ZWRfMSA9IHJlcXVpcmUoXCIuL3VuZXZhbHVhdGVkXCIpO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBtZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vbWV0YWRhdGFcIik7XG5jb25zdCBkcmFmdDIwMjBWb2NhYnVsYXJpZXMgPSBbXG4gICAgZHluYW1pY18xLmRlZmF1bHQsXG4gICAgY29yZV8xLmRlZmF1bHQsXG4gICAgdmFsaWRhdGlvbl8xLmRlZmF1bHQsXG4gICAgKDAsIGFwcGxpY2F0b3JfMS5kZWZhdWx0KSh0cnVlKSxcbiAgICBmb3JtYXRfMS5kZWZhdWx0LFxuICAgIG1ldGFkYXRhXzEubWV0YWRhdGFWb2NhYnVsYXJ5LFxuICAgIG1ldGFkYXRhXzEuY29udGVudFZvY2FidWxhcnksXG4gICAgbmV4dF8xLmRlZmF1bHQsXG4gICAgdW5ldmFsdWF0ZWRfMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0MjAyMFZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0MjAyMC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGlzY3JFcnJvciA9IHZvaWQgMDtcbnZhciBEaXNjckVycm9yO1xuKGZ1bmN0aW9uIChEaXNjckVycm9yKSB7XG4gICAgRGlzY3JFcnJvcltcIlRhZ1wiXSA9IFwidGFnXCI7XG4gICAgRGlzY3JFcnJvcltcIk1hcHBpbmdcIl0gPSBcIm1hcHBpbmdcIjtcbn0pKERpc2NyRXJyb3IgfHwgKGV4cG9ydHMuRGlzY3JFcnJvciA9IERpc2NyRXJyb3IgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi9kaXNjcmltaW5hdG9yL3R5cGVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgZGlzY3JFcnJvciwgdGFnTmFtZSB9IH0pID0+IGRpc2NyRXJyb3IgPT09IHR5cGVzXzEuRGlzY3JFcnJvci5UYWdcbiAgICAgICAgPyBgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgc3RyaW5nYFxuICAgICAgICA6IGB2YWx1ZSBvZiB0YWcgXCIke3RhZ05hbWV9XCIgbXVzdCBiZSBpbiBvbmVPZmAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgZGlzY3JFcnJvciwgdGFnLCB0YWdOYW1lIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2Vycm9yOiAke2Rpc2NyRXJyb3J9LCB0YWc6ICR7dGFnTmFtZX0sIHRhZ1ZhbHVlOiAke3RhZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkaXNjcmltaW5hdG9yXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvbmVPZiB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMuZGlzY3JpbWluYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgZGlzY3JpbWluYXRvciBvcHRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHNjaGVtYS5wcm9wZXJ0eU5hbWU7XG4gICAgICAgIGlmICh0eXBlb2YgdGFnTmFtZSAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgcHJvcGVydHlOYW1lXCIpO1xuICAgICAgICBpZiAoc2NoZW1hLm1hcHBpbmcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiBtYXBwaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIGlmICghb25lT2YpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBvbmVPZiBrZXl3b3JkXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGdlbi5jb25zdChcInRhZ1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KSh0YWdOYW1lKX1gKTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke3RhZ30gPT0gXCJzdHJpbmdcImAsICgpID0+IHZhbGlkYXRlTWFwcGluZygpLCAoKSA9PiBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLlRhZywgdGFnLCB0YWdOYW1lIH0pKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVNYXBwaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IGdldE1hcHBpbmcoKTtcbiAgICAgICAgICAgIGdlbi5pZihmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIGluIG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dGFnfSA9PT0gJHt0YWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBhcHBseVRhZ1NjaGVtYShtYXBwaW5nW3RhZ1ZhbHVlXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIGN4dC5lcnJvcihmYWxzZSwgeyBkaXNjckVycm9yOiB0eXBlc18xLkRpc2NyRXJyb3IuTWFwcGluZywgdGFnLCB0YWdOYW1lIH0pO1xuICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlUYWdTY2hlbWEoc2NoZW1hUHJvcCkge1xuICAgICAgICAgICAgY29uc3QgX3ZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkOiBcIm9uZU9mXCIsIHNjaGVtYVByb3AgfSwgX3ZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBfdmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0TWFwcGluZygpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IG9uZU9mTWFwcGluZyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgdG9wUmVxdWlyZWQgPSBoYXNSZXF1aXJlZChwYXJlbnRTY2hlbWEpO1xuICAgICAgICAgICAgbGV0IHRhZ1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb25lT2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NoID0gb25lT2ZbaV07XG4gICAgICAgICAgICAgICAgaWYgKChzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2guJHJlZikgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaCwgaXQuc2VsZi5SVUxFUykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmID0gc2NoLiRyZWY7XG4gICAgICAgICAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoaXQuc2VsZiwgaXQuc2NoZW1hRW52LnJvb3QsIGl0LmJhc2VJZCwgcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaCBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2ggPSBzY2guc2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgcmVmX2Vycm9yXzEuZGVmYXVsdChpdC5vcHRzLnVyaVJlc29sdmVyLCBpdC5iYXNlSWQsIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BTY2ggPSAoX2EgPSBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2gucHJvcGVydGllcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3RhZ05hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcFNjaCAhPSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogb25lT2Ygc3Vic2NoZW1hcyAob3IgcmVmZXJlbmNlZCBzY2hlbWFzKSBtdXN0IGhhdmUgXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWdSZXF1aXJlZCA9IHRhZ1JlcXVpcmVkICYmICh0b3BSZXF1aXJlZCB8fCBoYXNSZXF1aXJlZChzY2gpKTtcbiAgICAgICAgICAgICAgICBhZGRNYXBwaW5ncyhwcm9wU2NoLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFnUmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICByZXR1cm4gb25lT2ZNYXBwaW5nO1xuICAgICAgICAgICAgZnVuY3Rpb24gaGFzUmVxdWlyZWQoeyByZXF1aXJlZCB9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVxdWlyZWQpICYmIHJlcXVpcmVkLmluY2x1ZGVzKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZ3Moc2NoLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5jb25zdCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHNjaC5jb25zdCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgb2Ygc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCIgbXVzdCBoYXZlIFwiY29uc3RcIiBvciBcImVudW1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhZ1ZhbHVlICE9IFwic3RyaW5nXCIgfHwgdGFnVmFsdWUgaW4gb25lT2ZNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgdmFsdWVzIG11c3QgYmUgdW5pcXVlIHN0cmluZ3NgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25lT2ZNYXBwaW5nW3RhZ1ZhbHVlXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbWV0YVNjaGVtYSA9IHJlcXVpcmUoXCIuL3NjaGVtYS5qc29uXCIpO1xuY29uc3QgYXBwbGljYXRvciA9IHJlcXVpcmUoXCIuL21ldGEvYXBwbGljYXRvci5qc29uXCIpO1xuY29uc3QgdW5ldmFsdWF0ZWQgPSByZXF1aXJlKFwiLi9tZXRhL3VuZXZhbHVhdGVkLmpzb25cIik7XG5jb25zdCBjb250ZW50ID0gcmVxdWlyZShcIi4vbWV0YS9jb250ZW50Lmpzb25cIik7XG5jb25zdCBjb3JlID0gcmVxdWlyZShcIi4vbWV0YS9jb3JlLmpzb25cIik7XG5jb25zdCBmb3JtYXQgPSByZXF1aXJlKFwiLi9tZXRhL2Zvcm1hdC1hbm5vdGF0aW9uLmpzb25cIik7XG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoXCIuL21ldGEvbWV0YS1kYXRhLmpzb25cIik7XG5jb25zdCB2YWxpZGF0aW9uID0gcmVxdWlyZShcIi4vbWV0YS92YWxpZGF0aW9uLmpzb25cIik7XG5jb25zdCBNRVRBX1NVUFBPUlRfREFUQSA9IFtcIi9wcm9wZXJ0aWVzXCJdO1xuZnVuY3Rpb24gYWRkTWV0YVNjaGVtYTIwMjAoJGRhdGEpIHtcbiAgICA7XG4gICAgW1xuICAgICAgICBtZXRhU2NoZW1hLFxuICAgICAgICBhcHBsaWNhdG9yLFxuICAgICAgICB1bmV2YWx1YXRlZCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgY29yZSxcbiAgICAgICAgd2l0aCRkYXRhKHRoaXMsIGZvcm1hdCksXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICB3aXRoJGRhdGEodGhpcywgdmFsaWRhdGlvbiksXG4gICAgXS5mb3JFYWNoKChzY2gpID0+IHRoaXMuYWRkTWV0YVNjaGVtYShzY2gsIHVuZGVmaW5lZCwgZmFsc2UpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgICBmdW5jdGlvbiB3aXRoJGRhdGEoYWp2LCBzY2gpIHtcbiAgICAgICAgcmV0dXJuICRkYXRhID8gYWp2LiRkYXRhTWV0YVNjaGVtYShzY2gsIE1FVEFfU1VQUE9SVF9EQVRBKSA6IHNjaDtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBhZGRNZXRhU2NoZW1hMjAyMDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaXNzaW5nUmVmRXJyb3IgPSBleHBvcnRzLlZhbGlkYXRpb25FcnJvciA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IGV4cG9ydHMuQWp2MjAyMCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCBkcmFmdDIwMjBfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kcmFmdDIwMjBcIik7XG5jb25zdCBkaXNjcmltaW5hdG9yXzEgPSByZXF1aXJlKFwiLi92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvclwiKTtcbmNvbnN0IGpzb25fc2NoZW1hXzIwMjBfMTJfMSA9IHJlcXVpcmUoXCIuL3JlZnMvanNvbi1zY2hlbWEtMjAyMC0xMlwiKTtcbmNvbnN0IE1FVEFfU0NIRU1BX0lEID0gXCJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYVwiO1xuY2xhc3MgQWp2MjAyMCBleHRlbmRzIGNvcmVfMS5kZWZhdWx0IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGR5bmFtaWNSZWY6IHRydWUsXG4gICAgICAgICAgICBuZXh0OiB0cnVlLFxuICAgICAgICAgICAgdW5ldmFsdWF0ZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICBzdXBlci5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIGRyYWZ0MjAyMF8xLmRlZmF1bHQuZm9yRWFjaCgodikgPT4gdGhpcy5hZGRWb2NhYnVsYXJ5KHYpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRpc2NyaW1pbmF0b3JfMS5kZWZhdWx0KTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgY29uc3QgeyAkZGF0YSwgbWV0YSB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBpZiAoIW1ldGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGpzb25fc2NoZW1hXzIwMjBfMTJfMS5kZWZhdWx0LmNhbGwodGhpcywgJGRhdGEpO1xuICAgICAgICB0aGlzLnJlZnNbXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYVwiXSA9IE1FVEFfU0NIRU1BX0lEO1xuICAgIH1cbiAgICBkZWZhdWx0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPVxuICAgICAgICAgICAgc3VwZXIuZGVmYXVsdE1ldGEoKSB8fCAodGhpcy5nZXRTY2hlbWEoTUVUQV9TQ0hFTUFfSUQpID8gTUVUQV9TQ0hFTUFfSUQgOiB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnRzLkFqdjIwMjAgPSBBanYyMDIwO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gQWp2MjAyMDtcbm1vZHVsZS5leHBvcnRzLkFqdjIwMjAgPSBBanYyMDIwO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gQWp2MjAyMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG52YXIgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbnZhciByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWlzc2luZ1JlZkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZfZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9MjAyMC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybWF0TmFtZXMgPSBleHBvcnRzLmZhc3RGb3JtYXRzID0gZXhwb3J0cy5mdWxsRm9ybWF0cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGZtdERlZih2YWxpZGF0ZSwgY29tcGFyZSkge1xuICAgIHJldHVybiB7IHZhbGlkYXRlLCBjb21wYXJlIH07XG59XG5leHBvcnRzLmZ1bGxGb3JtYXRzID0ge1xuICAgIC8vIGRhdGU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBkYXRlOiBmbXREZWYoZGF0ZSwgY29tcGFyZURhdGUpLFxuICAgIC8vIGRhdGUtdGltZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIHRpbWU6IGZtdERlZihnZXRUaW1lKHRydWUpLCBjb21wYXJlVGltZSksXG4gICAgXCJkYXRlLXRpbWVcIjogZm10RGVmKGdldERhdGVUaW1lKHRydWUpLCBjb21wYXJlRGF0ZVRpbWUpLFxuICAgIFwiaXNvLXRpbWVcIjogZm10RGVmKGdldFRpbWUoKSwgY29tcGFyZUlzb1RpbWUpLFxuICAgIFwiaXNvLWRhdGUtdGltZVwiOiBmbXREZWYoZ2V0RGF0ZVRpbWUoKSwgY29tcGFyZUlzb0RhdGVUaW1lKSxcbiAgICAvLyBkdXJhdGlvbjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQVxuICAgIGR1cmF0aW9uOiAvXlAoPyEkKSgoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8oVCg/PVxcZCkoXFxkK0gpPyhcXGQrTSk/KFxcZCtTKT8pP3woXFxkK1cpPykkLyxcbiAgICB1cmksXG4gICAgXCJ1cmktcmVmZXJlbmNlXCI6IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopPyg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopPyg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2ksXG4gICAgLy8gdXJpLXRlbXBsYXRlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU3MFxuICAgIFwidXJpLXRlbXBsYXRlXCI6IC9eKD86KD86W15cXHgwMC1cXHgyMFwiJzw+JVxcXFxeYHt8fV18JVswLTlhLWZdezJ9KXxcXHtbKyMuLzs/Jj0sIUB8XT8oPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KD86LCg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8pKlxcfSkqJC9pLFxuICAgIC8vIEZvciB0aGUgc291cmNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NFxuICAgIC8vIEZvciB0ZXN0IGNhc2VzOiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvZGVtby91cmwtcmVnZXhcbiAgICB1cmw6IC9eKD86aHR0cHM/fGZ0cCk6XFwvXFwvKD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPyEoPzoxMHwxMjcpKD86XFwuXFxkezEsM30pezN9KSg/ISg/OjE2OVxcLjI1NHwxOTJcXC4xNjgpKD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSg/OlxcLig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSooPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfV17Mix9KSkpKD86OlxcZHsyLDV9KT8oPzpcXC9bXlxcc10qKT8kL2l1LFxuICAgIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgICBob3N0bmFtZTogL14oPz0uezEsMjUzfVxcLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXFwuPyQvaSxcbiAgICAvLyBvcHRpbWl6ZWQgaHR0cHM6Ly93d3cuc2FmYXJpYm9va3NvbmxpbmUuY29tL2xpYnJhcnkvdmlldy9yZWd1bGFyLWV4cHJlc3Npb25zLWNvb2tib29rLzk3ODA1OTY4MDI4MzcvY2gwN3MxNi5odG1sXG4gICAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZClcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpJC8sXG4gICAgaXB2NjogL14oKChbMC05YS1mXXsxLDR9Oil7N30oWzAtOWEtZl17MSw0fXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Nn0oOlswLTlhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs1fSgoKDpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs0fSgoKDpbMC05YS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05YS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7M30oKCg6WzAtOWEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsyfSgoKDpbMC05YS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05YS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezF9KCgoOlswLTlhLWZdezEsNH0pezEsNn0pfCgoOlswLTlhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KDooKCg6WzAtOWEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKSkkL2ksXG4gICAgcmVnZXgsXG4gICAgLy8gdXVpZDogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMlxuICAgIHV1aWQ6IC9eKD86dXJuOnV1aWQ6KT9bMC05YS1mXXs4fS0oPzpbMC05YS1mXXs0fS0pezN9WzAtOWEtZl17MTJ9JC9pLFxuICAgIC8vIEpTT04tcG9pbnRlcjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDFcbiAgICAvLyB1cmkgZnJhZ21lbnQ6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUFcbiAgICBcImpzb24tcG9pbnRlclwiOiAvXig/OlxcLyg/Oltefi9dfH4wfH4xKSopKiQvLFxuICAgIFwianNvbi1wb2ludGVyLXVyaS1mcmFnbWVudFwiOiAvXiMoPzpcXC8oPzpbYS16MC05X1xcLS4hJCYnKCkqKyw7Oj1AXXwlWzAtOWEtZl17Mn18fjB8fjEpKikqJC9pLFxuICAgIC8vIHJlbGF0aXZlIEpTT04tcG9pbnRlcjogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtbHVmZi1yZWxhdGl2ZS1qc29uLXBvaW50ZXItMDBcbiAgICBcInJlbGF0aXZlLWpzb24tcG9pbnRlclwiOiAvXig/OjB8WzEtOV1bMC05XSopKD86I3woPzpcXC8oPzpbXn4vXXx+MHx+MSkqKSopJC8sXG4gICAgLy8gdGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSB1c2VkIGJ5IHRoZSBvcGVuYXBpIHNwZWNpZmljYXRpb246IGh0dHBzOi8vc3BlYy5vcGVuYXBpcy5vcmcvb2FzL3YzLjAuMCNkYXRhLXR5cGVzXG4gICAgLy8gYnl0ZTogaHR0cHM6Ly9naXRodWIuY29tL21pZ3VlbG1vdGEvaXMtYmFzZTY0XG4gICAgYnl0ZSxcbiAgICAvLyBzaWduZWQgMzIgYml0IGludGVnZXJcbiAgICBpbnQzMjogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVJbnQzMiB9LFxuICAgIC8vIHNpZ25lZCA2NCBiaXQgaW50ZWdlclxuICAgIGludDY0OiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZUludDY0IH0sXG4gICAgLy8gQy10eXBlIGZsb2F0XG4gICAgZmxvYXQ6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsaWRhdGU6IHZhbGlkYXRlTnVtYmVyIH0sXG4gICAgLy8gQy10eXBlIGRvdWJsZVxuICAgIGRvdWJsZTogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVOdW1iZXIgfSxcbiAgICAvLyBoaW50IHRvIHRoZSBVSSB0byBoaWRlIGlucHV0IHN0cmluZ3NcbiAgICBwYXNzd29yZDogdHJ1ZSxcbiAgICAvLyB1bmNoZWNrZWQgc3RyaW5nIHBheWxvYWRcbiAgICBiaW5hcnk6IHRydWUsXG59O1xuZXhwb3J0cy5mYXN0Rm9ybWF0cyA9IHtcbiAgICAuLi5leHBvcnRzLmZ1bGxGb3JtYXRzLFxuICAgIGRhdGU6IGZtdERlZigvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZCQvLCBjb21wYXJlRGF0ZSksXG4gICAgdGltZTogZm10RGVmKC9eKD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPykkL2ksIGNvbXBhcmVUaW1lKSxcbiAgICBcImRhdGUtdGltZVwiOiBmbXREZWYoL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGR0KD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPykkL2ksIGNvbXBhcmVEYXRlVGltZSksXG4gICAgXCJpc28tdGltZVwiOiBmbXREZWYoL14oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2ksIGNvbXBhcmVJc29UaW1lKSxcbiAgICBcImlzby1kYXRlLXRpbWVcIjogZm10RGVmKC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkW3RcXHNdKD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPyk/JC9pLCBjb21wYXJlSXNvRGF0ZVRpbWUpLFxuICAgIC8vIHVyaTogaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9pcy1teS1qc29uLXZhbGlkL2Jsb2IvbWFzdGVyL2Zvcm1hdHMuanNcbiAgICB1cmk6IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyk/W15cXHNdKiQvaSxcbiAgICBcInVyaS1yZWZlcmVuY2VcIjogL14oPzooPzpbYS16XVthLXowLTkrXFwtLl0qOik/XFwvP1xcLyk/KD86W15cXFxcXFxzI11bXlxccyNdKik/KD86I1teXFxcXFxcc10qKT8kL2ksXG4gICAgLy8gZW1haWwgKHNvdXJjZXMgZnJvbSBqc2VuIHZhbGlkYXRvcik6XG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDEzMjMvdXNpbmctYS1yZWd1bGFyLWV4cHJlc3Npb24tdG8tdmFsaWRhdGUtYW4tZW1haWwtYWRkcmVzcyNhbnN3ZXItODgyOTM2M1xuICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjdmFsaWQtZS1tYWlsLWFkZHJlc3MgKHNlYXJjaCBmb3IgJ3dpbGZ1bCB2aW9sYXRpb24nKVxuICAgIGVtYWlsOiAvXlthLXowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPykqJC9pLFxufTtcbmV4cG9ydHMuZm9ybWF0TmFtZXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmZ1bGxGb3JtYXRzKTtcbmZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I2FwcGVuZGl4LUNcbiAgICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG59XG5jb25zdCBEQVRFID0gL14oXFxkXFxkXFxkXFxkKS0oXFxkXFxkKS0oXFxkXFxkKSQvO1xuY29uc3QgREFZUyA9IFswLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcbmZ1bmN0aW9uIGRhdGUoc3RyKSB7XG4gICAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIGNvbnN0IG1hdGNoZXMgPSBEQVRFLmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB5ZWFyID0gK21hdGNoZXNbMV07XG4gICAgY29uc3QgbW9udGggPSArbWF0Y2hlc1syXTtcbiAgICBjb25zdCBkYXkgPSArbWF0Y2hlc1szXTtcbiAgICByZXR1cm4gKG1vbnRoID49IDEgJiZcbiAgICAgICAgbW9udGggPD0gMTIgJiZcbiAgICAgICAgZGF5ID49IDEgJiZcbiAgICAgICAgZGF5IDw9IChtb250aCA9PT0gMiAmJiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiBEQVlTW21vbnRoXSkpO1xufVxuZnVuY3Rpb24gY29tcGFyZURhdGUoZDEsIGQyKSB7XG4gICAgaWYgKCEoZDEgJiYgZDIpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChkMSA+IGQyKVxuICAgICAgICByZXR1cm4gMTtcbiAgICBpZiAoZDEgPCBkMilcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xufVxuY29uc3QgVElNRSA9IC9eKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCg/OlxcLlxcZCspPykoenwoWystXSkoXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPyk/JC9pO1xuZnVuY3Rpb24gZ2V0VGltZShzdHJpY3RUaW1lWm9uZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiB0aW1lKHN0cikge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gVElNRS5leGVjKHN0cik7XG4gICAgICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaHIgPSArbWF0Y2hlc1sxXTtcbiAgICAgICAgY29uc3QgbWluID0gK21hdGNoZXNbMl07XG4gICAgICAgIGNvbnN0IHNlYyA9ICttYXRjaGVzWzNdO1xuICAgICAgICBjb25zdCB0eiA9IG1hdGNoZXNbNF07XG4gICAgICAgIGNvbnN0IHR6U2lnbiA9IG1hdGNoZXNbNV0gPT09IFwiLVwiID8gLTEgOiAxO1xuICAgICAgICBjb25zdCB0ekggPSArKG1hdGNoZXNbNl0gfHwgMCk7XG4gICAgICAgIGNvbnN0IHR6TSA9ICsobWF0Y2hlc1s3XSB8fCAwKTtcbiAgICAgICAgaWYgKHR6SCA+IDIzIHx8IHR6TSA+IDU5IHx8IChzdHJpY3RUaW1lWm9uZSAmJiAhdHopKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaHIgPD0gMjMgJiYgbWluIDw9IDU5ICYmIHNlYyA8IDYwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGxlYXAgc2Vjb25kXG4gICAgICAgIGNvbnN0IHV0Y01pbiA9IG1pbiAtIHR6TSAqIHR6U2lnbjtcbiAgICAgICAgY29uc3QgdXRjSHIgPSBociAtIHR6SCAqIHR6U2lnbiAtICh1dGNNaW4gPCAwID8gMSA6IDApO1xuICAgICAgICByZXR1cm4gKHV0Y0hyID09PSAyMyB8fCB1dGNIciA9PT0gLTEpICYmICh1dGNNaW4gPT09IDU5IHx8IHV0Y01pbiA9PT0gLTEpICYmIHNlYyA8IDYxO1xuICAgIH07XG59XG5mdW5jdGlvbiBjb21wYXJlVGltZShzMSwgczIpIHtcbiAgICBpZiAoIShzMSAmJiBzMikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdDEgPSBuZXcgRGF0ZShcIjIwMjAtMDEtMDFUXCIgKyBzMSkudmFsdWVPZigpO1xuICAgIGNvbnN0IHQyID0gbmV3IERhdGUoXCIyMDIwLTAxLTAxVFwiICsgczIpLnZhbHVlT2YoKTtcbiAgICBpZiAoISh0MSAmJiB0MikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHQxIC0gdDI7XG59XG5mdW5jdGlvbiBjb21wYXJlSXNvVGltZSh0MSwgdDIpIHtcbiAgICBpZiAoISh0MSAmJiB0MikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYTEgPSBUSU1FLmV4ZWModDEpO1xuICAgIGNvbnN0IGEyID0gVElNRS5leGVjKHQyKTtcbiAgICBpZiAoIShhMSAmJiBhMikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdDEgPSBhMVsxXSArIGExWzJdICsgYTFbM107XG4gICAgdDIgPSBhMlsxXSArIGEyWzJdICsgYTJbM107XG4gICAgaWYgKHQxID4gdDIpXG4gICAgICAgIHJldHVybiAxO1xuICAgIGlmICh0MSA8IHQyKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG59XG5jb25zdCBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBnZXREYXRlVGltZShzdHJpY3RUaW1lWm9uZSkge1xuICAgIGNvbnN0IHRpbWUgPSBnZXRUaW1lKHN0cmljdFRpbWVab25lKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGF0ZV90aW1lKHN0cikge1xuICAgICAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICAgICAgICByZXR1cm4gZGF0ZVRpbWUubGVuZ3RoID09PSAyICYmIGRhdGUoZGF0ZVRpbWVbMF0pICYmIHRpbWUoZGF0ZVRpbWVbMV0pO1xuICAgIH07XG59XG5mdW5jdGlvbiBjb21wYXJlRGF0ZVRpbWUoZHQxLCBkdDIpIHtcbiAgICBpZiAoIShkdDEgJiYgZHQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBkMSA9IG5ldyBEYXRlKGR0MSkudmFsdWVPZigpO1xuICAgIGNvbnN0IGQyID0gbmV3IERhdGUoZHQyKS52YWx1ZU9mKCk7XG4gICAgaWYgKCEoZDEgJiYgZDIpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBkMSAtIGQyO1xufVxuZnVuY3Rpb24gY29tcGFyZUlzb0RhdGVUaW1lKGR0MSwgZHQyKSB7XG4gICAgaWYgKCEoZHQxICYmIGR0MikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgW2QxLCB0MV0gPSBkdDEuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gICAgY29uc3QgW2QyLCB0Ml0gPSBkdDIuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gICAgY29uc3QgcmVzID0gY29tcGFyZURhdGUoZDEsIGQyKTtcbiAgICBpZiAocmVzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlcyB8fCBjb21wYXJlVGltZSh0MSwgdDIpO1xufVxuY29uc3QgTk9UX1VSSV9GUkFHTUVOVCA9IC9cXC98Oi87XG5jb25zdCBVUkkgPSAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PV18JVswLTlhLWZdezJ9KSopKD86OlxcZCopPyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKT98KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopKD86XFw/KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/JC9pO1xuZnVuY3Rpb24gdXJpKHN0cikge1xuICAgIC8vIGh0dHA6Ly9qbXJ3YXJlLmNvbS9hcnRpY2xlcy8yMDA5L3VyaV9yZWdleHAvVVJJX3JlZ2V4Lmh0bWwgKyBvcHRpb25hbCBwcm90b2NvbCArIHJlcXVpcmVkIFwiLlwiXG4gICAgcmV0dXJuIE5PVF9VUklfRlJBR01FTlQudGVzdChzdHIpICYmIFVSSS50ZXN0KHN0cik7XG59XG5jb25zdCBCWVRFID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvZ207XG5mdW5jdGlvbiBieXRlKHN0cikge1xuICAgIEJZVEUubGFzdEluZGV4ID0gMDtcbiAgICByZXR1cm4gQllURS50ZXN0KHN0cik7XG59XG5jb25zdCBNSU5fSU5UMzIgPSAtKDIgKiogMzEpO1xuY29uc3QgTUFYX0lOVDMyID0gMiAqKiAzMSAtIDE7XG5mdW5jdGlvbiB2YWxpZGF0ZUludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlIDw9IE1BWF9JTlQzMiAmJiB2YWx1ZSA+PSBNSU5fSU5UMzI7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUludDY0KHZhbHVlKSB7XG4gICAgLy8gSlNPTiBhbmQgamF2YXNjcmlwdCBtYXggSW50IGlzIDIqKjUzLCBzbyBhbnkgaW50IHRoYXQgcGFzc2VzIGlzSW50ZWdlciBpcyB2YWxpZCBmb3IgSW50NjRcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlcigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmNvbnN0IFpfQU5DSE9SID0gL1teXFxcXF1cXFxcWi87XG5mdW5jdGlvbiByZWdleChzdHIpIHtcbiAgICBpZiAoWl9BTkNIT1IudGVzdChzdHIpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgbmV3IFJlZ0V4cChzdHIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFwcGxpY2F0b3JfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2F0b3JcIik7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGRyYWZ0N1ZvY2FidWxhcmllcyA9IFtcbiAgICBjb3JlXzEuZGVmYXVsdCxcbiAgICB2YWxpZGF0aW9uXzEuZGVmYXVsdCxcbiAgICAoMCwgYXBwbGljYXRvcl8xLmRlZmF1bHQpKCksXG4gICAgZm9ybWF0XzEuZGVmYXVsdCxcbiAgICBtZXRhZGF0YV8xLm1ldGFkYXRhVm9jYWJ1bGFyeSxcbiAgICBtZXRhZGF0YV8xLmNvbnRlbnRWb2NhYnVsYXJ5LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0N1ZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0Ny5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWlzc2luZ1JlZkVycm9yID0gZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3IgPSBleHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLktleXdvcmRDeHQgPSBleHBvcnRzLkFqdiA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCBkcmFmdDdfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kcmFmdDdcIik7XG5jb25zdCBkaXNjcmltaW5hdG9yXzEgPSByZXF1aXJlKFwiLi92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvclwiKTtcbmNvbnN0IGRyYWZ0N01ldGFTY2hlbWEgPSByZXF1aXJlKFwiLi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA3Lmpzb25cIik7XG5jb25zdCBNRVRBX1NVUFBPUlRfREFUQSA9IFtcIi9wcm9wZXJ0aWVzXCJdO1xuY29uc3QgTUVUQV9TQ0hFTUFfSUQgPSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hXCI7XG5jbGFzcyBBanYgZXh0ZW5kcyBjb3JlXzEuZGVmYXVsdCB7XG4gICAgX2FkZFZvY2FidWxhcmllcygpIHtcbiAgICAgICAgc3VwZXIuX2FkZFZvY2FidWxhcmllcygpO1xuICAgICAgICBkcmFmdDdfMS5kZWZhdWx0LmZvckVhY2goKHYpID0+IHRoaXMuYWRkVm9jYWJ1bGFyeSh2KSk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkaXNjcmltaW5hdG9yXzEuZGVmYXVsdCk7XG4gICAgfVxuICAgIF9hZGREZWZhdWx0TWV0YVNjaGVtYSgpIHtcbiAgICAgICAgc3VwZXIuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmICghdGhpcy5vcHRzLm1ldGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1ldGFTY2hlbWEgPSB0aGlzLm9wdHMuJGRhdGFcbiAgICAgICAgICAgID8gdGhpcy4kZGF0YU1ldGFTY2hlbWEoZHJhZnQ3TWV0YVNjaGVtYSwgTUVUQV9TVVBQT1JUX0RBVEEpXG4gICAgICAgICAgICA6IGRyYWZ0N01ldGFTY2hlbWE7XG4gICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBNRVRBX1NDSEVNQV9JRCwgZmFsc2UpO1xuICAgICAgICB0aGlzLnJlZnNbXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYVwiXSA9IE1FVEFfU0NIRU1BX0lEO1xuICAgIH1cbiAgICBkZWZhdWx0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPVxuICAgICAgICAgICAgc3VwZXIuZGVmYXVsdE1ldGEoKSB8fCAodGhpcy5nZXRTY2hlbWEoTUVUQV9TQ0hFTUFfSUQpID8gTUVUQV9TQ0hFTUFfSUQgOiB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnRzLkFqdiA9IEFqdjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IEFqdjtcbm1vZHVsZS5leHBvcnRzLkFqdiA9IEFqdjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG52YXIgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbnZhciByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWlzc2luZ1JlZkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZfZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWp2LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mb3JtYXRMaW1pdERlZmluaXRpb24gPSB2b2lkIDA7XG5jb25zdCBhanZfMSA9IHJlcXVpcmUoXCJhanZcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3Qgb3BzID0gY29kZWdlbl8xLm9wZXJhdG9ycztcbmNvbnN0IEtXRHMgPSB7XG4gICAgZm9ybWF0TWF4aW11bTogeyBva1N0cjogXCI8PVwiLCBvazogb3BzLkxURSwgZmFpbDogb3BzLkdUIH0sXG4gICAgZm9ybWF0TWluaW11bTogeyBva1N0cjogXCI+PVwiLCBvazogb3BzLkdURSwgZmFpbDogb3BzLkxUIH0sXG4gICAgZm9ybWF0RXhjbHVzaXZlTWF4aW11bTogeyBva1N0cjogXCI8XCIsIG9rOiBvcHMuTFQsIGZhaWw6IG9wcy5HVEUgfSxcbiAgICBmb3JtYXRFeGNsdXNpdmVNaW5pbXVtOiB7IG9rU3RyOiBcIj5cIiwgb2s6IG9wcy5HVCwgZmFpbDogb3BzLkxURSB9LFxufTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBzaG91bGQgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuZXhwb3J0cy5mb3JtYXRMaW1pdERlZmluaXRpb24gPSB7XG4gICAga2V5d29yZDogT2JqZWN0LmtleXMoS1dEcyksXG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgICAgICBpZiAoIW9wdHMudmFsaWRhdGVGb3JtYXRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmQ3h0ID0gbmV3IGFqdl8xLktleXdvcmRDeHQoaXQsIHNlbGYuUlVMRVMuYWxsLmZvcm1hdC5kZWZpbml0aW9uLCBcImZvcm1hdFwiKTtcbiAgICAgICAgaWYgKGZDeHQuJGRhdGEpXG4gICAgICAgICAgICB2YWxpZGF0ZSREYXRhRm9ybWF0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybWF0KCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlJERhdGFGb3JtYXQoKSB7XG4gICAgICAgICAgICBjb25zdCBmbXRzID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IHNlbGYuZm9ybWF0cyxcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLmNvbnN0KFwiZm10XCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10c31bJHtmQ3h0LnNjaGVtYUNvZGV9XWApO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLm9yKSgoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtmbXR9ICE9IFwib2JqZWN0XCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdH0gaW5zdGFuY2VvZiBSZWdFeHBgLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtmbXR9LmNvbXBhcmUgIT0gXCJmdW5jdGlvblwiYCwgY29tcGFyZUNvZGUoZm10KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZkN4dC5zY2hlbWE7XG4gICAgICAgICAgICBjb25zdCBmbXREZWYgPSBzZWxmLmZvcm1hdHNbZm9ybWF0XTtcbiAgICAgICAgICAgIGlmICghZm10RGVmIHx8IGZtdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAgICAgICAgICAgZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGZtdERlZi5jb21wYXJlICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke2tleXdvcmR9XCI6IGZvcm1hdCBcIiR7Zm9ybWF0fVwiIGRvZXMgbm90IGRlZmluZSBcImNvbXBhcmVcIiBmdW5jdGlvbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGZvcm1hdCxcbiAgICAgICAgICAgICAgICByZWY6IGZtdERlZixcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShmb3JtYXQpfWAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoY29tcGFyZUNvZGUoZm10KSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyZUNvZGUoZm10KSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXR9LmNvbXBhcmUoJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSkgJHtLV0RzW2tleXdvcmRdLmZhaWx9IDBgO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcImZvcm1hdFwiXSxcbn07XG5jb25zdCBmb3JtYXRMaW1pdFBsdWdpbiA9IChhanYpID0+IHtcbiAgICBhanYuYWRkS2V5d29yZChleHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGFqdjtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRMaW1pdFBsdWdpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0c18xID0gcmVxdWlyZShcIi4vZm9ybWF0c1wiKTtcbmNvbnN0IGxpbWl0XzEgPSByZXF1aXJlKFwiLi9saW1pdFwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCJhanYvZGlzdC9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBmdWxsTmFtZSA9IG5ldyBjb2RlZ2VuXzEuTmFtZShcImZ1bGxGb3JtYXRzXCIpO1xuY29uc3QgZmFzdE5hbWUgPSBuZXcgY29kZWdlbl8xLk5hbWUoXCJmYXN0Rm9ybWF0c1wiKTtcbmNvbnN0IGZvcm1hdHNQbHVnaW4gPSAoYWp2LCBvcHRzID0geyBrZXl3b3JkczogdHJ1ZSB9KSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICAgICAgYWRkRm9ybWF0cyhhanYsIG9wdHMsIGZvcm1hdHNfMS5mdWxsRm9ybWF0cywgZnVsbE5hbWUpO1xuICAgICAgICByZXR1cm4gYWp2O1xuICAgIH1cbiAgICBjb25zdCBbZm9ybWF0cywgZXhwb3J0TmFtZV0gPSBvcHRzLm1vZGUgPT09IFwiZmFzdFwiID8gW2Zvcm1hdHNfMS5mYXN0Rm9ybWF0cywgZmFzdE5hbWVdIDogW2Zvcm1hdHNfMS5mdWxsRm9ybWF0cywgZnVsbE5hbWVdO1xuICAgIGNvbnN0IGxpc3QgPSBvcHRzLmZvcm1hdHMgfHwgZm9ybWF0c18xLmZvcm1hdE5hbWVzO1xuICAgIGFkZEZvcm1hdHMoYWp2LCBsaXN0LCBmb3JtYXRzLCBleHBvcnROYW1lKTtcbiAgICBpZiAob3B0cy5rZXl3b3JkcylcbiAgICAgICAgKDAsIGxpbWl0XzEuZGVmYXVsdCkoYWp2KTtcbiAgICByZXR1cm4gYWp2O1xufTtcbmZvcm1hdHNQbHVnaW4uZ2V0ID0gKG5hbWUsIG1vZGUgPSBcImZ1bGxcIikgPT4ge1xuICAgIGNvbnN0IGZvcm1hdHMgPSBtb2RlID09PSBcImZhc3RcIiA/IGZvcm1hdHNfMS5mYXN0Rm9ybWF0cyA6IGZvcm1hdHNfMS5mdWxsRm9ybWF0cztcbiAgICBjb25zdCBmID0gZm9ybWF0c1tuYW1lXTtcbiAgICBpZiAoIWYpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmb3JtYXQgXCIke25hbWV9XCJgKTtcbiAgICByZXR1cm4gZjtcbn07XG5mdW5jdGlvbiBhZGRGb3JtYXRzKGFqdiwgbGlzdCwgZnMsIGV4cG9ydE5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIF9iO1xuICAgIChfYSA9IChfYiA9IGFqdi5vcHRzLmNvZGUpLmZvcm1hdHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYi5mb3JtYXRzID0gKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi1mb3JtYXRzL2Rpc3QvZm9ybWF0c1wiKS4ke2V4cG9ydE5hbWV9YCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGxpc3QpXG4gICAgICAgIGFqdi5hZGRGb3JtYXQoZiwgZnNbZl0pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZm9ybWF0c1BsdWdpbjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1hdHNQbHVnaW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJjb25zdCBjb3B5UHJvcGVydHkgPSAodG8sIGZyb20sIHByb3BlcnR5LCBpZ25vcmVOb25Db25maWd1cmFibGUpID0+IHtcblx0Ly8gYEZ1bmN0aW9uI2xlbmd0aGAgc2hvdWxkIHJlZmxlY3QgdGhlIHBhcmFtZXRlcnMgb2YgYHRvYCBub3QgYGZyb21gIHNpbmNlIHdlIGtlZXAgaXRzIGJvZHkuXG5cdC8vIGBGdW5jdGlvbiNwcm90b3R5cGVgIGlzIG5vbi13cml0YWJsZSBhbmQgbm9uLWNvbmZpZ3VyYWJsZSBzbyBjYW4gbmV2ZXIgYmUgbW9kaWZpZWQuXG5cdGlmIChwcm9wZXJ0eSA9PT0gJ2xlbmd0aCcgfHwgcHJvcGVydHkgPT09ICdwcm90b3R5cGUnKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gYEZ1bmN0aW9uI2FyZ3VtZW50c2AgYW5kIGBGdW5jdGlvbiNjYWxsZXJgIHNob3VsZCBub3QgYmUgY29waWVkLiBUaGV5IHdlcmUgcmVwb3J0ZWQgdG8gYmUgcHJlc2VudCBpbiBgUmVmbGVjdC5vd25LZXlzYCBmb3Igc29tZSBkZXZpY2VzIGluIFJlYWN0IE5hdGl2ZSAoIzQxKSwgc28gd2UgZXhwbGljaXRseSBpZ25vcmUgdGhlbSBoZXJlLlxuXHRpZiAocHJvcGVydHkgPT09ICdhcmd1bWVudHMnIHx8IHByb3BlcnR5ID09PSAnY2FsbGVyJykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHRvRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG8sIHByb3BlcnR5KTtcblx0Y29uc3QgZnJvbURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIHByb3BlcnR5KTtcblxuXHRpZiAoIWNhbkNvcHlQcm9wZXJ0eSh0b0Rlc2NyaXB0b3IsIGZyb21EZXNjcmlwdG9yKSAmJiBpZ25vcmVOb25Db25maWd1cmFibGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIHByb3BlcnR5LCBmcm9tRGVzY3JpcHRvcik7XG59O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5KClgIHRocm93cyBpZiB0aGUgcHJvcGVydHkgZXhpc3RzLCBpcyBub3QgY29uZmlndXJhYmxlIGFuZCBlaXRoZXI6XG4vLyAtIG9uZSBpdHMgZGVzY3JpcHRvcnMgaXMgY2hhbmdlZFxuLy8gLSBpdCBpcyBub24td3JpdGFibGUgYW5kIGl0cyB2YWx1ZSBpcyBjaGFuZ2VkXG5jb25zdCBjYW5Db3B5UHJvcGVydHkgPSBmdW5jdGlvbiAodG9EZXNjcmlwdG9yLCBmcm9tRGVzY3JpcHRvcikge1xuXHRyZXR1cm4gdG9EZXNjcmlwdG9yID09PSB1bmRlZmluZWQgfHwgdG9EZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSB8fCAoXG5cdFx0dG9EZXNjcmlwdG9yLndyaXRhYmxlID09PSBmcm9tRGVzY3JpcHRvci53cml0YWJsZVxuXHRcdCYmIHRvRGVzY3JpcHRvci5lbnVtZXJhYmxlID09PSBmcm9tRGVzY3JpcHRvci5lbnVtZXJhYmxlXG5cdFx0JiYgdG9EZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9PT0gZnJvbURlc2NyaXB0b3IuY29uZmlndXJhYmxlXG5cdFx0JiYgKHRvRGVzY3JpcHRvci53cml0YWJsZSB8fCB0b0Rlc2NyaXB0b3IudmFsdWUgPT09IGZyb21EZXNjcmlwdG9yLnZhbHVlKVxuXHQpO1xufTtcblxuY29uc3QgY2hhbmdlUHJvdG90eXBlID0gKHRvLCBmcm9tKSA9PiB7XG5cdGNvbnN0IGZyb21Qcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJvbSk7XG5cdGlmIChmcm9tUHJvdG90eXBlID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodG8pKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHRvLCBmcm9tUHJvdG90eXBlKTtcbn07XG5cbmNvbnN0IHdyYXBwZWRUb1N0cmluZyA9ICh3aXRoTmFtZSwgZnJvbUJvZHkpID0+IGAvKiBXcmFwcGVkICR7d2l0aE5hbWV9Ki9cXG4ke2Zyb21Cb2R5fWA7XG5cbmNvbnN0IHRvU3RyaW5nRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnKTtcbmNvbnN0IHRvU3RyaW5nTmFtZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLCAnbmFtZScpO1xuXG4vLyBXZSBjYWxsIGBmcm9tLnRvU3RyaW5nKClgIGVhcmx5IChub3QgbGF6aWx5KSB0byBlbnN1cmUgYGZyb21gIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vIFdlIHVzZSBgYmluZCgpYCBpbnN0ZWFkIG9mIGEgY2xvc3VyZSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuLy8gQ2FsbGluZyBgZnJvbS50b1N0cmluZygpYCBlYXJseSBhbHNvIGFsbG93cyBjYWNoaW5nIGl0IGluIGNhc2UgYHRvLnRvU3RyaW5nKClgIGlzIGNhbGxlZCBzZXZlcmFsIHRpbWVzLlxuY29uc3QgY2hhbmdlVG9TdHJpbmcgPSAodG8sIGZyb20sIG5hbWUpID0+IHtcblx0Y29uc3Qgd2l0aE5hbWUgPSBuYW1lID09PSAnJyA/ICcnIDogYHdpdGggJHtuYW1lLnRyaW0oKX0oKSBgO1xuXHRjb25zdCBuZXdUb1N0cmluZyA9IHdyYXBwZWRUb1N0cmluZy5iaW5kKG51bGwsIHdpdGhOYW1lLCBmcm9tLnRvU3RyaW5nKCkpO1xuXHQvLyBFbnN1cmUgYHRvLnRvU3RyaW5nLnRvU3RyaW5nYCBpcyBub24tZW51bWVyYWJsZSBhbmQgaGFzIHRoZSBzYW1lIGBzYW1lYFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3VG9TdHJpbmcsICduYW1lJywgdG9TdHJpbmdOYW1lKTtcblx0Y29uc3Qge3dyaXRhYmxlLCBlbnVtZXJhYmxlLCBjb25maWd1cmFibGV9ID0gdG9TdHJpbmdEZXNjcmlwdG9yOyAvLyBXZSBkZXN0cnVjdHVlIHRvIGF2b2lkIGEgcG90ZW50aWFsIGBnZXRgIGRlc2NyaXB0b3IuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0bywgJ3RvU3RyaW5nJywge3ZhbHVlOiBuZXdUb1N0cmluZywgd3JpdGFibGUsIGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZX0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWltaWNGdW5jdGlvbih0bywgZnJvbSwge2lnbm9yZU5vbkNvbmZpZ3VyYWJsZSA9IGZhbHNlfSA9IHt9KSB7XG5cdGNvbnN0IHtuYW1lfSA9IHRvO1xuXG5cdGZvciAoY29uc3QgcHJvcGVydHkgb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0Y29weVByb3BlcnR5KHRvLCBmcm9tLCBwcm9wZXJ0eSwgaWdub3JlTm9uQ29uZmlndXJhYmxlKTtcblx0fVxuXG5cdGNoYW5nZVByb3RvdHlwZSh0bywgZnJvbSk7XG5cdGNoYW5nZVRvU3RyaW5nKHRvLCBmcm9tLCBuYW1lKTtcblxuXHRyZXR1cm4gdG87XG59XG4iLCJpbXBvcnQgbWltaWNGdW5jdGlvbiBmcm9tICdtaW1pYy1mdW5jdGlvbic7XG5cbmNvbnN0IGRlYm91bmNlRnVuY3Rpb24gPSAoaW5wdXRGdW5jdGlvbiwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmICh0eXBlb2YgaW5wdXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uLCBnb3QgXFxgJHt0eXBlb2YgaW5wdXRGdW5jdGlvbn1cXGBgKTtcblx0fVxuXG5cdGNvbnN0IHtcblx0XHR3YWl0ID0gMCxcblx0XHRtYXhXYWl0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuXHRcdGJlZm9yZSA9IGZhbHNlLFxuXHRcdGFmdGVyID0gdHJ1ZSxcblx0fSA9IG9wdGlvbnM7XG5cblx0aWYgKHdhaXQgPCAwIHx8IG1heFdhaXQgPCAwKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2B3YWl0YCBhbmQgYG1heFdhaXRgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLicpO1xuXHR9XG5cblx0aWYgKCFiZWZvcmUgJiYgIWFmdGVyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCb3RoIGBiZWZvcmVgIGFuZCBgYWZ0ZXJgIGFyZSBmYWxzZSwgZnVuY3Rpb24gd291bGRuXFwndCBiZSBjYWxsZWQuJyk7XG5cdH1cblxuXHRsZXQgdGltZW91dDtcblx0bGV0IG1heFRpbWVvdXQ7XG5cdGxldCByZXN1bHQ7XG5cblx0Y29uc3QgZGVib3VuY2VkRnVuY3Rpb24gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHVuaWNvcm4vbm8tdGhpcy1hc3NpZ25tZW50XG5cblx0XHRjb25zdCBsYXRlciA9ICgpID0+IHtcblx0XHRcdHRpbWVvdXQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChtYXhUaW1lb3V0KSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dChtYXhUaW1lb3V0KTtcblx0XHRcdFx0bWF4VGltZW91dCA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFmdGVyKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGlucHV0RnVuY3Rpb24uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzXyk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IG1heExhdGVyID0gKCkgPT4ge1xuXHRcdFx0bWF4VGltZW91dCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKHRpbWVvdXQpIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHR0aW1lb3V0ID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWZ0ZXIpIHtcblx0XHRcdFx0cmVzdWx0ID0gaW5wdXRGdW5jdGlvbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHNfKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgc2hvdWxkQ2FsbE5vdyA9IGJlZm9yZSAmJiAhdGltZW91dDtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0dGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuXG5cdFx0aWYgKG1heFdhaXQgPiAwICYmIG1heFdhaXQgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiAhbWF4VGltZW91dCkge1xuXHRcdFx0bWF4VGltZW91dCA9IHNldFRpbWVvdXQobWF4TGF0ZXIsIG1heFdhaXQpO1xuXHRcdH1cblxuXHRcdGlmIChzaG91bGRDYWxsTm93KSB7XG5cdFx0XHRyZXN1bHQgPSBpbnB1dEZ1bmN0aW9uLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50c18pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0bWltaWNGdW5jdGlvbihkZWJvdW5jZWRGdW5jdGlvbiwgaW5wdXRGdW5jdGlvbik7XG5cblx0ZGVib3VuY2VkRnVuY3Rpb24uY2FuY2VsID0gKCkgPT4ge1xuXHRcdGlmICh0aW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHR0aW1lb3V0ID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmIChtYXhUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQobWF4VGltZW91dCk7XG5cdFx0XHRtYXhUaW1lb3V0ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gZGVib3VuY2VkRnVuY3Rpb247XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZUZ1bmN0aW9uO1xuIiwiLy8gTm90ZTogdGhpcyBpcyB0aGUgc2VtdmVyLm9yZyB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoYXQgaXQgaW1wbGVtZW50c1xuLy8gTm90IG5lY2Vzc2FyaWx5IHRoZSBwYWNrYWdlIHZlcnNpb24gb2YgdGhpcyBjb2RlLlxuY29uc3QgU0VNVkVSX1NQRUNfVkVSU0lPTiA9ICcyLjAuMCdcblxuY29uc3QgTUFYX0xFTkdUSCA9IDI1NlxuY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA5MDA3MTk5MjU0NzQwOTkxXG5cbi8vIE1heCBzYWZlIHNlZ21lbnQgbGVuZ3RoIGZvciBjb2VyY2lvbi5cbmNvbnN0IE1BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEggPSAxNlxuXG4vLyBNYXggc2FmZSBsZW5ndGggZm9yIGEgYnVpbGQgaWRlbnRpZmllci4gVGhlIG1heCBsZW5ndGggbWludXMgNiBjaGFyYWN0ZXJzIGZvclxuLy8gdGhlIHNob3J0ZXN0IHZlcnNpb24gd2l0aCBhIGJ1aWxkIDAuMC4wK0JVSUxELlxuY29uc3QgTUFYX1NBRkVfQlVJTERfTEVOR1RIID0gTUFYX0xFTkdUSCAtIDZcblxuY29uc3QgUkVMRUFTRV9UWVBFUyA9IFtcbiAgJ21ham9yJyxcbiAgJ3ByZW1ham9yJyxcbiAgJ21pbm9yJyxcbiAgJ3ByZW1pbm9yJyxcbiAgJ3BhdGNoJyxcbiAgJ3ByZXBhdGNoJyxcbiAgJ3ByZXJlbGVhc2UnLFxuXVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTUFYX0xFTkdUSCxcbiAgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCxcbiAgTUFYX1NBRkVfQlVJTERfTEVOR1RILFxuICBNQVhfU0FGRV9JTlRFR0VSLFxuICBSRUxFQVNFX1RZUEVTLFxuICBTRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRTogMGIwMDEsXG4gIEZMQUdfTE9PU0U6IDBiMDEwLFxufVxuIiwiY29uc3QgZGVidWcgPSAoXG4gIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICBwcm9jZXNzLmVudiAmJlxuICBwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmXG4gIC9cXGJzZW12ZXJcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpXG4pID8gKC4uLmFyZ3MpID0+IGNvbnNvbGUuZXJyb3IoJ1NFTVZFUicsIC4uLmFyZ3MpXG4gIDogKCkgPT4ge31cblxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1Z1xuIiwiY29uc3Qge1xuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9MRU5HVEgsXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJylcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHt9XG5cbi8vIFRoZSBhY3R1YWwgcmVnZXhwcyBnbyBvbiBleHBvcnRzLnJlXG5jb25zdCByZSA9IGV4cG9ydHMucmUgPSBbXVxuY29uc3Qgc2FmZVJlID0gZXhwb3J0cy5zYWZlUmUgPSBbXVxuY29uc3Qgc3JjID0gZXhwb3J0cy5zcmMgPSBbXVxuY29uc3QgdCA9IGV4cG9ydHMudCA9IHt9XG5sZXQgUiA9IDBcblxuY29uc3QgTEVUVEVSREFTSE5VTUJFUiA9ICdbYS16QS1aMC05LV0nXG5cbi8vIFJlcGxhY2Ugc29tZSBncmVlZHkgcmVnZXggdG9rZW5zIHRvIHByZXZlbnQgcmVnZXggZG9zIGlzc3Vlcy4gVGhlc2UgcmVnZXggYXJlXG4vLyB1c2VkIGludGVybmFsbHkgdmlhIHRoZSBzYWZlUmUgb2JqZWN0IHNpbmNlIGFsbCBpbnB1dHMgaW4gdGhpcyBsaWJyYXJ5IGdldFxuLy8gbm9ybWFsaXplZCBmaXJzdCB0byB0cmltIGFuZCBjb2xsYXBzZSBhbGwgZXh0cmEgd2hpdGVzcGFjZS4gVGhlIG9yaWdpbmFsXG4vLyByZWdleGVzIGFyZSBleHBvcnRlZCBmb3IgdXNlcmxhbmQgY29uc3VtcHRpb24gYW5kIGxvd2VyIGxldmVsIHVzYWdlLiBBXG4vLyBmdXR1cmUgYnJlYWtpbmcgY2hhbmdlIGNvdWxkIGV4cG9ydCB0aGUgc2FmZXIgcmVnZXggb25seSB3aXRoIGEgbm90ZSB0aGF0XG4vLyBhbGwgaW5wdXQgc2hvdWxkIGhhdmUgZXh0cmEgd2hpdGVzcGFjZSByZW1vdmVkLlxuY29uc3Qgc2FmZVJlZ2V4UmVwbGFjZW1lbnRzID0gW1xuICBbJ1xcXFxzJywgMV0sXG4gIFsnXFxcXGQnLCBNQVhfTEVOR1RIXSxcbiAgW0xFVFRFUkRBU0hOVU1CRVIsIE1BWF9TQUZFX0JVSUxEX0xFTkdUSF0sXG5dXG5cbmNvbnN0IG1ha2VTYWZlUmVnZXggPSAodmFsdWUpID0+IHtcbiAgZm9yIChjb25zdCBbdG9rZW4sIG1heF0gb2Ygc2FmZVJlZ2V4UmVwbGFjZW1lbnRzKSB7XG4gICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgLnNwbGl0KGAke3Rva2VufSpgKS5qb2luKGAke3Rva2VufXswLCR7bWF4fX1gKVxuICAgICAgLnNwbGl0KGAke3Rva2VufStgKS5qb2luKGAke3Rva2VufXsxLCR7bWF4fX1gKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG5jb25zdCBjcmVhdGVUb2tlbiA9IChuYW1lLCB2YWx1ZSwgaXNHbG9iYWwpID0+IHtcbiAgY29uc3Qgc2FmZSA9IG1ha2VTYWZlUmVnZXgodmFsdWUpXG4gIGNvbnN0IGluZGV4ID0gUisrXG4gIGRlYnVnKG5hbWUsIGluZGV4LCB2YWx1ZSlcbiAgdFtuYW1lXSA9IGluZGV4XG4gIHNyY1tpbmRleF0gPSB2YWx1ZVxuICByZVtpbmRleF0gPSBuZXcgUmVnRXhwKHZhbHVlLCBpc0dsb2JhbCA/ICdnJyA6IHVuZGVmaW5lZClcbiAgc2FmZVJlW2luZGV4XSA9IG5ldyBSZWdFeHAoc2FmZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgUmVndWxhciBFeHByZXNzaW9ucyBjYW4gYmUgdXNlZCBmb3IgdG9rZW5pemluZyxcbi8vIHZhbGlkYXRpbmcsIGFuZCBwYXJzaW5nIFNlbVZlciB2ZXJzaW9uIHN0cmluZ3MuXG5cbi8vICMjIE51bWVyaWMgSWRlbnRpZmllclxuLy8gQSBzaW5nbGUgYDBgLCBvciBhIG5vbi16ZXJvIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBkaWdpdHMuXG5cbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUicsICcwfFsxLTldXFxcXGQqJylcbmNyZWF0ZVRva2VuKCdOVU1FUklDSURFTlRJRklFUkxPT1NFJywgJ1xcXFxkKycpXG5cbi8vICMjIE5vbi1udW1lcmljIElkZW50aWZpZXJcbi8vIFplcm8gb3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIGh5cGhlbiwgYW5kIHRoZW4gemVybyBvclxuLy8gbW9yZSBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdOT05OVU1FUklDSURFTlRJRklFUicsIGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmApXG5cbi8vICMjIE1haW4gVmVyc2lvblxuLy8gVGhyZWUgZG90LXNlcGFyYXRlZCBudW1lcmljIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignTUFJTlZFUlNJT04nLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OTE9PU0UnLCBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApXG5cbi8vICMjIFByZS1yZWxlYXNlIFZlcnNpb24gSWRlbnRpZmllclxuLy8gQSBudW1lcmljIGlkZW50aWZpZXIsIG9yIGEgbm9uLW51bWVyaWMgaWRlbnRpZmllci5cblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VJREVOVElGSUVSJywgYCg/OiR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdXG59fCR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdfSlgKVxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRScsIGAoPzoke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdXG59fCR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdfSlgKVxuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uXG4vLyBIeXBoZW4sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGRvdC1zZXBhcmF0ZWQgcHJlLXJlbGVhc2UgdmVyc2lvblxuLy8gaWRlbnRpZmllcnMuXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFJywgYCg/Oi0oJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl1cbn0oPzpcXFxcLiR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJdfSkqKSlgKVxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUxPT1NFJywgYCg/Oi0/KCR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV1cbn0oPzpcXFxcLiR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV19KSopKWApXG5cbi8vICMjIEJ1aWxkIE1ldGFkYXRhIElkZW50aWZpZXJcbi8vIEFueSBjb21iaW5hdGlvbiBvZiBkaWdpdHMsIGxldHRlcnMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdCVUlMRElERU5USUZJRVInLCBgJHtMRVRURVJEQVNITlVNQkVSfStgKVxuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YVxuLy8gUGx1cyBzaWduLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBwZXJpb2Qtc2VwYXJhdGVkIGJ1aWxkIG1ldGFkYXRhXG4vLyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ0JVSUxEJywgYCg/OlxcXFwrKCR7c3JjW3QuQlVJTERJREVOVElGSUVSXVxufSg/OlxcXFwuJHtzcmNbdC5CVUlMRElERU5USUZJRVJdfSkqKSlgKVxuXG4vLyAjIyBGdWxsIFZlcnNpb24gU3RyaW5nXG4vLyBBIG1haW4gdmVyc2lvbiwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBhIHByZS1yZWxlYXNlIHZlcnNpb24gYW5kXG4vLyBidWlsZCBtZXRhZGF0YS5cblxuLy8gTm90ZSB0aGF0IHRoZSBvbmx5IG1ham9yLCBtaW5vciwgcGF0Y2gsIGFuZCBwcmUtcmVsZWFzZSBzZWN0aW9ucyBvZlxuLy8gdGhlIHZlcnNpb24gc3RyaW5nIGFyZSBjYXB0dXJpbmcgZ3JvdXBzLiAgVGhlIGJ1aWxkIG1ldGFkYXRhIGlzIG5vdCBhXG4vLyBjYXB0dXJpbmcgZ3JvdXAsIGJlY2F1c2UgaXQgc2hvdWxkIG5vdCBldmVyIGJlIHVzZWQgaW4gdmVyc2lvblxuLy8gY29tcGFyaXNvbi5cblxuY3JlYXRlVG9rZW4oJ0ZVTExQTEFJTicsIGB2PyR7c3JjW3QuTUFJTlZFUlNJT05dXG59JHtzcmNbdC5QUkVSRUxFQVNFXX0/JHtcbiAgc3JjW3QuQlVJTERdfT9gKVxuXG5jcmVhdGVUb2tlbignRlVMTCcsIGBeJHtzcmNbdC5GVUxMUExBSU5dfSRgKVxuXG4vLyBsaWtlIGZ1bGwsIGJ1dCBhbGxvd3MgdjEuMi4zIGFuZCA9MS4yLjMsIHdoaWNoIHBlb3BsZSBkbyBzb21ldGltZXMuXG4vLyBhbHNvLCAxLjAuMGFscGhhMSAocHJlcmVsZWFzZSB3aXRob3V0IHRoZSBoeXBoZW4pIHdoaWNoIGlzIHByZXR0eVxuLy8gY29tbW9uIGluIHRoZSBucG0gcmVnaXN0cnkuXG5jcmVhdGVUb2tlbignTE9PU0VQTEFJTicsIGBbdj1cXFxcc10qJHtzcmNbdC5NQUlOVkVSU0lPTkxPT1NFXVxufSR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0/JHtcbiAgc3JjW3QuQlVJTERdfT9gKVxuXG5jcmVhdGVUb2tlbignTE9PU0UnLCBgXiR7c3JjW3QuTE9PU0VQTEFJTl19JGApXG5cbmNyZWF0ZVRva2VuKCdHVExUJywgJygoPzo8fD4pPz0/KScpXG5cbi8vIFNvbWV0aGluZyBsaWtlIFwiMi4qXCIgb3IgXCIxLjIueFwiLlxuLy8gTm90ZSB0aGF0IFwieC54XCIgaXMgYSB2YWxpZCB4UmFuZ2UgaWRlbnRpZmVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSTE9PU0UnLCBgJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18eHxYfFxcXFwqYClcbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfXx4fFh8XFxcXCpgKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU4nLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/JHtcbiAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU5MT09TRScsIGBbdj1cXFxcc10qKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKT8pP2ApXG5cbmNyZWF0ZVRva2VuKCdYUkFOR0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignWFJBTkdFTE9PU0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ29lcmNpb24uXG4vLyBFeHRyYWN0IGFueXRoaW5nIHRoYXQgY291bGQgY29uY2VpdmFibHkgYmUgYSBwYXJ0IG9mIGEgdmFsaWQgc2VtdmVyXG5jcmVhdGVUb2tlbignQ09FUkNFUExBSU4nLCBgJHsnKF58W15cXFxcZF0pJyArXG4gICAgICAgICAgICAgICcoXFxcXGR7MSwnfSR7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSH19KWAgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2AgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2ApXG5jcmVhdGVUb2tlbignQ09FUkNFJywgYCR7c3JjW3QuQ09FUkNFUExBSU5dfSg/OiR8W15cXFxcZF0pYClcbmNyZWF0ZVRva2VuKCdDT0VSQ0VGVUxMJywgc3JjW3QuQ09FUkNFUExBSU5dICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRV19KT9gICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuQlVJTERdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMJywgc3JjW3QuQ09FUkNFXSwgdHJ1ZSlcbmNyZWF0ZVRva2VuKCdDT0VSQ0VSVExGVUxMJywgc3JjW3QuQ09FUkNFRlVMTF0sIHRydWUpXG5cbi8vIFRpbGRlIHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJyZWFzb25hYmx5IGF0IG9yIGdyZWF0ZXIgdGhhblwiXG5jcmVhdGVUb2tlbignTE9ORVRJTERFJywgJyg/On4+PyknKVxuXG5jcmVhdGVUb2tlbignVElMREVUUklNJywgYChcXFxccyopJHtzcmNbdC5MT05FVElMREVdfVxcXFxzK2AsIHRydWUpXG5leHBvcnRzLnRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG5jcmVhdGVUb2tlbignVElMREUnLCBgXiR7c3JjW3QuTE9ORVRJTERFXX0ke3NyY1t0LlhSQU5HRVBMQUlOXX0kYClcbmNyZWF0ZVRva2VuKCdUSUxERUxPT1NFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ2FyZXQgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcImF0IGxlYXN0IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoXCJcbmNyZWF0ZVRva2VuKCdMT05FQ0FSRVQnLCAnKD86XFxcXF4pJylcblxuY3JlYXRlVG9rZW4oJ0NBUkVUVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORUNBUkVUXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy5jYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxuY3JlYXRlVG9rZW4oJ0NBUkVUJywgYF4ke3NyY1t0LkxPTkVDQVJFVF19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignQ0FSRVRMT09TRScsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIEEgc2ltcGxlIGd0L2x0L2VxIHRoaW5nLCBvciBqdXN0IFwiXCIgdG8gaW5kaWNhdGUgXCJhbnkgdmVyc2lvblwiXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUkxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfSkkfF4kYClcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkZVTExQTEFJTl19KSR8XiRgKVxuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JUUklNJywgYChcXFxccyopJHtzcmNbdC5HVExUXVxufVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfXwke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCwgdHJ1ZSlcbmV4cG9ydHMuY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRScsIGBeXFxcXHMqKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5YUkFOR0VQTEFJTl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuY3JlYXRlVG9rZW4oJ0hZUEhFTlJBTkdFTE9PU0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccystXFxcXHMrYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFxcXFxzKiRgKVxuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG5jcmVhdGVUb2tlbignU1RBUicsICcoPHw+KT89P1xcXFxzKlxcXFwqJylcbi8vID49MC4wLjAgaXMgbGlrZSBhIHN0YXJcbmNyZWF0ZVRva2VuKCdHVEUwJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjBcXFxccyokJylcbmNyZWF0ZVRva2VuKCdHVEUwUFJFJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjAtMFxcXFxzKiQnKVxuIiwiLy8gcGFyc2Ugb3V0IGp1c3QgdGhlIG9wdGlvbnMgd2UgY2FyZSBhYm91dFxuY29uc3QgbG9vc2VPcHRpb24gPSBPYmplY3QuZnJlZXplKHsgbG9vc2U6IHRydWUgfSlcbmNvbnN0IGVtcHR5T3B0cyA9IE9iamVjdC5mcmVlemUoeyB9KVxuY29uc3QgcGFyc2VPcHRpb25zID0gb3B0aW9ucyA9PiB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBlbXB0eU9wdHNcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbG9vc2VPcHRpb25cbiAgfVxuXG4gIHJldHVybiBvcHRpb25zXG59XG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlT3B0aW9uc1xuIiwiY29uc3QgbnVtZXJpYyA9IC9eWzAtOV0rJC9cbmNvbnN0IGNvbXBhcmVJZGVudGlmaWVycyA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IGFudW0gPSBudW1lcmljLnRlc3QoYSlcbiAgY29uc3QgYm51bSA9IG51bWVyaWMudGVzdChiKVxuXG4gIGlmIChhbnVtICYmIGJudW0pIHtcbiAgICBhID0gK2FcbiAgICBiID0gK2JcbiAgfVxuXG4gIHJldHVybiBhID09PSBiID8gMFxuICAgIDogKGFudW0gJiYgIWJudW0pID8gLTFcbiAgICA6IChibnVtICYmICFhbnVtKSA/IDFcbiAgICA6IGEgPCBiID8gLTFcbiAgICA6IDFcbn1cblxuY29uc3QgcmNvbXBhcmVJZGVudGlmaWVycyA9IChhLCBiKSA9PiBjb21wYXJlSWRlbnRpZmllcnMoYiwgYSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBhcmVJZGVudGlmaWVycyxcbiAgcmNvbXBhcmVJZGVudGlmaWVycyxcbn1cbiIsImNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgeyBNQVhfTEVOR1RILCBNQVhfU0FGRV9JTlRFR0VSIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBjb21wYXJlSWRlbnRpZmllcnMgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNsYXNzIFNlbVZlciB7XG4gIGNvbnN0cnVjdG9yICh2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKVxuXG4gICAgaWYgKHZlcnNpb24gaW5zdGFuY2VvZiBTZW1WZXIpIHtcbiAgICAgIGlmICh2ZXJzaW9uLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgICB2ZXJzaW9uLmluY2x1ZGVQcmVyZWxlYXNlID09PSAhIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgICAgcmV0dXJuIHZlcnNpb25cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uLnZlcnNpb25cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCB2ZXJzaW9uLiBNdXN0IGJlIGEgc3RyaW5nLiBHb3QgdHlwZSBcIiR7dHlwZW9mIHZlcnNpb259XCIuYClcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbi5sZW5ndGggPiBNQVhfTEVOR1RIKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgdmVyc2lvbiBpcyBsb25nZXIgdGhhbiAke01BWF9MRU5HVEh9IGNoYXJhY3RlcnNgXG4gICAgICApXG4gICAgfVxuXG4gICAgZGVidWcoJ1NlbVZlcicsIHZlcnNpb24sIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICAvLyB0aGlzIGlzbid0IGFjdHVhbGx5IHJlbGV2YW50IGZvciB2ZXJzaW9ucywgYnV0IGtlZXAgaXQgc28gdGhhdCB3ZVxuICAgIC8vIGRvbid0IHJ1biBpbnRvIHRyb3VibGUgcGFzc2luZyB0aGlzLm9wdGlvbnMgYXJvdW5kLlxuICAgIHRoaXMuaW5jbHVkZVByZXJlbGVhc2UgPSAhIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2VcblxuICAgIGNvbnN0IG0gPSB2ZXJzaW9uLnRyaW0oKS5tYXRjaChvcHRpb25zLmxvb3NlID8gcmVbdC5MT09TRV0gOiByZVt0LkZVTExdKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFZlcnNpb246ICR7dmVyc2lvbn1gKVxuICAgIH1cblxuICAgIHRoaXMucmF3ID0gdmVyc2lvblxuXG4gICAgLy8gdGhlc2UgYXJlIGFjdHVhbGx5IG51bWJlcnNcbiAgICB0aGlzLm1ham9yID0gK21bMV1cbiAgICB0aGlzLm1pbm9yID0gK21bMl1cbiAgICB0aGlzLnBhdGNoID0gK21bM11cblxuICAgIGlmICh0aGlzLm1ham9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1ham9yIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtYWpvciB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5taW5vciA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5taW5vciA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbWlub3IgdmVyc2lvbicpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGF0Y2ggPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMucGF0Y2ggPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHBhdGNoIHZlcnNpb24nKVxuICAgIH1cblxuICAgIC8vIG51bWJlcmlmeSBhbnkgcHJlcmVsZWFzZSBudW1lcmljIGlkc1xuICAgIGlmICghbVs0XSkge1xuICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmVyZWxlYXNlID0gbVs0XS5zcGxpdCgnLicpLm1hcCgoaWQpID0+IHtcbiAgICAgICAgaWYgKC9eWzAtOV0rJC8udGVzdChpZCkpIHtcbiAgICAgICAgICBjb25zdCBudW0gPSAraWRcbiAgICAgICAgICBpZiAobnVtID49IDAgJiYgbnVtIDwgTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICAgICAgcmV0dXJuIG51bVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5idWlsZCA9IG1bNV0gPyBtWzVdLnNwbGl0KCcuJykgOiBbXVxuICAgIHRoaXMuZm9ybWF0KClcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgdGhpcy52ZXJzaW9uID0gYCR7dGhpcy5tYWpvcn0uJHt0aGlzLm1pbm9yfS4ke3RoaXMucGF0Y2h9YFxuICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZlcnNpb24gKz0gYC0ke3RoaXMucHJlcmVsZWFzZS5qb2luKCcuJyl9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uXG4gIH1cblxuICB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvblxuICB9XG5cbiAgY29tcGFyZSAob3RoZXIpIHtcbiAgICBkZWJ1ZygnU2VtVmVyLmNvbXBhcmUnLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucywgb3RoZXIpXG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBpZiAodHlwZW9mIG90aGVyID09PSAnc3RyaW5nJyAmJiBvdGhlciA9PT0gdGhpcy52ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICBpZiAob3RoZXIudmVyc2lvbiA9PT0gdGhpcy52ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBhcmVNYWluKG90aGVyKSB8fCB0aGlzLmNvbXBhcmVQcmUob3RoZXIpXG4gIH1cblxuICBjb21wYXJlTWFpbiAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5tYWpvciwgb3RoZXIubWFqb3IpIHx8XG4gICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5taW5vciwgb3RoZXIubWlub3IpIHx8XG4gICAgICBjb21wYXJlSWRlbnRpZmllcnModGhpcy5wYXRjaCwgb3RoZXIucGF0Y2gpXG4gICAgKVxuICB9XG5cbiAgY29tcGFyZVByZSAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIC8vIE5PVCBoYXZpbmcgYSBwcmVyZWxlYXNlIGlzID4gaGF2aW5nIG9uZVxuICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoICYmICFvdGhlci5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiBvdGhlci5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnByZXJlbGVhc2UubGVuZ3RoICYmICFvdGhlci5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICBsZXQgaSA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBhID0gdGhpcy5wcmVyZWxlYXNlW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIucHJlcmVsZWFzZVtpXVxuICAgICAgZGVidWcoJ3ByZXJlbGVhc2UgY29tcGFyZScsIGksIGEsIGIpXG4gICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkICYmIGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSBlbHNlIGlmIChiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfSBlbHNlIGlmIChhID09PSBiKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tcGFyZUlkZW50aWZpZXJzKGEsIGIpXG4gICAgICB9XG4gICAgfSB3aGlsZSAoKytpKVxuICB9XG5cbiAgY29tcGFyZUJ1aWxkIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMuYnVpbGRbaV1cbiAgICAgIGNvbnN0IGIgPSBvdGhlci5idWlsZFtpXVxuICAgICAgZGVidWcoJ2J1aWxkIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIC8vIHByZW1pbm9yIHdpbGwgYnVtcCB0aGUgdmVyc2lvbiB1cCB0byB0aGUgbmV4dCBtaW5vciByZWxlYXNlLCBhbmQgaW1tZWRpYXRlbHlcbiAgLy8gZG93biB0byBwcmUtcmVsZWFzZS4gcHJlbWFqb3IgYW5kIHByZXBhdGNoIHdvcmsgdGhlIHNhbWUgd2F5LlxuICBpbmMgKHJlbGVhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKSB7XG4gICAgc3dpdGNoIChyZWxlYXNlKSB7XG4gICAgICBjYXNlICdwcmVtYWpvcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVtaW5vcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYWxyZWFkeSBhIHByZXJlbGVhc2UsIGl0IHdpbGwgYnVtcCB0byB0aGUgbmV4dCB2ZXJzaW9uXG4gICAgICAgIC8vIGRyb3AgYW55IHByZXJlbGVhc2VzIHRoYXQgbWlnaHQgYWxyZWFkeSBleGlzdCwgc2luY2UgdGhleSBhcmUgbm90XG4gICAgICAgIC8vIHJlbGV2YW50IGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMuaW5jKCdwYXRjaCcsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgYSBub24tcHJlcmVsZWFzZSB2ZXJzaW9uLCB0aGlzIGFjdHMgdGhlIHNhbWUgYXNcbiAgICAgIC8vIHByZXBhdGNoLlxuICAgICAgY2FzZSAncHJlcmVsZWFzZSc6XG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmMoJ3ByZScsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdtYWpvcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWFqb3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtYWpvciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1ham9yLlxuICAgICAgICAvLyAxLjAuMC01IGJ1bXBzIHRvIDEuMC4wXG4gICAgICAgIC8vIDEuMS4wIGJ1bXBzIHRvIDIuMC4wXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLm1pbm9yICE9PSAwIHx8XG4gICAgICAgICAgdGhpcy5wYXRjaCAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW11cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHByZS1taW5vciB2ZXJzaW9uLCBidW1wIHVwIHRvIHRoZSBzYW1lIG1pbm9yIHZlcnNpb24uXG4gICAgICAgIC8vIE90aGVyd2lzZSBpbmNyZW1lbnQgbWlub3IuXG4gICAgICAgIC8vIDEuMi4wLTUgYnVtcHMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjEgYnVtcHMgdG8gMS4zLjBcbiAgICAgICAgaWYgKHRoaXMucGF0Y2ggIT09IDAgfHwgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiwgaXQgd2lsbCBpbmNyZW1lbnQgdGhlIHBhdGNoLlxuICAgICAgICAvLyBJZiBpdCBpcyBhIHByZS1yZWxlYXNlIGl0IHdpbGwgYnVtcCB1cCB0byB0aGUgc2FtZSBwYXRjaCB2ZXJzaW9uLlxuICAgICAgICAvLyAxLjIuMC01IHBhdGNoZXMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjAgcGF0Y2hlcyB0byAxLjIuMVxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucGF0Y2grK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIHB1YmxpY2x5LlxuICAgICAgLy8gMS4wLjAgJ3ByZScgd291bGQgYmVjb21lIDEuMC4wLTAgd2hpY2ggaXMgdGhlIHdyb25nIGRpcmVjdGlvbi5cbiAgICAgIGNhc2UgJ3ByZSc6IHtcbiAgICAgICAgY29uc3QgYmFzZSA9IE51bWJlcihpZGVudGlmaWVyQmFzZSkgPyAxIDogMFxuXG4gICAgICAgIGlmICghaWRlbnRpZmllciAmJiBpZGVudGlmaWVyQmFzZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGlzIGVtcHR5JylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW2Jhc2VdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGkgPSB0aGlzLnByZXJlbGVhc2UubGVuZ3RoXG4gICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlcmVsZWFzZVtpXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlW2ldKytcbiAgICAgICAgICAgICAgaSA9IC0yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gZGlkbid0IGluY3JlbWVudCBhbnl0aGluZ1xuICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgPT09IHRoaXMucHJlcmVsZWFzZS5qb2luKCcuJykgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlLnB1c2goYmFzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLjEgYnVtcHMgdG8gMS4yLjAtYmV0YS4yLFxuICAgICAgICAgIC8vIDEuMi4wLWJldGEuZm9vYmx6IG9yIDEuMi4wLWJldGEgYnVtcHMgdG8gMS4yLjAtYmV0YS4wXG4gICAgICAgICAgbGV0IHByZXJlbGVhc2UgPSBbaWRlbnRpZmllciwgYmFzZV1cbiAgICAgICAgICBpZiAoaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXJdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnModGhpcy5wcmVyZWxlYXNlWzBdLCBpZGVudGlmaWVyKSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMucHJlcmVsZWFzZVsxXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiAke3JlbGVhc2V9YClcbiAgICB9XG4gICAgdGhpcy5yYXcgPSB0aGlzLmZvcm1hdCgpXG4gICAgaWYgKHRoaXMuYnVpbGQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJhdyArPSBgKyR7dGhpcy5idWlsZC5qb2luKCcuJyl9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VtVmVyXG4iLCJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXJzZSA9ICh2ZXJzaW9uLCBvcHRpb25zLCB0aHJvd0Vycm9ycyA9IGZhbHNlKSA9PiB7XG4gIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgcmV0dXJuIHZlcnNpb25cbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBuZXcgU2VtVmVyKHZlcnNpb24sIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKCF0aHJvd0Vycm9ycykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgdGhyb3cgZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlXG4iLCJjb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgdmFsaWQgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB2ID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIHYgPyB2LnZlcnNpb24gOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHZhbGlkXG4iLCJjb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgY2xlYW4gPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzID0gcGFyc2UodmVyc2lvbi50cmltKCkucmVwbGFjZSgvXls9dl0rLywgJycpLCBvcHRpb25zKVxuICByZXR1cm4gcyA/IHMudmVyc2lvbiA6IG51bGxcbn1cbm1vZHVsZS5leHBvcnRzID0gY2xlYW5cbiIsImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcblxuY29uc3QgaW5jID0gKHZlcnNpb24sIHJlbGVhc2UsIG9wdGlvbnMsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKSA9PiB7XG4gIGlmICh0eXBlb2YgKG9wdGlvbnMpID09PSAnc3RyaW5nJykge1xuICAgIGlkZW50aWZpZXJCYXNlID0gaWRlbnRpZmllclxuICAgIGlkZW50aWZpZXIgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZFxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcihcbiAgICAgIHZlcnNpb24gaW5zdGFuY2VvZiBTZW1WZXIgPyB2ZXJzaW9uLnZlcnNpb24gOiB2ZXJzaW9uLFxuICAgICAgb3B0aW9uc1xuICAgICkuaW5jKHJlbGVhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKS52ZXJzaW9uXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBpbmNcbiIsImNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZS5qcycpXG5cbmNvbnN0IGRpZmYgPSAodmVyc2lvbjEsIHZlcnNpb24yKSA9PiB7XG4gIGNvbnN0IHYxID0gcGFyc2UodmVyc2lvbjEsIG51bGwsIHRydWUpXG4gIGNvbnN0IHYyID0gcGFyc2UodmVyc2lvbjIsIG51bGwsIHRydWUpXG4gIGNvbnN0IGNvbXBhcmlzb24gPSB2MS5jb21wYXJlKHYyKVxuXG4gIGlmIChjb21wYXJpc29uID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHYxSGlnaGVyID0gY29tcGFyaXNvbiA+IDBcbiAgY29uc3QgaGlnaFZlcnNpb24gPSB2MUhpZ2hlciA/IHYxIDogdjJcbiAgY29uc3QgbG93VmVyc2lvbiA9IHYxSGlnaGVyID8gdjIgOiB2MVxuICBjb25zdCBoaWdoSGFzUHJlID0gISFoaWdoVmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aFxuICBjb25zdCBsb3dIYXNQcmUgPSAhIWxvd1ZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGhcblxuICBpZiAobG93SGFzUHJlICYmICFoaWdoSGFzUHJlKSB7XG4gICAgLy8gR29pbmcgZnJvbSBwcmVyZWxlYXNlIC0+IG5vIHByZXJlbGVhc2UgcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhc2luZ1xuXG4gICAgLy8gSWYgdGhlIGxvdyB2ZXJzaW9uIGhhcyBvbmx5IGEgbWFqb3IsIHRoZW4gaXQgd2lsbCBhbHdheXMgYmUgYSBtYWpvclxuICAgIC8vIFNvbWUgZXhhbXBsZXM6XG4gICAgLy8gMS4wLjAtMSAtPiAxLjAuMFxuICAgIC8vIDEuMC4wLTEgLT4gMS4xLjFcbiAgICAvLyAxLjAuMC0xIC0+IDIuMC4wXG4gICAgaWYgKCFsb3dWZXJzaW9uLnBhdGNoICYmICFsb3dWZXJzaW9uLm1pbm9yKSB7XG4gICAgICByZXR1cm4gJ21ham9yJ1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSBpdCBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGUgaGlnaCB2ZXJzaW9uXG5cbiAgICBpZiAoaGlnaFZlcnNpb24ucGF0Y2gpIHtcbiAgICAgIC8vIGFueXRoaW5nIGhpZ2hlciB0aGFuIGEgcGF0Y2ggYnVtcCB3b3VsZCByZXN1bHQgaW4gdGhlIHdyb25nIHZlcnNpb25cbiAgICAgIHJldHVybiAncGF0Y2gnXG4gICAgfVxuXG4gICAgaWYgKGhpZ2hWZXJzaW9uLm1pbm9yKSB7XG4gICAgICAvLyBhbnl0aGluZyBoaWdoZXIgdGhhbiBhIG1pbm9yIGJ1bXAgd291bGQgcmVzdWx0IGluIHRoZSB3cm9uZyB2ZXJzaW9uXG4gICAgICByZXR1cm4gJ21pbm9yJ1xuICAgIH1cblxuICAgIC8vIGJ1bXBpbmcgbWFqb3IvbWlub3IvcGF0Y2ggYWxsIGhhdmUgc2FtZSByZXN1bHRcbiAgICByZXR1cm4gJ21ham9yJ1xuICB9XG5cbiAgLy8gYWRkIHRoZSBgcHJlYCBwcmVmaXggaWYgd2UgYXJlIGdvaW5nIHRvIGEgcHJlcmVsZWFzZSB2ZXJzaW9uXG4gIGNvbnN0IHByZWZpeCA9IGhpZ2hIYXNQcmUgPyAncHJlJyA6ICcnXG5cbiAgaWYgKHYxLm1ham9yICE9PSB2Mi5tYWpvcikge1xuICAgIHJldHVybiBwcmVmaXggKyAnbWFqb3InXG4gIH1cblxuICBpZiAodjEubWlub3IgIT09IHYyLm1pbm9yKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdtaW5vcidcbiAgfVxuXG4gIGlmICh2MS5wYXRjaCAhPT0gdjIucGF0Y2gpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ3BhdGNoJ1xuICB9XG5cbiAgLy8gaGlnaCBhbmQgbG93IGFyZSBwcmVsZWFzZXNcbiAgcmV0dXJuICdwcmVyZWxlYXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZcbiIsImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1ham9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5tYWpvclxubW9kdWxlLmV4cG9ydHMgPSBtYWpvclxuIiwiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgbWlub3IgPSAoYSwgbG9vc2UpID0+IG5ldyBTZW1WZXIoYSwgbG9vc2UpLm1pbm9yXG5tb2R1bGUuZXhwb3J0cyA9IG1pbm9yXG4iLCJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXRjaCA9IChhLCBsb29zZSkgPT4gbmV3IFNlbVZlcihhLCBsb29zZSkucGF0Y2hcbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcbiIsImNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBwcmVyZWxlYXNlID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIChwYXJzZWQgJiYgcGFyc2VkLnByZXJlbGVhc2UubGVuZ3RoKSA/IHBhcnNlZC5wcmVyZWxlYXNlIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBwcmVyZWxlYXNlXG4iLCJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBjb21wYXJlID0gKGEsIGIsIGxvb3NlKSA9PlxuICBuZXcgU2VtVmVyKGEsIGxvb3NlKS5jb21wYXJlKG5ldyBTZW1WZXIoYiwgbG9vc2UpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBhcmVcbiIsImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgcmNvbXBhcmUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYiwgYSwgbG9vc2UpXG5tb2R1bGUuZXhwb3J0cyA9IHJjb21wYXJlXG4iLCJjb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IChhLCBiKSA9PiBjb21wYXJlKGEsIGIsIHRydWUpXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBhcmVMb29zZVxuIiwiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZUJ1aWxkID0gKGEsIGIsIGxvb3NlKSA9PiB7XG4gIGNvbnN0IHZlcnNpb25BID0gbmV3IFNlbVZlcihhLCBsb29zZSlcbiAgY29uc3QgdmVyc2lvbkIgPSBuZXcgU2VtVmVyKGIsIGxvb3NlKVxuICByZXR1cm4gdmVyc2lvbkEuY29tcGFyZSh2ZXJzaW9uQikgfHwgdmVyc2lvbkEuY29tcGFyZUJ1aWxkKHZlcnNpb25CKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlQnVpbGRcbiIsImNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChhLCBiLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRcbiIsImNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCByc29ydCA9IChsaXN0LCBsb29zZSkgPT4gbGlzdC5zb3J0KChhLCBiKSA9PiBjb21wYXJlQnVpbGQoYiwgYSwgbG9vc2UpKVxubW9kdWxlLmV4cG9ydHMgPSByc29ydFxuIiwiY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBndCA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPiAwXG5tb2R1bGUuZXhwb3J0cyA9IGd0XG4iLCJjb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGx0ID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8IDBcbm1vZHVsZS5leHBvcnRzID0gbHRcbiIsImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID09PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGVxXG4iLCJjb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IG5lcSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgIT09IDBcbm1vZHVsZS5leHBvcnRzID0gbmVxXG4iLCJjb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGd0ZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPj0gMFxubW9kdWxlLmV4cG9ydHMgPSBndGVcbiIsImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbHRlID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGx0ZVxuIiwiY29uc3QgZXEgPSByZXF1aXJlKCcuL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vbmVxJylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9ndCcpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2d0ZScpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4vbHQnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9sdGUnKVxuXG5jb25zdCBjbXAgPSAoYSwgb3AsIGIsIGxvb3NlKSA9PiB7XG4gIHN3aXRjaCAob3ApIHtcbiAgICBjYXNlICc9PT0nOlxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhID0gYS52ZXJzaW9uXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGIgPSBiLnZlcnNpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiBhID09PSBiXG5cbiAgICBjYXNlICchPT0nOlxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhID0gYS52ZXJzaW9uXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGIgPSBiLnZlcnNpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiBhICE9PSBiXG5cbiAgICBjYXNlICcnOlxuICAgIGNhc2UgJz0nOlxuICAgIGNhc2UgJz09JzpcbiAgICAgIHJldHVybiBlcShhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJyE9JzpcbiAgICAgIHJldHVybiBuZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+JzpcbiAgICAgIHJldHVybiBndChhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJz49JzpcbiAgICAgIHJldHVybiBndGUoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8JzpcbiAgICAgIHJldHVybiBsdChhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJzw9JzpcbiAgICAgIHJldHVybiBsdGUoYSwgYiwgbG9vc2UpXG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBvcGVyYXRvcjogJHtvcH1gKVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGNtcFxuIiwiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBjb2VyY2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgdmVyc2lvbiA9IFN0cmluZyh2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGxldCBtYXRjaCA9IG51bGxcbiAgaWYgKCFvcHRpb25zLnJ0bCkge1xuICAgIG1hdGNoID0gdmVyc2lvbi5tYXRjaChvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VGVUxMXSA6IHJlW3QuQ09FUkNFXSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGaW5kIHRoZSByaWdodC1tb3N0IGNvZXJjaWJsZSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBzaGFyZVxuICAgIC8vIGEgdGVybWludXMgd2l0aCBhIG1vcmUgbGVmdC13YXJkIGNvZXJjaWJsZSBzdHJpbmcuXG4gICAgLy8gRWcsICcxLjIuMy40JyB3YW50cyB0byBjb2VyY2UgJzIuMy40Jywgbm90ICczLjQnIG9yICc0J1xuICAgIC8vIFdpdGggaW5jbHVkZVByZXJlbGVhc2Ugb3B0aW9uIHNldCwgJzEuMi4zLjQtcmMnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQtcmMnLCBub3QgJzIuMy40J1xuICAgIC8vXG4gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgY2hlY2tpbmcgd2l0aCBhIC9nIHJlZ2V4cFxuICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgaW5kZXggc28gYXMgdG8gcGljayB1cCBvdmVybGFwcGluZyBtYXRjaGVzLlxuICAgIC8vIFN0b3Agd2hlbiB3ZSBnZXQgYSBtYXRjaCB0aGF0IGVuZHMgYXQgdGhlIHN0cmluZyBlbmQsIHNpbmNlIG5vXG4gICAgLy8gY29lcmNpYmxlIHN0cmluZyBjYW4gYmUgbW9yZSByaWdodC13YXJkIHdpdGhvdXQgdGhlIHNhbWUgdGVybWludXMuXG4gICAgY29uc3QgY29lcmNlUnRsUmVnZXggPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gcmVbdC5DT0VSQ0VSVExGVUxMXSA6IHJlW3QuQ09FUkNFUlRMXVxuICAgIGxldCBuZXh0XG4gICAgd2hpbGUgKChuZXh0ID0gY29lcmNlUnRsUmVnZXguZXhlYyh2ZXJzaW9uKSkgJiZcbiAgICAgICAgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPT0gdmVyc2lvbi5sZW5ndGgpXG4gICAgKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8XG4gICAgICAgICAgICBuZXh0LmluZGV4ICsgbmV4dFswXS5sZW5ndGggIT09IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSB7XG4gICAgICAgIG1hdGNoID0gbmV4dFxuICAgICAgfVxuICAgICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gbmV4dC5pbmRleCArIG5leHRbMV0ubGVuZ3RoICsgbmV4dFsyXS5sZW5ndGhcbiAgICB9XG4gICAgLy8gbGVhdmUgaXQgaW4gYSBjbGVhbiBzdGF0ZVxuICAgIGNvZXJjZVJ0bFJlZ2V4Lmxhc3RJbmRleCA9IC0xXG4gIH1cblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbWFqb3IgPSBtYXRjaFsyXVxuICBjb25zdCBtaW5vciA9IG1hdGNoWzNdIHx8ICcwJ1xuICBjb25zdCBwYXRjaCA9IG1hdGNoWzRdIHx8ICcwJ1xuICBjb25zdCBwcmVyZWxlYXNlID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJiBtYXRjaFs1XSA/IGAtJHttYXRjaFs1XX1gIDogJydcbiAgY29uc3QgYnVpbGQgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzZdID8gYCske21hdGNoWzZdfWAgOiAnJ1xuXG4gIHJldHVybiBwYXJzZShgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke3ByZXJlbGVhc2V9JHtidWlsZH1gLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb2VyY2VcbiIsImNsYXNzIExSVUNhY2hlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMubWF4ID0gMTAwMFxuICAgIHRoaXMubWFwID0gbmV3IE1hcCgpXG4gIH1cblxuICBnZXQgKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tYXAuZ2V0KGtleSlcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBtYXAgYW5kIGFkZCBpdCB0byB0aGUgZW5kXG4gICAgICB0aGlzLm1hcC5kZWxldGUoa2V5KVxuICAgICAgdGhpcy5tYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gIH1cblxuICBkZWxldGUgKGtleSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5kZWxldGUoa2V5KVxuICB9XG5cbiAgc2V0IChrZXksIHZhbHVlKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IHRoaXMuZGVsZXRlKGtleSlcblxuICAgIGlmICghZGVsZXRlZCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBJZiBjYWNoZSBpcyBmdWxsLCBkZWxldGUgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgaXRlbVxuICAgICAgaWYgKHRoaXMubWFwLnNpemUgPj0gdGhpcy5tYXgpIHtcbiAgICAgICAgY29uc3QgZmlyc3RLZXkgPSB0aGlzLm1hcC5rZXlzKCkubmV4dCgpLnZhbHVlXG4gICAgICAgIHRoaXMuZGVsZXRlKGZpcnN0S2V5KVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTFJVQ2FjaGVcbiIsImNvbnN0IFNQQUNFX0NIQVJBQ1RFUlMgPSAvXFxzKy9nXG5cbi8vIGhvaXN0ZWQgY2xhc3MgZm9yIGN5Y2xpYyBkZXBlbmRlbmN5XG5jbGFzcyBSYW5nZSB7XG4gIGNvbnN0cnVjdG9yIChyYW5nZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgcmFuZ2UuaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyYW5nZS5yYXcsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHNldCBhbmQgcmV0dXJuXG4gICAgICB0aGlzLnJhdyA9IHJhbmdlLnZhbHVlXG4gICAgICB0aGlzLnNldCA9IFtbcmFuZ2VdXVxuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSB1bmRlZmluZWRcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlLnRyaW0oKS5yZXBsYWNlKFNQQUNFX0NIQVJBQ1RFUlMsICcgJylcblxuICAgIC8vIEZpcnN0LCBzcGxpdCBvbiB8fFxuICAgIHRoaXMuc2V0ID0gdGhpcy5yYXdcbiAgICAgIC5zcGxpdCgnfHwnKVxuICAgICAgLy8gbWFwIHRoZSByYW5nZSB0byBhIDJkIGFycmF5IG9mIGNvbXBhcmF0b3JzXG4gICAgICAubWFwKHIgPT4gdGhpcy5wYXJzZVJhbmdlKHIudHJpbSgpKSlcbiAgICAgIC8vIHRocm93IG91dCBhbnkgY29tcGFyYXRvciBsaXN0cyB0aGF0IGFyZSBlbXB0eVxuICAgICAgLy8gdGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCBpdCB3YXMgbm90IGEgdmFsaWQgcmFuZ2UsIHdoaWNoIGlzIGFsbG93ZWRcbiAgICAgIC8vIGluIGxvb3NlIG1vZGUsIGJ1dCB3aWxsIHN0aWxsIHRocm93IGlmIHRoZSBXSE9MRSByYW5nZSBpcyBpbnZhbGlkLlxuICAgICAgLmZpbHRlcihjID0+IGMubGVuZ3RoKVxuXG4gICAgaWYgKCF0aGlzLnNldC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgU2VtVmVyIFJhbmdlOiAke3RoaXMucmF3fWApXG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZSBhbnkgdGhhdCBhcmUgbm90IHRoZSBudWxsIHNldCwgdGhyb3cgb3V0IG51bGwgc2V0cy5cbiAgICBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgLy8ga2VlcCB0aGUgZmlyc3Qgb25lLCBpbiBjYXNlIHRoZXkncmUgYWxsIG51bGwgc2V0c1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnNldFswXVxuICAgICAgdGhpcy5zZXQgPSB0aGlzLnNldC5maWx0ZXIoYyA9PiAhaXNOdWxsU2V0KGNbMF0pKVxuICAgICAgaWYgKHRoaXMuc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNldCA9IFtmaXJzdF1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSAqLCB0aGVuIHRoZSByYW5nZSBpcyBqdXN0ICpcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgaWYgKGMubGVuZ3RoID09PSAxICYmIGlzQW55KGNbMF0pKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IFtjXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdHRlZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IHJhbmdlICgpIHtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb3JtYXR0ZWQgPSAnJ1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnfHwnXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLnNldFtpXVxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNvbXBzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaWYgKGsgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSAnICdcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWQgKz0gY29tcHNba10udG9TdHJpbmcoKS50cmltKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvbHJ1Y2FjaGUnKVxuY29uc3QgY2FjaGUgPSBuZXcgTFJVKClcblxuY29uc3QgcGFyc2VPcHRpb25zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcGFyc2Utb3B0aW9ucycpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jb21wYXJhdG9yJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3Qge1xuICBzYWZlUmU6IHJlLFxuICB0LFxuICBjb21wYXJhdG9yVHJpbVJlcGxhY2UsXG4gIHRpbGRlVHJpbVJlcGxhY2UsXG4gIGNhcmV0VHJpbVJlcGxhY2UsXG59ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuY29uc3QgeyBGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRSwgRkxBR19MT09TRSB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvY29uc3RhbnRzJylcblxuY29uc3QgaXNOdWxsU2V0ID0gYyA9PiBjLnZhbHVlID09PSAnPDAuMC4wLTAnXG5jb25zdCBpc0FueSA9IGMgPT4gYy52YWx1ZSA9PT0gJydcblxuLy8gdGFrZSBhIHNldCBvZiBjb21wYXJhdG9ycyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmVcbi8vIGV4aXN0cyBhIHZlcnNpb24gd2hpY2ggY2FuIHNhdGlzZnkgaXRcbmNvbnN0IGlzU2F0aXNmaWFibGUgPSAoY29tcGFyYXRvcnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHRydWVcbiAgY29uc3QgcmVtYWluaW5nQ29tcGFyYXRvcnMgPSBjb21wYXJhdG9ycy5zbGljZSgpXG4gIGxldCB0ZXN0Q29tcGFyYXRvciA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLnBvcCgpXG5cbiAgd2hpbGUgKHJlc3VsdCAmJiByZW1haW5pbmdDb21wYXJhdG9ycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSByZW1haW5pbmdDb21wYXJhdG9ycy5ldmVyeSgob3RoZXJDb21wYXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4gdGVzdENvbXBhcmF0b3IuaW50ZXJzZWN0cyhvdGhlckNvbXBhcmF0b3IsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gY29tcHJpc2VkIG9mIHhyYW5nZXMsIHRpbGRlcywgc3RhcnMsIGFuZCBndGx0J3MgYXQgdGhpcyBwb2ludC5cbi8vIGFscmVhZHkgcmVwbGFjZWQgdGhlIGh5cGhlbiByYW5nZXNcbi8vIHR1cm4gaW50byBhIHNldCBvZiBKVVNUIGNvbXBhcmF0b3JzLlxuY29uc3QgcGFyc2VDb21wYXJhdG9yID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ2NvbXAnLCBjb21wLCBvcHRpb25zKVxuICBjb21wID0gcmVwbGFjZUNhcmV0cyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygnY2FyZXQnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVRpbGRlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygndGlsZGVzJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VYUmFuZ2VzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCd4cmFuZ2UnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVN0YXJzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCdzdGFycycsIGNvbXApXG4gIHJldHVybiBjb21wXG59XG5cbmNvbnN0IGlzWCA9IGlkID0+ICFpZCB8fCBpZC50b0xvd2VyQ2FzZSgpID09PSAneCcgfHwgaWQgPT09ICcqJ1xuXG4vLyB+LCB+PiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIH4yLCB+Mi54LCB+Mi54LngsIH4+Miwgfj4yLnggfj4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gfjIuMCwgfjIuMC54LCB+PjIuMCwgfj4yLjAueCAtLT4gPj0yLjAuMCA8Mi4xLjAtMFxuLy8gfjEuMiwgfjEuMi54LCB+PjEuMiwgfj4xLjIueCAtLT4gPj0xLjIuMCA8MS4zLjAtMFxuLy8gfjEuMi4zLCB+PjEuMi4zIC0tPiA+PTEuMi4zIDwxLjMuMC0wXG4vLyB+MS4yLjAsIH4+MS4yLjAgLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4wLjAuMSAtLT4gPj0wLjAuMSA8MC4xLjAtMFxuY29uc3QgcmVwbGFjZVRpbGRlcyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVRpbGRlKGMsIG9wdGlvbnMpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3QgcmVwbGFjZVRpbGRlID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlRJTERFTE9PU0VdIDogcmVbdC5USUxERV1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAoXywgTSwgbSwgcCwgcHIpID0+IHtcbiAgICBkZWJ1ZygndGlsZGUnLCBjb21wLCBfLCBNLCBtLCBwLCBwcilcbiAgICBsZXQgcmV0XG5cbiAgICBpZiAoaXNYKE0pKSB7XG4gICAgICByZXQgPSAnJ1xuICAgIH0gZWxzZSBpZiAoaXNYKG0pKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wIDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfSBlbHNlIGlmIChwcikge1xuICAgICAgZGVidWcoJ3JlcGxhY2VUaWxkZSBwcicsIHByKVxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB+MS4yLjMgPT0gPj0xLjIuMyA8MS4zLjAtMFxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH1cblxuICAgIGRlYnVnKCd0aWxkZSByZXR1cm4nLCByZXQpXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBeIC0tPiAqIChhbnksIGtpbmRhIHNpbGx5KVxuLy8gXjIsIF4yLngsIF4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjIuMCwgXjIuMC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyBeMS4yLCBeMS4yLnggLS0+ID49MS4yLjAgPDIuMC4wLTBcbi8vIF4xLjIuMyAtLT4gPj0xLjIuMyA8Mi4wLjAtMFxuLy8gXjEuMi4wIC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMC4wLjEgLS0+ID49MC4wLjEgPDAuMC4yLTBcbi8vIF4wLjEuMCAtLT4gPj0wLjEuMCA8MC4yLjAtMFxuY29uc3QgcmVwbGFjZUNhcmV0cyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZUNhcmV0KGMsIG9wdGlvbnMpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3QgcmVwbGFjZUNhcmV0ID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ2NhcmV0JywgY29tcCwgb3B0aW9ucylcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LkNBUkVUTE9PU0VdIDogcmVbdC5DQVJFVF1cbiAgY29uc3QgeiA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyAnLTAnIDogJydcbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAoXywgTSwgbSwgcCwgcHIpID0+IHtcbiAgICBkZWJ1ZygnY2FyZXQnLCBjb21wLCBfLCBNLCBtLCBwLCBwcilcbiAgICBsZXQgcmV0XG5cbiAgICBpZiAoaXNYKE0pKSB7XG4gICAgICByZXQgPSAnJ1xuICAgIH0gZWxzZSBpZiAoaXNYKG0pKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCR7en0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICB9IGVsc2UgaWYgKGlzWChwKSkge1xuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlQ2FyZXQgcHInLCBwcilcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgICB9IDwke019LiR7bX0uJHsrcCArIDF9LTBgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICB9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdubyBwcicpXG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIGlmIChtID09PSAnMCcpIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSR7en0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgICB9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVidWcoJ2NhcmV0IHJldHVybicsIHJldClcbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2VzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VYUmFuZ2VzJywgY29tcCwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXBcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VYUmFuZ2UoYywgb3B0aW9ucykpXG4gICAgLmpvaW4oJyAnKVxufVxuXG5jb25zdCByZXBsYWNlWFJhbmdlID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29tcCA9IGNvbXAudHJpbSgpXG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5YUkFOR0VMT09TRV0gOiByZVt0LlhSQU5HRV1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAocmV0LCBndGx0LCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd4UmFuZ2UnLCBjb21wLCByZXQsIGd0bHQsIE0sIG0sIHAsIHByKVxuICAgIGNvbnN0IHhNID0gaXNYKE0pXG4gICAgY29uc3QgeG0gPSB4TSB8fCBpc1gobSlcbiAgICBjb25zdCB4cCA9IHhtIHx8IGlzWChwKVxuICAgIGNvbnN0IGFueVggPSB4cFxuXG4gICAgaWYgKGd0bHQgPT09ICc9JyAmJiBhbnlYKSB7XG4gICAgICBndGx0ID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSdyZSBpbmNsdWRpbmcgcHJlcmVsZWFzZXMgaW4gdGhlIG1hdGNoLCB0aGVuIHdlIG5lZWRcbiAgICAvLyB0byBmaXggdGhpcyB0byAtMCwgdGhlIGxvd2VzdCBwb3NzaWJsZSBwcmVyZWxlYXNlIHZhbHVlXG4gICAgcHIgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnXG5cbiAgICBpZiAoeE0pIHtcbiAgICAgIGlmIChndGx0ID09PSAnPicgfHwgZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgaXMgYWxsb3dlZFxuICAgICAgICByZXQgPSAnPDAuMC4wLTAnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGZvcmJpZGRlblxuICAgICAgICByZXQgPSAnKidcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGd0bHQgJiYgYW55WCkge1xuICAgICAgLy8gd2Uga25vdyBwYXRjaCBpcyBhbiB4LCBiZWNhdXNlIHdlIGhhdmUgYW55IHggYXQgYWxsLlxuICAgICAgLy8gcmVwbGFjZSBYIHdpdGggMFxuICAgICAgaWYgKHhtKSB7XG4gICAgICAgIG0gPSAwXG4gICAgICB9XG4gICAgICBwID0gMFxuXG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nKSB7XG4gICAgICAgIC8vID4xID0+ID49Mi4wLjBcbiAgICAgICAgLy8gPjEuMiA9PiA+PTEuMy4wXG4gICAgICAgIGd0bHQgPSAnPj0nXG4gICAgICAgIGlmICh4bSkge1xuICAgICAgICAgIE0gPSArTSArIDFcbiAgICAgICAgICBtID0gMFxuICAgICAgICAgIHAgPSAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbSA9ICttICsgMVxuICAgICAgICAgIHAgPSAwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3RsdCA9PT0gJzw9Jykge1xuICAgICAgICAvLyA8PTAuNy54IGlzIGFjdHVhbGx5IDwwLjguMCwgc2luY2UgYW55IDAuNy54IHNob3VsZFxuICAgICAgICAvLyBwYXNzLiAgU2ltaWxhcmx5LCA8PTcueCBpcyBhY3R1YWxseSA8OC4wLjAsIGV0Yy5cbiAgICAgICAgZ3RsdCA9ICc8J1xuICAgICAgICBpZiAoeG0pIHtcbiAgICAgICAgICBNID0gK00gKyAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbSA9ICttICsgMVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChndGx0ID09PSAnPCcpIHtcbiAgICAgICAgcHIgPSAnLTAnXG4gICAgICB9XG5cbiAgICAgIHJldCA9IGAke2d0bHQgKyBNfS4ke219LiR7cH0ke3ByfWBcbiAgICB9IGVsc2UgaWYgKHhtKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCR7cHJ9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmICh4cCkge1xuICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3ByXG4gICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfVxuXG4gICAgZGVidWcoJ3hSYW5nZSByZXR1cm4nLCByZXQpXG5cbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbi8vIEJlY2F1c2UgKiBpcyBBTkQtZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgaW4gdGhlIGNvbXBhcmF0b3IsXG4vLyBhbmQgJycgbWVhbnMgXCJhbnkgdmVyc2lvblwiLCBqdXN0IHJlbW92ZSB0aGUgKnMgZW50aXJlbHkuXG5jb25zdCByZXBsYWNlU3RhcnMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVN0YXJzJywgY29tcCwgb3B0aW9ucylcbiAgLy8gTG9vc2VuZXNzIGlzIGlnbm9yZWQgaGVyZS4gIHN0YXIgaXMgYWx3YXlzIGFzIGxvb3NlIGFzIGl0IGdldHMhXG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKHJlW3QuU1RBUl0sICcnKVxufVxuXG5jb25zdCByZXBsYWNlR1RFMCA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdyZXBsYWNlR1RFMCcsIGNvbXAsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKHJlW29wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyB0LkdURTBQUkUgOiB0LkdURTBdLCAnJylcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gc3RyaW5nLnJlcGxhY2UocmVbdC5IWVBIRU5SQU5HRV0pXG4vLyBNLCBtLCBwYXRjaCwgcHJlcmVsZWFzZSwgYnVpbGRcbi8vIDEuMiAtIDMuNC41ID0+ID49MS4yLjAgPD0zLjQuNVxuLy8gMS4yLjMgLSAzLjQgPT4gPj0xLjIuMCA8My41LjAtMCBBbnkgMy40Lnggd2lsbCBkb1xuLy8gMS4yIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTBcbi8vIFRPRE8gYnVpbGQ/XG5jb25zdCBoeXBoZW5SZXBsYWNlID0gaW5jUHIgPT4gKCQwLFxuICBmcm9tLCBmTSwgZm0sIGZwLCBmcHIsIGZiLFxuICB0bywgdE0sIHRtLCB0cCwgdHByKSA9PiB7XG4gIGlmIChpc1goZk0pKSB7XG4gICAgZnJvbSA9ICcnXG4gIH0gZWxzZSBpZiAoaXNYKGZtKSkge1xuICAgIGZyb20gPSBgPj0ke2ZNfS4wLjAke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfSBlbHNlIGlmIChpc1goZnApKSB7XG4gICAgZnJvbSA9IGA+PSR7Zk19LiR7Zm19LjAke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfSBlbHNlIGlmIChmcHIpIHtcbiAgICBmcm9tID0gYD49JHtmcm9tfWBcbiAgfSBlbHNlIHtcbiAgICBmcm9tID0gYD49JHtmcm9tfSR7aW5jUHIgPyAnLTAnIDogJyd9YFxuICB9XG5cbiAgaWYgKGlzWCh0TSkpIHtcbiAgICB0byA9ICcnXG4gIH0gZWxzZSBpZiAoaXNYKHRtKSkge1xuICAgIHRvID0gYDwkeyt0TSArIDF9LjAuMC0wYFxuICB9IGVsc2UgaWYgKGlzWCh0cCkpIHtcbiAgICB0byA9IGA8JHt0TX0uJHsrdG0gKyAxfS4wLTBgXG4gIH0gZWxzZSBpZiAodHByKSB7XG4gICAgdG8gPSBgPD0ke3RNfS4ke3RtfS4ke3RwfS0ke3Rwcn1gXG4gIH0gZWxzZSBpZiAoaW5jUHIpIHtcbiAgICB0byA9IGA8JHt0TX0uJHt0bX0uJHsrdHAgKyAxfS0wYFxuICB9IGVsc2Uge1xuICAgIHRvID0gYDw9JHt0b31gXG4gIH1cblxuICByZXR1cm4gYCR7ZnJvbX0gJHt0b31gLnRyaW0oKVxufVxuXG5jb25zdCB0ZXN0U2V0ID0gKHNldCwgdmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgIGlmICghc2V0W2ldLnRlc3QodmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGlmICh2ZXJzaW9uLnByZXJlbGVhc2UubGVuZ3RoICYmICFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgLy8gRmluZCB0aGUgc2V0IG9mIHZlcnNpb25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gaGF2ZSBwcmVyZWxlYXNlc1xuICAgIC8vIEZvciBleGFtcGxlLCBeMS4yLjMtcHIuMSBkZXN1Z2FycyB0byA+PTEuMi4zLXByLjEgPDIuMC4wXG4gICAgLy8gVGhhdCBzaG91bGQgYWxsb3cgYDEuMi4zLXByLjJgIHRvIHBhc3MuXG4gICAgLy8gSG93ZXZlciwgYDEuMi40LWFscGhhLm5vdHJlYWR5YCBzaG91bGQgTk9UIGJlIGFsbG93ZWQsXG4gICAgLy8gZXZlbiB0aG91Z2ggaXQncyB3aXRoaW4gdGhlIHJhbmdlIHNldCBieSB0aGUgY29tcGFyYXRvcnMuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYnVnKHNldFtpXS5zZW12ZXIpXG4gICAgICBpZiAoc2V0W2ldLnNlbXZlciA9PT0gQ29tcGFyYXRvci5BTlkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGFsbG93ZWQgPSBzZXRbaV0uc2VtdmVyXG4gICAgICAgIGlmIChhbGxvd2VkLm1ham9yID09PSB2ZXJzaW9uLm1ham9yICYmXG4gICAgICAgICAgICBhbGxvd2VkLm1pbm9yID09PSB2ZXJzaW9uLm1pbm9yICYmXG4gICAgICAgICAgICBhbGxvd2VkLnBhdGNoID09PSB2ZXJzaW9uLnBhdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZlcnNpb24gaGFzIGEgLXByZSwgYnV0IGl0J3Mgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBsaWtlLlxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cbiIsImNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsImNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBzYXRpc2ZpZXMgPSAodmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpID0+IHtcbiAgdHJ5IHtcbiAgICByYW5nZSA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gcmFuZ2UudGVzdCh2ZXJzaW9uKVxufVxubW9kdWxlLmV4cG9ydHMgPSBzYXRpc2ZpZXNcbiIsImNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbi8vIE1vc3RseSBqdXN0IGZvciB0ZXN0aW5nIGFuZCBsZWdhY3kgQVBJIHJlYXNvbnNcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSAocmFuZ2UsIG9wdGlvbnMpID0+XG4gIG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucykuc2V0XG4gICAgLm1hcChjb21wID0+IGNvbXAubWFwKGMgPT4gYy52YWx1ZSkuam9pbignICcpLnRyaW0oKS5zcGxpdCgnICcpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvQ29tcGFyYXRvcnNcbiIsImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLCJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9ICh2ZXJzaW9ucywgcmFuZ2UsIG9wdGlvbnMpID0+IHtcbiAgbGV0IG1pbiA9IG51bGxcbiAgbGV0IG1pblNWID0gbnVsbFxuICBsZXQgcmFuZ2VPYmogPSBudWxsXG4gIHRyeSB7XG4gICAgcmFuZ2VPYmogPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICB2ZXJzaW9ucy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgaWYgKHJhbmdlT2JqLnRlc3QodikpIHtcbiAgICAgIC8vIHNhdGlzZmllcyh2LCByYW5nZSwgb3B0aW9ucylcbiAgICAgIGlmICghbWluIHx8IG1pblNWLmNvbXBhcmUodikgPT09IDEpIHtcbiAgICAgICAgLy8gY29tcGFyZShtaW4sIHYsIHRydWUpXG4gICAgICAgIG1pbiA9IHZcbiAgICAgICAgbWluU1YgPSBuZXcgU2VtVmVyKG1pbiwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBtaW5cbn1cbm1vZHVsZS5leHBvcnRzID0gbWluU2F0aXNmeWluZ1xuIiwiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2d0JylcblxuY29uc3QgbWluVmVyc2lvbiA9IChyYW5nZSwgbG9vc2UpID0+IHtcbiAgcmFuZ2UgPSBuZXcgUmFuZ2UocmFuZ2UsIGxvb3NlKVxuXG4gIGxldCBtaW52ZXIgPSBuZXcgU2VtVmVyKCcwLjAuMCcpXG4gIGlmIChyYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICBtaW52ZXIgPSBuZXcgU2VtVmVyKCcwLjAuMC0wJylcbiAgaWYgKHJhbmdlLnRlc3QobWludmVyKSkge1xuICAgIHJldHVybiBtaW52ZXJcbiAgfVxuXG4gIG1pbnZlciA9IG51bGxcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZS5zZXQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb21wYXJhdG9ycyA9IHJhbmdlLnNldFtpXVxuXG4gICAgbGV0IHNldE1pbiA9IG51bGxcbiAgICBjb21wYXJhdG9ycy5mb3JFYWNoKChjb21wYXJhdG9yKSA9PiB7XG4gICAgICAvLyBDbG9uZSB0byBhdm9pZCBtYW5pcHVsYXRpbmcgdGhlIGNvbXBhcmF0b3IncyBzZW12ZXIgb2JqZWN0LlxuICAgICAgY29uc3QgY29tcHZlciA9IG5ldyBTZW1WZXIoY29tcGFyYXRvci5zZW12ZXIudmVyc2lvbilcbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvci5vcGVyYXRvcikge1xuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICBpZiAoY29tcHZlci5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29tcHZlci5wYXRjaCsrXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXB2ZXIucHJlcmVsZWFzZS5wdXNoKDApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbXB2ZXIucmF3ID0gY29tcHZlci5mb3JtYXQoKVxuICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgIGNhc2UgJz49JzpcbiAgICAgICAgICBpZiAoIXNldE1pbiB8fCBndChjb21wdmVyLCBzZXRNaW4pKSB7XG4gICAgICAgICAgICBzZXRNaW4gPSBjb21wdmVyXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgLyogSWdub3JlIG1heGltdW0gdmVyc2lvbnMgKi9cbiAgICAgICAgICBicmVha1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBvcGVyYXRpb246ICR7Y29tcGFyYXRvci5vcGVyYXRvcn1gKVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKHNldE1pbiAmJiAoIW1pbnZlciB8fCBndChtaW52ZXIsIHNldE1pbikpKSB7XG4gICAgICBtaW52ZXIgPSBzZXRNaW5cbiAgICB9XG4gIH1cblxuICBpZiAobWludmVyICYmIHJhbmdlLnRlc3QobWludmVyKSkge1xuICAgIHJldHVybiBtaW52ZXJcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IG1pblZlcnNpb25cbiIsImNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgQ29tcGFyYXRvciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvY29tcGFyYXRvcicpXG5jb25zdCB7IEFOWSB9ID0gQ29tcGFyYXRvclxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMnKVxuY29uc3QgZ3QgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvbHQnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2x0ZScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZ3RlJylcblxuY29uc3Qgb3V0c2lkZSA9ICh2ZXJzaW9uLCByYW5nZSwgaGlsbywgb3B0aW9ucykgPT4ge1xuICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICByYW5nZSA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcblxuICBsZXQgZ3RmbiwgbHRlZm4sIGx0Zm4sIGNvbXAsIGVjb21wXG4gIHN3aXRjaCAoaGlsbykge1xuICAgIGNhc2UgJz4nOlxuICAgICAgZ3RmbiA9IGd0XG4gICAgICBsdGVmbiA9IGx0ZVxuICAgICAgbHRmbiA9IGx0XG4gICAgICBjb21wID0gJz4nXG4gICAgICBlY29tcCA9ICc+PSdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnPCc6XG4gICAgICBndGZuID0gbHRcbiAgICAgIGx0ZWZuID0gZ3RlXG4gICAgICBsdGZuID0gZ3RcbiAgICAgIGNvbXAgPSAnPCdcbiAgICAgIGVjb21wID0gJzw9J1xuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBwcm92aWRlIGEgaGlsbyB2YWwgb2YgXCI8XCIgb3IgXCI+XCInKVxuICB9XG5cbiAgLy8gSWYgaXQgc2F0aXNmaWVzIHRoZSByYW5nZSBpdCBpcyBub3Qgb3V0c2lkZVxuICBpZiAoc2F0aXNmaWVzKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gRnJvbSBub3cgb24sIHZhcmlhYmxlIHRlcm1zIGFyZSBhcyBpZiB3ZSdyZSBpbiBcImd0clwiIG1vZGUuXG4gIC8vIGJ1dCBub3RlIHRoYXQgZXZlcnl0aGluZyBpcyBmbGlwcGVkIGZvciB0aGUgXCJsdHJcIiBmdW5jdGlvbi5cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNldC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3JzID0gcmFuZ2Uuc2V0W2ldXG5cbiAgICBsZXQgaGlnaCA9IG51bGxcbiAgICBsZXQgbG93ID0gbnVsbFxuXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaCgoY29tcGFyYXRvcikgPT4ge1xuICAgICAgaWYgKGNvbXBhcmF0b3Iuc2VtdmVyID09PSBBTlkpIHtcbiAgICAgICAgY29tcGFyYXRvciA9IG5ldyBDb21wYXJhdG9yKCc+PTAuMC4wJylcbiAgICAgIH1cbiAgICAgIGhpZ2ggPSBoaWdoIHx8IGNvbXBhcmF0b3JcbiAgICAgIGxvdyA9IGxvdyB8fCBjb21wYXJhdG9yXG4gICAgICBpZiAoZ3Rmbihjb21wYXJhdG9yLnNlbXZlciwgaGlnaC5zZW12ZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgIGhpZ2ggPSBjb21wYXJhdG9yXG4gICAgICB9IGVsc2UgaWYgKGx0Zm4oY29tcGFyYXRvci5zZW12ZXIsIGxvdy5zZW12ZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgIGxvdyA9IGNvbXBhcmF0b3JcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSWYgdGhlIGVkZ2UgdmVyc2lvbiBjb21wYXJhdG9yIGhhcyBhIG9wZXJhdG9yIHRoZW4gb3VyIHZlcnNpb25cbiAgICAvLyBpc24ndCBvdXRzaWRlIGl0XG4gICAgaWYgKGhpZ2gub3BlcmF0b3IgPT09IGNvbXAgfHwgaGlnaC5vcGVyYXRvciA9PT0gZWNvbXApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBsb3dlc3QgdmVyc2lvbiBjb21wYXJhdG9yIGhhcyBhbiBvcGVyYXRvciBhbmQgb3VyIHZlcnNpb25cbiAgICAvLyBpcyBsZXNzIHRoYW4gaXQgdGhlbiBpdCBpc24ndCBoaWdoZXIgdGhhbiB0aGUgcmFuZ2VcbiAgICBpZiAoKCFsb3cub3BlcmF0b3IgfHwgbG93Lm9wZXJhdG9yID09PSBjb21wKSAmJlxuICAgICAgICBsdGVmbih2ZXJzaW9uLCBsb3cuc2VtdmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIGlmIChsb3cub3BlcmF0b3IgPT09IGVjb21wICYmIGx0Zm4odmVyc2lvbiwgbG93LnNlbXZlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHNpZGVcbiIsIi8vIERldGVybWluZSBpZiB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBhbGwgdGhlIHZlcnNpb25zIHBvc3NpYmxlIGluIHRoZSByYW5nZS5cbmNvbnN0IG91dHNpZGUgPSByZXF1aXJlKCcuL291dHNpZGUnKVxuY29uc3QgZ3RyID0gKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSA9PiBvdXRzaWRlKHZlcnNpb24sIHJhbmdlLCAnPicsIG9wdGlvbnMpXG5tb2R1bGUuZXhwb3J0cyA9IGd0clxuIiwiY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsImNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBpbnRlcnNlY3RzID0gKHIxLCByMiwgb3B0aW9ucykgPT4ge1xuICByMSA9IG5ldyBSYW5nZShyMSwgb3B0aW9ucylcbiAgcjIgPSBuZXcgUmFuZ2UocjIsIG9wdGlvbnMpXG4gIHJldHVybiByMS5pbnRlcnNlY3RzKHIyLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcnNlY3RzXG4iLCIvLyBnaXZlbiBhIHNldCBvZiB2ZXJzaW9ucyBhbmQgYSByYW5nZSwgY3JlYXRlIGEgXCJzaW1wbGlmaWVkXCIgcmFuZ2Vcbi8vIHRoYXQgaW5jbHVkZXMgdGhlIHNhbWUgdmVyc2lvbnMgdGhhdCB0aGUgb3JpZ2luYWwgcmFuZ2UgZG9lc1xuLy8gSWYgdGhlIG9yaWdpbmFsIHJhbmdlIGlzIHNob3J0ZXIgdGhhbiB0aGUgc2ltcGxpZmllZCBvbmUsIHJldHVybiB0aGF0LlxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NhdGlzZmllcy5qcycpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2NvbXBhcmUuanMnKVxubW9kdWxlLmV4cG9ydHMgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHNldCA9IFtdXG4gIGxldCBmaXJzdCA9IG51bGxcbiAgbGV0IHByZXYgPSBudWxsXG4gIGNvbnN0IHYgPSB2ZXJzaW9ucy5zb3J0KChhLCBiKSA9PiBjb21wYXJlKGEsIGIsIG9wdGlvbnMpKVxuICBmb3IgKGNvbnN0IHZlcnNpb24gb2Ygdikge1xuICAgIGNvbnN0IGluY2x1ZGVkID0gc2F0aXNmaWVzKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKVxuICAgIGlmIChpbmNsdWRlZCkge1xuICAgICAgcHJldiA9IHZlcnNpb25cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgZmlyc3QgPSB2ZXJzaW9uXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHNldC5wdXNoKFtmaXJzdCwgcHJldl0pXG4gICAgICB9XG4gICAgICBwcmV2ID0gbnVsbFxuICAgICAgZmlyc3QgPSBudWxsXG4gICAgfVxuICB9XG4gIGlmIChmaXJzdCkge1xuICAgIHNldC5wdXNoKFtmaXJzdCwgbnVsbF0pXG4gIH1cblxuICBjb25zdCByYW5nZXMgPSBbXVxuICBmb3IgKGNvbnN0IFttaW4sIG1heF0gb2Ygc2V0KSB7XG4gICAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgICByYW5nZXMucHVzaChtaW4pXG4gICAgfSBlbHNlIGlmICghbWF4ICYmIG1pbiA9PT0gdlswXSkge1xuICAgICAgcmFuZ2VzLnB1c2goJyonKVxuICAgIH0gZWxzZSBpZiAoIW1heCkge1xuICAgICAgcmFuZ2VzLnB1c2goYD49JHttaW59YClcbiAgICB9IGVsc2UgaWYgKG1pbiA9PT0gdlswXSkge1xuICAgICAgcmFuZ2VzLnB1c2goYDw9JHttYXh9YClcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2VzLnB1c2goYCR7bWlufSAtICR7bWF4fWApXG4gICAgfVxuICB9XG4gIGNvbnN0IHNpbXBsaWZpZWQgPSByYW5nZXMuam9pbignIHx8ICcpXG4gIGNvbnN0IG9yaWdpbmFsID0gdHlwZW9mIHJhbmdlLnJhdyA9PT0gJ3N0cmluZycgPyByYW5nZS5yYXcgOiBTdHJpbmcocmFuZ2UpXG4gIHJldHVybiBzaW1wbGlmaWVkLmxlbmd0aCA8IG9yaWdpbmFsLmxlbmd0aCA/IHNpbXBsaWZpZWQgOiByYW5nZVxufVxuIiwiY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1Quc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIXNhdGlzZmllcyhndC5zZW12ZXIsIFN0cmluZyhjKSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsdCkge1xuICAgICAgaWYgKG5lZWREb21MVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21MVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21MVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21MVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21MVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgICBsb3dlciA9IGxvd2VyTFQobHQsIGMsIG9wdGlvbnMpXG4gICAgICAgIGlmIChsb3dlciA9PT0gYyAmJiBsb3dlciAhPT0gbHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsdC5vcGVyYXRvciA9PT0gJzw9JyAmJiAhc2F0aXNmaWVzKGx0LnNlbXZlciwgU3RyaW5nKGMpLCBvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjLm9wZXJhdG9yICYmIChsdCB8fCBndCkgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZXJlIHdhcyBhIDwgb3IgPiwgYW5kIG5vdGhpbmcgaW4gdGhlIGRvbSwgdGhlbiBtdXN0IGJlIGZhbHNlXG4gIC8vIFVOTEVTUyBpdCB3YXMgbGltaXRlZCBieSBhbm90aGVyIHJhbmdlIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uXG4gIC8vIEVnLCA+MS4wLjAgPDEuMC4xIGlzIHN0aWxsIGEgc3Vic2V0IG9mIDwyLjAuMFxuICBpZiAoZ3QgJiYgaGFzRG9tTFQgJiYgIWx0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobHQgJiYgaGFzRG9tR1QgJiYgIWd0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyB3ZSBuZWVkZWQgYSBwcmVyZWxlYXNlIHJhbmdlIGluIGEgc3BlY2lmaWMgdHVwbGUsIGJ1dCBkaWRuJ3QgZ2V0IG9uZVxuICAvLyB0aGVuIHRoaXMgaXNuJ3QgYSBzdWJzZXQuICBlZyA+PTEuMi4zLXByZSBpcyBub3QgYSBzdWJzZXQgb2YgPj0xLjAuMCxcbiAgLy8gYmVjYXVzZSBpdCBpbmNsdWRlcyBwcmVyZWxlYXNlcyBpbiB0aGUgMS4yLjMgdHVwbGVcbiAgaWYgKG5lZWREb21HVFByZSB8fCBuZWVkRG9tTFRQcmUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vID49MS4yLjMgaXMgbG93ZXIgdGhhbiA+MS4yLjNcbmNvbnN0IGhpZ2hlckdUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wID4gMCA/IGFcbiAgICA6IGNvbXAgPCAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJz4nICYmIGEub3BlcmF0b3IgPT09ICc+PScgPyBiXG4gICAgOiBhXG59XG5cbi8vIDw9MS4yLjMgaXMgaGlnaGVyIHRoYW4gPDEuMi4zXG5jb25zdCBsb3dlckxUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wIDwgMCA/IGFcbiAgICA6IGNvbXAgPiAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJzwnICYmIGEub3BlcmF0b3IgPT09ICc8PScgPyBiXG4gICAgOiBhXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3Vic2V0XG4iLCIvLyBqdXN0IHByZS1sb2FkIGFsbCB0aGUgc3R1ZmYgdGhhdCBpbmRleC5qcyBsYXppbHkgZXhwb3J0c1xuY29uc3QgaW50ZXJuYWxSZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvcmUnKVxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBpZGVudGlmaWVycyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvaWRlbnRpZmllcnMnKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXJzZScpXG5jb25zdCB2YWxpZCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3ZhbGlkJylcbmNvbnN0IGNsZWFuID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY2xlYW4nKVxuY29uc3QgaW5jID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvaW5jJylcbmNvbnN0IGRpZmYgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9kaWZmJylcbmNvbnN0IG1ham9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWFqb3InKVxuY29uc3QgbWlub3IgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9taW5vcicpXG5jb25zdCBwYXRjaCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3BhdGNoJylcbmNvbnN0IHByZXJlbGVhc2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wcmVyZWxlYXNlJylcbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb21wYXJlJylcbmNvbnN0IHJjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcmNvbXBhcmUnKVxuY29uc3QgY29tcGFyZUxvb3NlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1sb29zZScpXG5jb25zdCBjb21wYXJlQnVpbGQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHNvcnQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9zb3J0JylcbmNvbnN0IHJzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcnNvcnQnKVxuY29uc3QgZ3QgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndCcpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2x0JylcbmNvbnN0IGVxID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZXEnKVxuY29uc3QgbmVxID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbmVxJylcbmNvbnN0IGd0ZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2d0ZScpXG5jb25zdCBsdGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdGUnKVxuY29uc3QgY21wID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGNvZXJjZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvZXJjZScpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSByZXF1aXJlKCcuL3Jhbmdlcy90by1jb21wYXJhdG9ycycpXG5jb25zdCBtYXhTYXRpc2Z5aW5nID0gcmVxdWlyZSgnLi9yYW5nZXMvbWF4LXNhdGlzZnlpbmcnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21pbi1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblZlcnNpb24gPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tdmVyc2lvbicpXG5jb25zdCB2YWxpZFJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvdmFsaWQnKVxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL291dHNpZGUnKVxuY29uc3QgZ3RyID0gcmVxdWlyZSgnLi9yYW5nZXMvZ3RyJylcbmNvbnN0IGx0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2x0cicpXG5jb25zdCBpbnRlcnNlY3RzID0gcmVxdWlyZSgnLi9yYW5nZXMvaW50ZXJzZWN0cycpXG5jb25zdCBzaW1wbGlmeVJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvc2ltcGxpZnknKVxuY29uc3Qgc3Vic2V0ID0gcmVxdWlyZSgnLi9yYW5nZXMvc3Vic2V0Jylcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZSxcbiAgdmFsaWQsXG4gIGNsZWFuLFxuICBpbmMsXG4gIGRpZmYsXG4gIG1ham9yLFxuICBtaW5vcixcbiAgcGF0Y2gsXG4gIHByZXJlbGVhc2UsXG4gIGNvbXBhcmUsXG4gIHJjb21wYXJlLFxuICBjb21wYXJlTG9vc2UsXG4gIGNvbXBhcmVCdWlsZCxcbiAgc29ydCxcbiAgcnNvcnQsXG4gIGd0LFxuICBsdCxcbiAgZXEsXG4gIG5lcSxcbiAgZ3RlLFxuICBsdGUsXG4gIGNtcCxcbiAgY29lcmNlLFxuICBDb21wYXJhdG9yLFxuICBSYW5nZSxcbiAgc2F0aXNmaWVzLFxuICB0b0NvbXBhcmF0b3JzLFxuICBtYXhTYXRpc2Z5aW5nLFxuICBtaW5TYXRpc2Z5aW5nLFxuICBtaW5WZXJzaW9uLFxuICB2YWxpZFJhbmdlLFxuICBvdXRzaWRlLFxuICBndHIsXG4gIGx0cixcbiAgaW50ZXJzZWN0cyxcbiAgc2ltcGxpZnlSYW5nZSxcbiAgc3Vic2V0LFxuICBTZW1WZXIsXG4gIHJlOiBpbnRlcm5hbFJlLnJlLFxuICBzcmM6IGludGVybmFsUmUuc3JjLFxuICB0b2tlbnM6IGludGVybmFsUmUudCxcbiAgU0VNVkVSX1NQRUNfVkVSU0lPTjogY29uc3RhbnRzLlNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIFJFTEVBU0VfVFlQRVM6IGNvbnN0YW50cy5SRUxFQVNFX1RZUEVTLFxuICBjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLmNvbXBhcmVJZGVudGlmaWVycyxcbiAgcmNvbXBhcmVJZGVudGlmaWVyczogaWRlbnRpZmllcnMucmNvbXBhcmVJZGVudGlmaWVycyxcbn1cbiIsImNvbnN0IG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHVpbnQ4QXJyYXlTdHJpbmdpZmllZCA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJztcbmNvbnN0IGFycmF5QnVmZmVyU3RyaW5naWZpZWQgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xuXG5mdW5jdGlvbiBpc1R5cGUodmFsdWUsIHR5cGVDb25zdHJ1Y3RvciwgdHlwZVN0cmluZ2lmaWVkKSB7XG5cdGlmICghdmFsdWUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAodmFsdWUuY29uc3RydWN0b3IgPT09IHR5cGVDb25zdHJ1Y3Rvcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09PSB0eXBlU3RyaW5naWZpZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VpbnQ4QXJyYXkodmFsdWUpIHtcblx0cmV0dXJuIGlzVHlwZSh2YWx1ZSwgVWludDhBcnJheSwgdWludDhBcnJheVN0cmluZ2lmaWVkKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWx1ZSkge1xuXHRyZXR1cm4gaXNUeXBlKHZhbHVlLCBBcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJTdHJpbmdpZmllZCk7XG59XG5cbmZ1bmN0aW9uIGlzVWludDhBcnJheU9yQXJyYXlCdWZmZXIodmFsdWUpIHtcblx0cmV0dXJuIGlzVWludDhBcnJheSh2YWx1ZSkgfHwgaXNBcnJheUJ1ZmZlcih2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVaW50OEFycmF5KHZhbHVlKSB7XG5cdGlmICghaXNVaW50OEFycmF5KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYFVpbnQ4QXJyYXlcXGAsIGdvdCBcXGAke3R5cGVvZiB2YWx1ZX1cXGBgKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIodmFsdWUpIHtcblx0aWYgKCFpc1VpbnQ4QXJyYXlPckFycmF5QnVmZmVyKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYFVpbnQ4QXJyYXlcXGAgb3IgXFxgQXJyYXlCdWZmZXJcXGAsIGdvdCBcXGAke3R5cGVvZiB2YWx1ZX1cXGBgKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9VaW50OEFycmF5KHZhbHVlKSB7XG5cdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdFx0cmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlKTtcblx0fVxuXG5cdGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG5cdFx0cmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlLmJ1ZmZlciwgdmFsdWUuYnl0ZU9mZnNldCwgdmFsdWUuYnl0ZUxlbmd0aCk7XG5cdH1cblxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCB2YWx1ZSwgZ290IFxcYCR7dHlwZW9mIHZhbHVlfVxcYC5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdFVpbnQ4QXJyYXlzKGFycmF5cywgdG90YWxMZW5ndGgpIHtcblx0aWYgKGFycmF5cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG5cdH1cblxuXHR0b3RhbExlbmd0aCA/Pz0gYXJyYXlzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4gYWNjdW11bGF0b3IgKyBjdXJyZW50VmFsdWUubGVuZ3RoLCAwKTtcblxuXHRjb25zdCByZXR1cm5WYWx1ZSA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcblxuXHRsZXQgb2Zmc2V0ID0gMDtcblx0Zm9yIChjb25zdCBhcnJheSBvZiBhcnJheXMpIHtcblx0XHRhc3NlcnRVaW50OEFycmF5KGFycmF5KTtcblx0XHRyZXR1cm5WYWx1ZS5zZXQoYXJyYXksIG9mZnNldCk7XG5cdFx0b2Zmc2V0ICs9IGFycmF5Lmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZVVpbnQ4QXJyYXlzRXF1YWwoYSwgYikge1xuXHRhc3NlcnRVaW50OEFycmF5KGEpO1xuXHRhc3NlcnRVaW50OEFycmF5KGIpO1xuXG5cdGlmIChhID09PSBiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tZm9yLWxvb3Bcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0aWYgKGFbaW5kZXhdICE9PSBiW2luZGV4XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVVpbnQ4QXJyYXlzKGEsIGIpIHtcblx0YXNzZXJ0VWludDhBcnJheShhKTtcblx0YXNzZXJ0VWludDhBcnJheShiKTtcblxuXHRjb25zdCBsZW5ndGggPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCBkaWZmID0gYVtpbmRleF0gLSBiW2luZGV4XTtcblx0XHRpZiAoZGlmZiAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIE1hdGguc2lnbihkaWZmKTtcblx0XHR9XG5cdH1cblxuXHQvLyBBdCB0aGlzIHBvaW50LCBhbGwgdGhlIGNvbXBhcmVkIGVsZW1lbnRzIGFyZSBlcXVhbC5cblx0Ly8gVGhlIHNob3J0ZXIgYXJyYXkgc2hvdWxkIGNvbWUgZmlyc3QgaWYgdGhlIGFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aHMuXG5cdHJldHVybiBNYXRoLnNpZ24oYS5sZW5ndGggLSBiLmxlbmd0aCk7XG59XG5cbmNvbnN0IGNhY2hlZERlY29kZXJzID0ge1xuXHR1dGY4OiBuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcigndXRmOCcpLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXlUb1N0cmluZyhhcnJheSwgZW5jb2RpbmcgPSAndXRmOCcpIHtcblx0YXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIoYXJyYXkpO1xuXHRjYWNoZWREZWNvZGVyc1tlbmNvZGluZ10gPz89IG5ldyBnbG9iYWxUaGlzLlRleHREZWNvZGVyKGVuY29kaW5nKTtcblx0cmV0dXJuIGNhY2hlZERlY29kZXJzW2VuY29kaW5nXS5kZWNvZGUoYXJyYXkpO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTdHJpbmcodmFsdWUpIHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiB2YWx1ZX1cXGBgKTtcblx0fVxufVxuXG5jb25zdCBjYWNoZWRFbmNvZGVyID0gbmV3IGdsb2JhbFRoaXMuVGV4dEVuY29kZXIoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvVWludDhBcnJheShzdHJpbmcpIHtcblx0YXNzZXJ0U3RyaW5nKHN0cmluZyk7XG5cdHJldHVybiBjYWNoZWRFbmNvZGVyLmVuY29kZShzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0Jhc2U2NFVybChiYXNlNjQpIHtcblx0cmV0dXJuIGJhc2U2NC5yZXBsYWNlQWxsKCcrJywgJy0nKS5yZXBsYWNlQWxsKCcvJywgJ18nKS5yZXBsYWNlKC89KyQvLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFVybFRvQmFzZTY0KGJhc2U2NHVybCkge1xuXHRyZXR1cm4gYmFzZTY0dXJsLnJlcGxhY2VBbGwoJy0nLCAnKycpLnJlcGxhY2VBbGwoJ18nLCAnLycpO1xufVxuXG4vLyBSZWZlcmVuY2U6IGh0dHBzOi8vcGh1b2MubmcvY29sbGVjdGlvbi90aGlzLXZzLXRoYXQvY29uY2F0LXZzLXB1c2gvXG5jb25zdCBNQVhfQkxPQ0tfU0laRSA9IDY1XzUzNTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0Jhc2U2NChhcnJheSwge3VybFNhZmUgPSBmYWxzZX0gPSB7fSkge1xuXHRhc3NlcnRVaW50OEFycmF5KGFycmF5KTtcblxuXHRsZXQgYmFzZTY0O1xuXG5cdGlmIChhcnJheS5sZW5ndGggPCBNQVhfQkxPQ0tfU0laRSkge1xuXHQvLyBSZXF1aXJlZCBhcyBgYnRvYWAgYW5kIGBhdG9iYCBkb24ndCBwcm9wZXJseSBzdXBwb3J0IFVuaWNvZGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQmFzZTY0I3RoZV91bmljb2RlX3Byb2JsZW1cblx0XHRiYXNlNjQgPSBnbG9iYWxUaGlzLmJ0b2EoU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkodGhpcywgYXJyYXkpKTtcblx0fSBlbHNlIHtcblx0XHRiYXNlNjQgPSAnJztcblx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGFycmF5KSB7XG5cdFx0XHRiYXNlNjQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQodmFsdWUpO1xuXHRcdH1cblxuXHRcdGJhc2U2NCA9IGdsb2JhbFRoaXMuYnRvYShiYXNlNjQpO1xuXHR9XG5cblx0cmV0dXJuIHVybFNhZmUgPyBiYXNlNjRUb0Jhc2U2NFVybChiYXNlNjQpIDogYmFzZTY0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NFN0cmluZykge1xuXHRhc3NlcnRTdHJpbmcoYmFzZTY0U3RyaW5nKTtcblx0cmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShnbG9iYWxUaGlzLmF0b2IoYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0U3RyaW5nKSksIHggPT4geC5jb2RlUG9pbnRBdCgwKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0Jhc2U2NChzdHJpbmcsIHt1cmxTYWZlID0gZmFsc2V9ID0ge30pIHtcblx0YXNzZXJ0U3RyaW5nKHN0cmluZyk7XG5cdHJldHVybiB1aW50OEFycmF5VG9CYXNlNjQoc3RyaW5nVG9VaW50OEFycmF5KHN0cmluZyksIHt1cmxTYWZlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRUb1N0cmluZyhiYXNlNjRTdHJpbmcpIHtcblx0YXNzZXJ0U3RyaW5nKGJhc2U2NFN0cmluZyk7XG5cdHJldHVybiB1aW50OEFycmF5VG9TdHJpbmcoYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NFN0cmluZykpO1xufVxuXG5jb25zdCBieXRlVG9IZXhMb29rdXBUYWJsZSA9IEFycmF5LmZyb20oe2xlbmd0aDogMjU2fSwgKF8sIGluZGV4KSA9PiBpbmRleC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSk7XG5cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9IZXgoYXJyYXkpIHtcblx0YXNzZXJ0VWludDhBcnJheShhcnJheSk7XG5cblx0Ly8gQ29uY2F0ZW5hdGluZyBhIHN0cmluZyBpcyBmYXN0ZXIgdGhhbiB1c2luZyBhbiBhcnJheS5cblx0bGV0IGhleFN0cmluZyA9ICcnO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWZvci1sb29wIC0tIE1heCBwZXJmb3JtYW5jZSBpcyBjcml0aWNhbC5cblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGhleFN0cmluZyArPSBieXRlVG9IZXhMb29rdXBUYWJsZVthcnJheVtpbmRleF1dO1xuXHR9XG5cblx0cmV0dXJuIGhleFN0cmluZztcbn1cblxuY29uc3QgaGV4VG9EZWNpbWFsTG9va3VwVGFibGUgPSB7XG5cdDA6IDAsXG5cdDE6IDEsXG5cdDI6IDIsXG5cdDM6IDMsXG5cdDQ6IDQsXG5cdDU6IDUsXG5cdDY6IDYsXG5cdDc6IDcsXG5cdDg6IDgsXG5cdDk6IDksXG5cdGE6IDEwLFxuXHRiOiAxMSxcblx0YzogMTIsXG5cdGQ6IDEzLFxuXHRlOiAxNCxcblx0ZjogMTUsXG5cdEE6IDEwLFxuXHRCOiAxMSxcblx0QzogMTIsXG5cdEQ6IDEzLFxuXHRFOiAxNCxcblx0RjogMTUsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleFN0cmluZykge1xuXHRhc3NlcnRTdHJpbmcoaGV4U3RyaW5nKTtcblxuXHRpZiAoaGV4U3RyaW5nLmxlbmd0aCAlIDIgIT09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSGV4IHN0cmluZyBsZW5ndGguJyk7XG5cdH1cblxuXHRjb25zdCByZXN1bHRMZW5ndGggPSBoZXhTdHJpbmcubGVuZ3RoIC8gMjtcblx0Y29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHRMZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCBoaWdoTmliYmxlID0gaGV4VG9EZWNpbWFsTG9va3VwVGFibGVbaGV4U3RyaW5nW2luZGV4ICogMl1dO1xuXHRcdGNvbnN0IGxvd05pYmJsZSA9IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlW2hleFN0cmluZ1soaW5kZXggKiAyKSArIDFdXTtcblxuXHRcdGlmIChoaWdoTmliYmxlID09PSB1bmRlZmluZWQgfHwgbG93TmliYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBIZXggY2hhcmFjdGVyIGVuY291bnRlcmVkIGF0IHBvc2l0aW9uICR7aW5kZXggKiAyfWApO1xuXHRcdH1cblxuXHRcdGJ5dGVzW2luZGV4XSA9IChoaWdoTmliYmxlIDw8IDQpIHwgbG93TmliYmxlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWJpdHdpc2Vcblx0fVxuXG5cdHJldHVybiBieXRlcztcbn1cblxuLyoqXG5AcGFyYW0ge0RhdGFWaWV3fSB2aWV3XG5AcmV0dXJucyB7bnVtYmVyfVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVaW50QkUodmlldykge1xuXHRjb25zdCB7Ynl0ZUxlbmd0aH0gPSB2aWV3O1xuXG5cdGlmIChieXRlTGVuZ3RoID09PSA2KSB7XG5cdFx0cmV0dXJuICh2aWV3LmdldFVpbnQxNigwKSAqICgyICoqIDMyKSkgKyB2aWV3LmdldFVpbnQzMigyKTtcblx0fVxuXG5cdGlmIChieXRlTGVuZ3RoID09PSA1KSB7XG5cdFx0cmV0dXJuICh2aWV3LmdldFVpbnQ4KDApICogKDIgKiogMzIpKSArIHZpZXcuZ2V0VWludDMyKDEpO1xuXHR9XG5cblx0aWYgKGJ5dGVMZW5ndGggPT09IDQpIHtcblx0XHRyZXR1cm4gdmlldy5nZXRVaW50MzIoMCk7XG5cdH1cblxuXHRpZiAoYnl0ZUxlbmd0aCA9PT0gMykge1xuXHRcdHJldHVybiAodmlldy5nZXRVaW50OCgwKSAqICgyICoqIDE2KSkgKyB2aWV3LmdldFVpbnQxNigxKTtcblx0fVxuXG5cdGlmIChieXRlTGVuZ3RoID09PSAyKSB7XG5cdFx0cmV0dXJuIHZpZXcuZ2V0VWludDE2KDApO1xuXHR9XG5cblx0aWYgKGJ5dGVMZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdmlldy5nZXRVaW50OCgwKTtcblx0fVxufVxuXG4vKipcbkBwYXJhbSB7VWludDhBcnJheX0gYXJyYXlcbkBwYXJhbSB7VWludDhBcnJheX0gdmFsdWVcbkByZXR1cm5zIHtudW1iZXJ9XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG5cdGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRjb25zdCB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuXHRpZiAodmFsdWVMZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gLTE7XG5cdH1cblxuXHRpZiAodmFsdWVMZW5ndGggPiBhcnJheUxlbmd0aCkge1xuXHRcdHJldHVybiAtMTtcblx0fVxuXG5cdGNvbnN0IHZhbGlkT2Zmc2V0TGVuZ3RoID0gYXJyYXlMZW5ndGggLSB2YWx1ZUxlbmd0aDtcblxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDw9IHZhbGlkT2Zmc2V0TGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0bGV0IGlzTWF0Y2ggPSB0cnVlO1xuXHRcdGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IHZhbHVlTGVuZ3RoOyBpbmRleDIrKykge1xuXHRcdFx0aWYgKGFycmF5W2luZGV4ICsgaW5kZXgyXSAhPT0gdmFsdWVbaW5kZXgyXSkge1xuXHRcdFx0XHRpc01hdGNoID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc01hdGNoKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIC0xO1xufVxuXG4vKipcbkBwYXJhbSB7VWludDhBcnJheX0gYXJyYXlcbkBwYXJhbSB7VWludDhBcnJheX0gdmFsdWVcbkByZXR1cm5zIHtib29sZWFufVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcblx0cmV0dXJuIGluZGV4T2YoYXJyYXksIHZhbHVlKSAhPT0gLTE7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuICovXG5pbXBvcnQgeyBpc0RlZXBTdHJpY3RFcXVhbCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eSwgaGFzUHJvcGVydHksIHNldFByb3BlcnR5LCBkZWxldGVQcm9wZXJ0eSwgfSBmcm9tICdkb3QtcHJvcCc7XG5pbXBvcnQgZW52UGF0aHMgZnJvbSAnZW52LXBhdGhzJztcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMgYXMgYXRvbWljV3JpdGVGaWxlU3luYyB9IGZyb20gJ2F0b21pY2FsbHknO1xuaW1wb3J0IHsgQWp2MjAyMCBhcyBBanYgfSBmcm9tICdhanYvZGlzdC8yMDIwLmpzJztcbmltcG9ydCBhanZGb3JtYXRzTW9kdWxlIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCBkZWJvdW5jZUZuIGZyb20gJ2RlYm91bmNlLWZuJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGNvbmNhdFVpbnQ4QXJyYXlzLCBzdHJpbmdUb1VpbnQ4QXJyYXksIHVpbnQ4QXJyYXlUb1N0cmluZywgfSBmcm9tICd1aW50OGFycmF5LWV4dHJhcyc7XG4vLyBGSVhNRTogaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy8yMDQ3XG5jb25zdCBhanZGb3JtYXRzID0gYWp2Rm9ybWF0c01vZHVsZS5kZWZhdWx0O1xuY29uc3QgZW5jcnlwdGlvbkFsZ29yaXRobSA9ICdhZXMtMjU2LWNiYyc7XG5jb25zdCBjcmVhdGVQbGFpbk9iamVjdCA9ICgpID0+IE9iamVjdC5jcmVhdGUobnVsbCk7XG5jb25zdCBpc0V4aXN0ID0gKGRhdGEpID0+IGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhICE9PSBudWxsO1xuY29uc3QgY2hlY2tWYWx1ZVR5cGUgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IG5vbkpzb25UeXBlcyA9IG5ldyBTZXQoW1xuICAgICAgICAndW5kZWZpbmVkJyxcbiAgICAgICAgJ3N5bWJvbCcsXG4gICAgICAgICdmdW5jdGlvbicsXG4gICAgXSk7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICBpZiAobm9uSnNvblR5cGVzLmhhcyh0eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBTZXR0aW5nIGEgdmFsdWUgb2YgdHlwZSBcXGAke3R5cGV9XFxgIGZvciBrZXkgXFxgJHtrZXl9XFxgIGlzIG5vdCBhbGxvd2VkIGFzIGl0J3Mgbm90IHN1cHBvcnRlZCBieSBKU09OYCk7XG4gICAgfVxufTtcbmNvbnN0IElOVEVSTkFMX0tFWSA9ICdfX2ludGVybmFsX18nO1xuY29uc3QgTUlHUkFUSU9OX0tFWSA9IGAke0lOVEVSTkFMX0tFWX0ubWlncmF0aW9ucy52ZXJzaW9uYDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmYge1xuICAgIHBhdGg7XG4gICAgZXZlbnRzO1xuICAgICN2YWxpZGF0b3I7XG4gICAgI2VuY3J5cHRpb25LZXk7XG4gICAgI29wdGlvbnM7XG4gICAgI2RlZmF1bHRWYWx1ZXMgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihwYXJ0aWFsT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjb25maWdOYW1lOiAnY29uZmlnJyxcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb246ICdqc29uJyxcbiAgICAgICAgICAgIHByb2plY3RTdWZmaXg6ICdub2RlanMnLFxuICAgICAgICAgICAgY2xlYXJJbnZhbGlkQ29uZmlnOiBmYWxzZSxcbiAgICAgICAgICAgIGFjY2Vzc1Byb3BlcnRpZXNCeURvdE5vdGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlnRmlsZU1vZGU6IDBvNjY2LFxuICAgICAgICAgICAgLi4ucGFydGlhbE9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghb3B0aW9ucy5jd2QpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm9qZWN0TmFtZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHNwZWNpZnkgdGhlIGBwcm9qZWN0TmFtZWAgb3B0aW9uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5jd2QgPSBlbnZQYXRocyhvcHRpb25zLnByb2plY3ROYW1lLCB7IHN1ZmZpeDogb3B0aW9ucy5wcm9qZWN0U3VmZml4IH0pLmNvbmZpZztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNvcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2NoZW1hICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgc2NoZW1hYCBvcHRpb24gbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhanYgPSBuZXcgQWp2KHtcbiAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICAgICAgICAgICAgdXNlRGVmYXVsdHM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFqdkZvcm1hdHMoYWp2KTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBvcHRpb25zLnNjaGVtYSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLiN2YWxpZGF0b3IgPSBhanYuY29tcGlsZShzY2hlbWEpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucy5zY2hlbWEpKSB7IC8vIFRPRE86IFJlbW92ZSB0aGUgYGFzIGFueWAuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlPy5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlZmF1bHRWYWx1ZXNba2V5XSA9IHZhbHVlLmRlZmF1bHQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLiNkZWZhdWx0VmFsdWVzID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuI2RlZmF1bHRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5kZWZhdWx0cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWFsaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXJpYWxpemUgPSBvcHRpb25zLnNlcmlhbGl6ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5kZXNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGVzZXJpYWxpemUgPSBvcHRpb25zLmRlc2VyaWFsaXplO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50VGFyZ2V0KCk7XG4gICAgICAgIHRoaXMuI2VuY3J5cHRpb25LZXkgPSBvcHRpb25zLmVuY3J5cHRpb25LZXk7XG4gICAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBvcHRpb25zLmZpbGVFeHRlbnNpb24gPyBgLiR7b3B0aW9ucy5maWxlRXh0ZW5zaW9ufWAgOiAnJztcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMuY3dkLCBgJHtvcHRpb25zLmNvbmZpZ05hbWUgPz8gJ2NvbmZpZyd9JHtmaWxlRXh0ZW5zaW9ufWApO1xuICAgICAgICBjb25zdCBmaWxlU3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgICAgICBjb25zdCBzdG9yZSA9IE9iamVjdC5hc3NpZ24oY3JlYXRlUGxhaW5PYmplY3QoKSwgb3B0aW9ucy5kZWZhdWx0cywgZmlsZVN0b3JlKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubWlncmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb2plY3RWZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2Ugc3BlY2lmeSB0aGUgYHByb2plY3RWZXJzaW9uYCBvcHRpb24uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9taWdyYXRlKG9wdGlvbnMubWlncmF0aW9ucywgb3B0aW9ucy5wcm9qZWN0VmVyc2lvbiwgb3B0aW9ucy5iZWZvcmVFYWNoTWlncmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBkZWZlciB2YWxpZGF0aW9uIHVudGlsIGFmdGVyIG1pZ3JhdGlvbnMgYXJlIGFwcGxpZWQgc28gdGhhdCB0aGUgc3RvcmUgY2FuIGJlIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgc2NoZW1hLlxuICAgICAgICB0aGlzLl92YWxpZGF0ZShzdG9yZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGZpbGVTdG9yZSwgc3RvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy53YXRjaCkge1xuICAgICAgICAgICAgdGhpcy5fd2F0Y2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQoa2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuI29wdGlvbnMuYWNjZXNzUHJvcGVydGllc0J5RG90Tm90YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RvcmUgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBrZXkgaW4gc3RvcmUgPyBzdG9yZVtrZXldIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGtleSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGtleVxcYCB0byBiZSBvZiB0eXBlIFxcYHN0cmluZ1xcYCBvciBcXGBvYmplY3RcXGAsIGdvdCAke3R5cGVvZiBrZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VzZSBgZGVsZXRlKClgIHRvIGNsZWFyIHZhbHVlcycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb250YWluc1Jlc2VydmVkS2V5KGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFBsZWFzZSBkb24ndCB1c2UgdGhlICR7SU5URVJOQUxfS0VZfSBrZXksIGFzIGl0J3MgdXNlZCB0byBtYW5hZ2UgdGhpcyBtb2R1bGUgaW50ZXJuYWwgb3BlcmF0aW9ucy5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0b3JlIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBzZXQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY2hlY2tWYWx1ZVR5cGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy4jb3B0aW9ucy5hY2Nlc3NQcm9wZXJ0aWVzQnlEb3ROb3RhdGlvbikge1xuICAgICAgICAgICAgICAgIHNldFByb3BlcnR5KHN0b3JlLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0b3JlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3QgPSBrZXk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ2hlY2sgaWYgYW4gaXRlbSBleGlzdHMuXG5cbiAgICBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgaXRlbSB0byBjaGVjay5cbiAgICAqL1xuICAgIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMuI29wdGlvbnMuYWNjZXNzUHJvcGVydGllc0J5RG90Tm90YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNQcm9wZXJ0eSh0aGlzLnN0b3JlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5zdG9yZTtcbiAgICB9XG4gICAgLyoqXG4gICAgUmVzZXQgaXRlbXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIGFzIGRlZmluZWQgYnkgdGhlIGBkZWZhdWx0c2Agb3IgYHNjaGVtYWAgb3B0aW9uLlxuXG4gICAgQHNlZSBgY2xlYXIoKWAgdG8gcmVzZXQgYWxsIGl0ZW1zLlxuXG4gICAgQHBhcmFtIGtleXMgLSBUaGUga2V5cyBvZiB0aGUgaXRlbXMgdG8gcmVzZXQuXG4gICAgKi9cbiAgICByZXNldCguLi5rZXlzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGlmIChpc0V4aXN0KHRoaXMuI2RlZmF1bHRWYWx1ZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChrZXksIHRoaXMuI2RlZmF1bHRWYWx1ZXNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICBjb25zdCB7IHN0b3JlIH0gPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy4jb3B0aW9ucy5hY2Nlc3NQcm9wZXJ0aWVzQnlEb3ROb3RhdGlvbikge1xuICAgICAgICAgICAgZGVsZXRlUHJvcGVydHkoc3RvcmUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgICBkZWxldGUgc3RvcmVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgfVxuICAgIC8qKlxuICAgIERlbGV0ZSBhbGwgaXRlbXMuXG5cbiAgICBUaGlzIHJlc2V0cyBrbm93biBpdGVtcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcywgaWYgZGVmaW5lZCBieSB0aGUgYGRlZmF1bHRzYCBvciBgc2NoZW1hYCBvcHRpb24uXG4gICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IGNyZWF0ZVBsYWluT2JqZWN0KCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuI2RlZmF1bHRWYWx1ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgV2F0Y2hlcyB0aGUgZ2l2ZW4gYGtleWAsIGNhbGxpbmcgYGNhbGxiYWNrYCBvbiBhbnkgY2hhbmdlcy5cblxuICAgIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHdhdGNoLlxuICAgIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb24gYW55IGNoYW5nZXMuIFdoZW4gYSBga2V5YCBpcyBmaXJzdCBzZXQgYG9sZFZhbHVlYCB3aWxsIGJlIGB1bmRlZmluZWRgLCBhbmQgd2hlbiBhIGtleSBpcyBkZWxldGVkIGBuZXdWYWx1ZWAgd2lsbCBiZSBgdW5kZWZpbmVkYC5cbiAgICBAcmV0dXJucyBBIGZ1bmN0aW9uLCB0aGF0IHdoZW4gY2FsbGVkLCB3aWxsIHVuc3Vic2NyaWJlLlxuICAgICovXG4gICAgb25EaWRDaGFuZ2Uoa2V5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGtleVxcYCB0byBiZSBvZiB0eXBlIFxcYHN0cmluZ1xcYCwgZ290ICR7dHlwZW9mIGtleX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBjYWxsYmFja1xcYCB0byBiZSBvZiB0eXBlIFxcYGZ1bmN0aW9uXFxgLCBnb3QgJHt0eXBlb2YgY2FsbGJhY2t9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUNoYW5nZSgoKSA9PiB0aGlzLmdldChrZXkpLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIC8qKlxuICAgIFdhdGNoZXMgdGhlIHdob2xlIGNvbmZpZyBvYmplY3QsIGNhbGxpbmcgYGNhbGxiYWNrYCBvbiBhbnkgY2hhbmdlcy5cblxuICAgIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb24gYW55IGNoYW5nZXMuIFdoZW4gYSBga2V5YCBpcyBmaXJzdCBzZXQgYG9sZFZhbHVlYCB3aWxsIGJlIGB1bmRlZmluZWRgLCBhbmQgd2hlbiBhIGtleSBpcyBkZWxldGVkIGBuZXdWYWx1ZWAgd2lsbCBiZSBgdW5kZWZpbmVkYC5cbiAgICBAcmV0dXJucyBBIGZ1bmN0aW9uLCB0aGF0IHdoZW4gY2FsbGVkLCB3aWxsIHVuc3Vic2NyaWJlLlxuICAgICovXG4gICAgb25EaWRBbnlDaGFuZ2UoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgY2FsbGJhY2tcXGAgdG8gYmUgb2YgdHlwZSBcXGBmdW5jdGlvblxcYCwgZ290ICR7dHlwZW9mIGNhbGxiYWNrfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVDaGFuZ2UoKCkgPT4gdGhpcy5zdG9yZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc3RvcmUpLmxlbmd0aDtcbiAgICB9XG4gICAgZ2V0IHN0b3JlKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyh0aGlzLnBhdGgsIHRoaXMuI2VuY3J5cHRpb25LZXkgPyBudWxsIDogJ3V0ZjgnKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHJpbmcgPSB0aGlzLl9lbmNyeXB0RGF0YShkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZERhdGEgPSB0aGlzLl9kZXNlcmlhbGl6ZShkYXRhU3RyaW5nKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKGRlc2VyaWFsaXplZERhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY3JlYXRlUGxhaW5PYmplY3QoKSwgZGVzZXJpYWxpemVkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3I/LmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5zdXJlRGlyZWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVBsYWluT2JqZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy4jb3B0aW9ucy5jbGVhckludmFsaWRDb25maWcgJiYgZXJyb3IubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVQbGFpbk9iamVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IHN0b3JlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZURpcmVjdG9yeSgpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3dyaXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTtcbiAgICB9XG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnN0b3JlKSkge1xuICAgICAgICAgICAgeWllbGQgW2tleSwgdmFsdWVdO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9lbmNyeXB0RGF0YShkYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy4jZW5jcnlwdGlvbktleSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGRhdGEgOiB1aW50OEFycmF5VG9TdHJpbmcoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgYW4gaW5pdGlhbGl6YXRpb24gdmVjdG9yIGhhcyBiZWVuIHVzZWQgdG8gZW5jcnlwdCB0aGUgZGF0YS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxpemF0aW9uVmVjdG9yID0gZGF0YS5zbGljZSgwLCAxNik7XG4gICAgICAgICAgICBjb25zdCBwYXNzd29yZCA9IGNyeXB0by5wYmtkZjJTeW5jKHRoaXMuI2VuY3J5cHRpb25LZXksIGluaXRpYWxpemF0aW9uVmVjdG9yLnRvU3RyaW5nKCksIDEwXzAwMCwgMzIsICdzaGE1MTInKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoZW5jcnlwdGlvbkFsZ29yaXRobSwgcGFzc3dvcmQsIGluaXRpYWxpemF0aW9uVmVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gZGF0YS5zbGljZSgxNyk7XG4gICAgICAgICAgICBjb25zdCBkYXRhVXBkYXRlID0gdHlwZW9mIHNsaWNlID09PSAnc3RyaW5nJyA/IHN0cmluZ1RvVWludDhBcnJheShzbGljZSkgOiBzbGljZTtcbiAgICAgICAgICAgIHJldHVybiB1aW50OEFycmF5VG9TdHJpbmcoY29uY2F0VWludDhBcnJheXMoW2RlY2lwaGVyLnVwZGF0ZShkYXRhVXBkYXRlKSwgZGVjaXBoZXIuZmluYWwoKV0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7IH1cbiAgICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgX2hhbmRsZUNoYW5nZShnZXR0ZXIsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBnZXR0ZXIoKTtcbiAgICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZ2V0dGVyKCk7XG4gICAgICAgICAgICBpZiAoaXNEZWVwU3RyaWN0RXF1YWwobmV3VmFsdWUsIG9sZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmV2ZW50cy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9kZXNlcmlhbGl6ZSA9IHZhbHVlID0+IEpTT04ucGFyc2UodmFsdWUpO1xuICAgIF9zZXJpYWxpemUgPSB2YWx1ZSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgdW5kZWZpbmVkLCAnXFx0Jyk7XG4gICAgX3ZhbGlkYXRlKGRhdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLiN2YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMuI3ZhbGlkYXRvcihkYXRhKTtcbiAgICAgICAgaWYgKHZhbGlkIHx8ICF0aGlzLiN2YWxpZGF0b3IuZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy4jdmFsaWRhdG9yLmVycm9yc1xuICAgICAgICAgICAgLm1hcCgoeyBpbnN0YW5jZVBhdGgsIG1lc3NhZ2UgPSAnJyB9KSA9PiBgXFxgJHtpbnN0YW5jZVBhdGguc2xpY2UoMSl9XFxgICR7bWVzc2FnZX1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25maWcgc2NoZW1hIHZpb2xhdGlvbjogJyArIGVycm9ycy5qb2luKCc7ICcpKTtcbiAgICB9XG4gICAgX2Vuc3VyZURpcmVjdG9yeSgpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGFzIGl0IGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkIGluIHRoZSBtZWFudGltZS5cbiAgICAgICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZSh0aGlzLnBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgX3dyaXRlKHZhbHVlKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5fc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuI2VuY3J5cHRpb25LZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxpemF0aW9uVmVjdG9yID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkID0gY3J5cHRvLnBia2RmMlN5bmModGhpcy4jZW5jcnlwdGlvbktleSwgaW5pdGlhbGl6YXRpb25WZWN0b3IudG9TdHJpbmcoKSwgMTBfMDAwLCAzMiwgJ3NoYTUxMicpO1xuICAgICAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGVuY3J5cHRpb25BbGdvcml0aG0sIHBhc3N3b3JkLCBpbml0aWFsaXphdGlvblZlY3Rvcik7XG4gICAgICAgICAgICBkYXRhID0gY29uY2F0VWludDhBcnJheXMoW2luaXRpYWxpemF0aW9uVmVjdG9yLCBzdHJpbmdUb1VpbnQ4QXJyYXkoJzonKSwgY2lwaGVyLnVwZGF0ZShzdHJpbmdUb1VpbnQ4QXJyYXkoZGF0YSkpLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBDb25mIGJlaW5nIHBhY2thZ2VkIGluIGEgVWJ1bnR1IFNuYXAgYXBwLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9jb25mL3B1bGwvODJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlNOQVApIHtcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5wYXRoLCBkYXRhLCB7IG1vZGU6IHRoaXMuI29wdGlvbnMuY29uZmlnRmlsZU1vZGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF0b21pY1dyaXRlRmlsZVN5bmModGhpcy5wYXRoLCBkYXRhLCB7IG1vZGU6IHRoaXMuI29wdGlvbnMuY29uZmlnRmlsZU1vZGUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZWxlY3Ryb24tc3RvcmUvaXNzdWVzLzEwNlxuICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBvbiBXaW5kb3dzLCB3ZSB3aWxsIGdldCBhbiBFWERFViBlcnJvciB3aGVuIGF0b21pYyB3cml0aW5nXG4gICAgICAgICAgICAgICAgLy8gKGV2ZW4gdGhvdWdoIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSksIHNvIHdlIGZhbGwgYmFjayB0byBub24gYXRvbWljIHdyaXRlXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yPy5jb2RlID09PSAnRVhERVYnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5wYXRoLCBkYXRhLCB7IG1vZGU6IHRoaXMuI29wdGlvbnMuY29uZmlnRmlsZU1vZGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3dhdGNoKCkge1xuICAgICAgICB0aGlzLl9lbnN1cmVEaXJlY3RvcnkoKTtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMucGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyaXRlKGNyZWF0ZVBsYWluT2JqZWN0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgICAgICBmcy53YXRjaCh0aGlzLnBhdGgsIHsgcGVyc2lzdGVudDogZmFsc2UgfSwgZGVib3VuY2VGbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT24gTGludXggYW5kIFdpbmRvd3MsIHdyaXRpbmcgdG8gdGhlIGNvbmZpZyBmaWxlIGVtaXRzIGEgYHJlbmFtZWAgZXZlbnQsIHNvIHdlIHNraXAgY2hlY2tpbmcgdGhlIGV2ZW50IHR5cGUuXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTtcbiAgICAgICAgICAgIH0sIHsgd2FpdDogMTAwIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZzLndhdGNoRmlsZSh0aGlzLnBhdGgsIHsgcGVyc2lzdGVudDogZmFsc2UgfSwgZGVib3VuY2VGbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTtcbiAgICAgICAgICAgIH0sIHsgd2FpdDogNTAwMCB9KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX21pZ3JhdGUobWlncmF0aW9ucywgdmVyc2lvblRvTWlncmF0ZSwgYmVmb3JlRWFjaE1pZ3JhdGlvbikge1xuICAgICAgICBsZXQgcHJldmlvdXNNaWdyYXRlZFZlcnNpb24gPSB0aGlzLl9nZXQoTUlHUkFUSU9OX0tFWSwgJzAuMC4wJyk7XG4gICAgICAgIGNvbnN0IG5ld2VyVmVyc2lvbnMgPSBPYmplY3Qua2V5cyhtaWdyYXRpb25zKVxuICAgICAgICAgICAgLmZpbHRlcihjYW5kaWRhdGVWZXJzaW9uID0+IHRoaXMuX3Nob3VsZFBlcmZvcm1NaWdyYXRpb24oY2FuZGlkYXRlVmVyc2lvbiwgcHJldmlvdXNNaWdyYXRlZFZlcnNpb24sIHZlcnNpb25Ub01pZ3JhdGUpKTtcbiAgICAgICAgbGV0IHN0b3JlQmFja3VwID0geyAuLi50aGlzLnN0b3JlIH07XG4gICAgICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiBuZXdlclZlcnNpb25zKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmVFYWNoTWlncmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUVhY2hNaWdyYXRpb24odGhpcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbVZlcnNpb246IHByZXZpb3VzTWlncmF0ZWRWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9WZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWZXJzaW9uOiB2ZXJzaW9uVG9NaWdyYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnM6IG5ld2VyVmVyc2lvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtaWdyYXRpb24gPSBtaWdyYXRpb25zW3ZlcnNpb25dO1xuICAgICAgICAgICAgICAgIG1pZ3JhdGlvbj8uKHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldChNSUdSQVRJT05fS0VZLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c01pZ3JhdGVkVmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgc3RvcmVCYWNrdXAgPSB7IC4uLnRoaXMuc3RvcmUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZUJhY2t1cDtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyB0aGUgbWlncmF0aW9uISBDaGFuZ2VzIGFwcGxpZWQgdG8gdGhlIHN0b3JlIHVudGlsIHRoaXMgZmFpbGVkIG1pZ3JhdGlvbiB3aWxsIGJlIHJlc3RvcmVkLiAke2Vycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pc1ZlcnNpb25JblJhbmdlRm9ybWF0KHByZXZpb3VzTWlncmF0ZWRWZXJzaW9uKSB8fCAhc2VtdmVyLmVxKHByZXZpb3VzTWlncmF0ZWRWZXJzaW9uLCB2ZXJzaW9uVG9NaWdyYXRlKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0KE1JR1JBVElPTl9LRVksIHZlcnNpb25Ub01pZ3JhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jb250YWluc1Jlc2VydmVkS2V5KGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnNLZXkgPSBPYmplY3Qua2V5cyhrZXkpWzBdO1xuICAgICAgICAgICAgaWYgKGZpcnNLZXkgPT09IElOVEVSTkFMX0tFWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNvcHRpb25zLmFjY2Vzc1Byb3BlcnRpZXNCeURvdE5vdGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoYCR7SU5URVJOQUxfS0VZfS5gKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgX2lzVmVyc2lvbkluUmFuZ2VGb3JtYXQodmVyc2lvbikge1xuICAgICAgICByZXR1cm4gc2VtdmVyLmNsZWFuKHZlcnNpb24pID09PSBudWxsO1xuICAgIH1cbiAgICBfc2hvdWxkUGVyZm9ybU1pZ3JhdGlvbihjYW5kaWRhdGVWZXJzaW9uLCBwcmV2aW91c01pZ3JhdGVkVmVyc2lvbiwgdmVyc2lvblRvTWlncmF0ZSkge1xuICAgICAgICBpZiAodGhpcy5faXNWZXJzaW9uSW5SYW5nZUZvcm1hdChjYW5kaWRhdGVWZXJzaW9uKSkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzTWlncmF0ZWRWZXJzaW9uICE9PSAnMC4wLjAnICYmIHNlbXZlci5zYXRpc2ZpZXMocHJldmlvdXNNaWdyYXRlZFZlcnNpb24sIGNhbmRpZGF0ZVZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlbXZlci5zYXRpc2ZpZXModmVyc2lvblRvTWlncmF0ZSwgY2FuZGlkYXRlVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbXZlci5sdGUoY2FuZGlkYXRlVmVyc2lvbiwgcHJldmlvdXNNaWdyYXRlZFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbXZlci5ndChjYW5kaWRhdGVWZXJzaW9uLCB2ZXJzaW9uVG9NaWdyYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBfZ2V0KGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBnZXRQcm9wZXJ0eSh0aGlzLnN0b3JlLCBrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIF9zZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHN0b3JlIH0gPSB0aGlzO1xuICAgICAgICBzZXRQcm9wZXJ0eShzdG9yZSwga2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7XG5cdGFwcCxcblx0aXBjTWFpbixcblx0c2hlbGwsXG59IGZyb20gJ2VsZWN0cm9uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tZHVwbGljYXRlc1xuaW1wb3J0IGVsZWN0cm9uIGZyb20gJ2VsZWN0cm9uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tZHVwbGljYXRlc1xuaW1wb3J0IENvbmYgZnJvbSAnY29uZic7XG5cbmxldCBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vIFNldCB1cCB0aGUgYGlwY01haW5gIGhhbmRsZXIgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiByZW5kZXJlciBhbmQgbWFpbiBwcm9jZXNzLlxuY29uc3QgaW5pdERhdGFMaXN0ZW5lciA9ICgpID0+IHtcblx0aWYgKCFpcGNNYWluIHx8ICFhcHApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VsZWN0cm9uIFN0b3JlOiBZb3UgbmVlZCB0byBjYWxsIGAuaW5pdFJlbmRlcmVyKClgIGZyb20gdGhlIG1haW4gcHJvY2Vzcy4nKTtcblx0fVxuXG5cdGNvbnN0IGFwcERhdGEgPSB7XG5cdFx0ZGVmYXVsdEN3ZDogYXBwLmdldFBhdGgoJ3VzZXJEYXRhJyksXG5cdFx0YXBwVmVyc2lvbjogYXBwLmdldFZlcnNpb24oKSxcblx0fTtcblxuXHRpZiAoaXNJbml0aWFsaXplZCkge1xuXHRcdHJldHVybiBhcHBEYXRhO1xuXHR9XG5cblx0aXBjTWFpbi5vbignZWxlY3Ryb24tc3RvcmUtZ2V0LWRhdGEnLCBldmVudCA9PiB7XG5cdFx0ZXZlbnQucmV0dXJuVmFsdWUgPSBhcHBEYXRhO1xuXHR9KTtcblxuXHRpc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuXHRyZXR1cm4gYXBwRGF0YTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVsZWN0cm9uU3RvcmUgZXh0ZW5kcyBDb25mIHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdGxldCBkZWZhdWx0Q3dkO1xuXHRcdGxldCBhcHBWZXJzaW9uO1xuXG5cdFx0Ly8gSWYgd2UgYXJlIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLCB3ZSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBtYWluIHByb2Nlc3Ncblx0XHQvLyB0byBnZXQgdGhlIHJlcXVpcmVkIGRhdGEgZm9yIHRoZSBtb2R1bGUgb3RoZXJ3aXNlLCB3ZSBwdWxsIGZyb20gdGhlIG1haW4gcHJvY2Vzcy5cblx0XHRpZiAocHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XG5cdFx0XHRjb25zdCBhcHBEYXRhID0gZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoJ2VsZWN0cm9uLXN0b3JlLWdldC1kYXRhJyk7XG5cblx0XHRcdGlmICghYXBwRGF0YSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VsZWN0cm9uIFN0b3JlOiBZb3UgbmVlZCB0byBjYWxsIGAuaW5pdFJlbmRlcmVyKClgIGZyb20gdGhlIG1haW4gcHJvY2Vzcy4nKTtcblx0XHRcdH1cblxuXHRcdFx0KHtkZWZhdWx0Q3dkLCBhcHBWZXJzaW9ufSA9IGFwcERhdGEpO1xuXHRcdH0gZWxzZSBpZiAoaXBjTWFpbiAmJiBhcHApIHtcblx0XHRcdCh7ZGVmYXVsdEN3ZCwgYXBwVmVyc2lvbn0gPSBpbml0RGF0YUxpc3RlbmVyKCkpO1xuXHRcdH1cblxuXHRcdG9wdGlvbnMgPSB7XG5cdFx0XHRuYW1lOiAnY29uZmlnJyxcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0fTtcblxuXHRcdG9wdGlvbnMucHJvamVjdFZlcnNpb24gfHw9IGFwcFZlcnNpb247XG5cblx0XHRpZiAob3B0aW9ucy5jd2QpIHtcblx0XHRcdG9wdGlvbnMuY3dkID0gcGF0aC5pc0Fic29sdXRlKG9wdGlvbnMuY3dkKSA/IG9wdGlvbnMuY3dkIDogcGF0aC5qb2luKGRlZmF1bHRDd2QsIG9wdGlvbnMuY3dkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3B0aW9ucy5jd2QgPSBkZWZhdWx0Q3dkO1xuXHRcdH1cblxuXHRcdG9wdGlvbnMuY29uZmlnTmFtZSA9IG9wdGlvbnMubmFtZTtcblx0XHRkZWxldGUgb3B0aW9ucy5uYW1lO1xuXG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdH1cblxuXHRzdGF0aWMgaW5pdFJlbmRlcmVyKCkge1xuXHRcdGluaXREYXRhTGlzdGVuZXIoKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5JbkVkaXRvcigpIHtcblx0XHRjb25zdCBlcnJvciA9IGF3YWl0IHNoZWxsLm9wZW5QYXRoKHRoaXMucGF0aCk7XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XG5cdFx0fVxuXHR9XG59XG4iLCIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IFN0b3JlIGZyb20gXCJlbGVjdHJvbi1zdG9yZVwiO1xuXG5jb25zdCB0b2tlblR5cGVLZXkgPSBcInRva2VuVHlwZVwiO1xuXG5jb25zdCBhY2Nlc3NUb2tlbktleSA9IFwiYWNjZXNzVG9rZW5cIjtcblxuY29uc3Qgc2NoZW1hID0ge1xuICB0b2tlblR5cGU6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICB9LFxuXG4gIGFjY2Vzc1Rva2VuOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgfSxcbn07XG5cbmNvbnN0IHN0b3JlSW5zdGFuY2U6IFN0b3JlID0gbmV3IFN0b3JlKHtcbiAgbmFtZTogXCJhdXRoZW50aWNhdGlvbi14d2lraS1tYWluXCIsXG4gIHNjaGVtYSxcbiAgLy8gVE9ETzogYWRkIGVuY3J5cHRpb24ga2V5XG59KTtcblxuZnVuY3Rpb24gc2V0PFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGUgcmVzb2x1dGlvbiBmYWlsaW5nIGJlY2F1c2Ugb2YgZWxlY3Ryb24tc3RvcmUgbGlicmFyeSBidWdcbiAgc3RvcmVJbnN0YW5jZS5zZXQoa2V5LCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGdldDxUPihrZXk6IHN0cmluZyk6IFQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGUgcmVzb2x1dGlvbiBmYWlsaW5nIGJlY2F1c2Ugb2YgZWxlY3Ryb24tc3RvcmUgbGlicmFyeSBidWdcbiAgcmV0dXJuIHN0b3JlSW5zdGFuY2UuZ2V0KGtleSkgYXMgVDtcbn1cblxuZnVuY3Rpb24gcm0oa2V5OiBzdHJpbmcpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlIHJlc29sdXRpb24gZmFpbGluZyBiZWNhdXNlIG9mIGVsZWN0cm9uLXN0b3JlIGxpYnJhcnkgYnVnXG4gIHN0b3JlSW5zdGFuY2UuZGVsZXRlKGtleSk7XG59XG5cbmZ1bmN0aW9uIHNldFRva2VuVHlwZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIHNldCh0b2tlblR5cGVLZXksIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gc2V0QWNjZXNzVG9rZW4odmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICBzZXQoYWNjZXNzVG9rZW5LZXksIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5UeXBlKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXQodG9rZW5UeXBlS2V5KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW4oKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldChhY2Nlc3NUb2tlbktleSk7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZVRva2VuVHlwZSgpOiB2b2lkIHtcbiAgcm0odG9rZW5UeXBlS2V5KTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlQWNjZXNzVG9rZW4oKTogdm9pZCB7XG4gIHJtKGFjY2Vzc1Rva2VuS2V5KTtcbn1cblxuZXhwb3J0IHtcbiAgc2V0VG9rZW5UeXBlLFxuICBzZXRBY2Nlc3NUb2tlbixcbiAgZ2V0VG9rZW5UeXBlLFxuICBnZXRBY2Nlc3NUb2tlbixcbiAgZGVsZXRlVG9rZW5UeXBlLFxuICBkZWxldGVBY2Nlc3NUb2tlbixcbn07XG4iLCIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdywgaXBjTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtcbiAgZ2V0QWNjZXNzVG9rZW4sXG4gIGdldFRva2VuVHlwZSxcbiAgc2V0QWNjZXNzVG9rZW4sXG4gIHNldFRva2VuVHlwZSxcbiAgZGVsZXRlQWNjZXNzVG9rZW4sXG4gIGRlbGV0ZVRva2VuVHlwZSxcbn0gZnJvbSBcIi4vc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgVXNlckRldGFpbHMgfSBmcm9tIFwiQHh3aWtpL2NyaXN0YWwtYXV0aGVudGljYXRpb24tYXBpXCI7XG5cbmNvbnN0IGNhbGxiYWNrVXJsID0gXCJodHRwOi8vY2FsbGJhY2svXCI7XG5cbi8vIFRPRE86IG1heWJlIGdlbmVyYXRlIHJhbmRvbWx5LCBvciBhc2sgZm9yIHRoZSB1c2VyIHRvIHBpY2sgb25lIGF0IHN0YXJ0P1xuY29uc3QgY2xpZW50SWQgPSBcImFiY2RcIjtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tQ2FsbGJhY2tDb2RlKGNvZGU6IHN0cmluZywgb2lkY1VybDogc3RyaW5nKSB7XG4gIGNvbnN0IHRva2VuVXJsID0gYCR7b2lkY1VybH0vb2lkYy90b2tlbmA7XG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgZ3JhbnRfdHlwZTogXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgICBjb2RlLFxuICAgIHJlZGlyZWN0X3VyaTogY2FsbGJhY2tVcmwsXG4gICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgfTtcbiAgcmV0dXJuIGF4aW9zLnBvc3QodG9rZW5VcmwsIGRhdGEsIHtcbiAgICB1cmw6IHRva2VuVXJsLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluaXRBdXRoKFxuICB3aW46IEJyb3dzZXJXaW5kb3csXG4gIHJlbG9hZDogKHdpbjogQnJvd3NlcldpbmRvdykgPT4gdm9pZCxcbiAgb2lkY1VybDogc3RyaW5nLFxuKSB7XG4gIHdpbi53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Qub25CZWZvcmVSZXF1ZXN0KFxuICAgIHtcbiAgICAgIHVybHM6IFtgJHtjYWxsYmFja1VybH0qYF0sXG4gICAgfSxcbiAgICBhc3luYyAoeyB1cmwgfSwgY2FsbGJhY2spID0+IHtcbiAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChvaWRjVXJsKSkge1xuICAgICAgICAvLyBBbGxvdyBmb3IgdGhlIHJlZGlyZWN0cyBmcm9tIHRoZSBvaWRjIHNlcnZlciB0byBiZSBwZXJmb3JtZWQgd2l0aG91dCBiZWluZyBibG9ja2VkLlxuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0VG9rZW5Gcm9tQ2FsbGJhY2tDb2RlKFxuICAgICAgICAgIHBhcnNlZFVSTC5zZWFyY2hQYXJhbXMuZ2V0KFwiY29kZVwiKSEsXG4gICAgICAgICAgb2lkY1VybCxcbiAgICAgICAgKTtcbiAgICAgICAgc2V0VG9rZW5UeXBlKHJlc3BvbnNlLmRhdGEudG9rZW5fdHlwZSk7XG4gICAgICAgIHNldEFjY2Vzc1Rva2VuKHJlc3BvbnNlLmRhdGEuYWNjZXNzX3Rva2VuKTtcbiAgICAgICAgbWFpbldpbi5zaG93KCk7XG4gICAgICAgIHJlbG9hZChtYWluV2luKTtcbiAgICAgICAgd2luPy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdpbmRvdyh1cmw6IHN0cmluZykge1xuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGg6IDgwMCxcbiAgICBoZWlnaHQ6IDYwMCxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZSxcbiAgICB9LFxuICB9KTtcblxuICBhd2FpdCB3aW4ubG9hZFVSTCh1cmwpO1xuXG4gIHJldHVybiB3aW47XG59XG5cbmxldCBhdXRoV2luOiBCcm93c2VyV2luZG93O1xubGV0IG1haW5XaW46IEJyb3dzZXJXaW5kb3c7XG5cbmZ1bmN0aW9uIGdldEF1dGhvcml6YXRpb25WYWx1ZSgpIHtcbiAgcmV0dXJuIGAke2dldFRva2VuVHlwZSgpfSAke2dldEFjY2Vzc1Rva2VuKCl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoXG4gIGJyb3dzZXJXaW5kb3c6IEJyb3dzZXJXaW5kb3csXG4gIHJlbG9hZDogKHdpbjogQnJvd3NlcldpbmRvdykgPT4gdm9pZCxcbik6IHZvaWQge1xuICBpcGNNYWluLmhhbmRsZShcbiAgICBcImF1dGhlbnRpY2F0aW9uOnh3aWtpOmxvZ2luXCIsXG4gICAgYXN5bmMgKGV2ZW50LCB7IG9pZGNVcmwgfTogeyBvaWRjVXJsOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgYXV0aG9yaXphdGlvblVybCA9IG5ldyBVUkwoYCR7b2lkY1VybH0vb2lkYy9hdXRob3JpemF0aW9uYCk7XG4gICAgICBhdXRob3JpemF0aW9uVXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJyZXNwb25zZV90eXBlXCIsIFwiY29kZVwiKTtcbiAgICAgIGF1dGhvcml6YXRpb25Vcmwuc2VhcmNoUGFyYW1zLnNldChcImNsaWVudF9pZFwiLCBjbGllbnRJZCk7XG4gICAgICBhdXRob3JpemF0aW9uVXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJyZWRpcmVjdF91cmlcIiwgY2FsbGJhY2tVcmwpO1xuICAgICAgLy8gU2F2ZSB0aGUgd2luZG93IGFza2luZyBmb3IgbG9naW4gKGkuZS4sIHRoZSBtYWluIHdpbmRvdyksIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgLy8gYSBuZXcgd2luZG93cyBmb3IgdGhlIG9pZGMgd2ViIHBhZ2UuIFRoZW4sIGhpZGUgdGhlIG1haW4gd2luZG93IGZvciB0aGVcbiAgICAgIC8vIGR1cmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLlxuICAgICAgbWFpbldpbiA9IGJyb3dzZXJXaW5kb3c7XG4gICAgICBhdXRoV2luID0gYXdhaXQgY3JlYXRlV2luZG93KGF1dGhvcml6YXRpb25VcmwudG9TdHJpbmcoKSk7XG5cbiAgICAgIGluaXRBdXRoKGF1dGhXaW4sIHJlbG9hZCwgb2lkY1VybCk7XG4gICAgICBtYWluV2luLmhpZGUoKTtcbiAgICB9LFxuICApO1xuXG4gIGlwY01haW4uaGFuZGxlKFwiYXV0aGVudGljYXRpb246eHdpa2k6aXNMb2dnZWRJblwiLCAoKSA9PiB7XG4gICAgY29uc3QgdG9rZW5UeXBlID0gZ2V0VG9rZW5UeXBlKCk7XG4gICAgY29uc3QgYWNjZXNzVG9rZW5LZXkgPSBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIHJldHVybiB0b2tlblR5cGUgJiYgYWNjZXNzVG9rZW5LZXk7XG4gIH0pO1xuXG4gIGlwY01haW4uaGFuZGxlKFxuICAgIFwiYXV0aGVudGljYXRpb246eHdpa2k6dXNlckRldGFpbHNcIixcbiAgICBhc3luYyAoZXZlbnQsIHsgYmFzZVVSTCB9OiB7IGJhc2VVUkw6IHN0cmluZyB9KTogUHJvbWlzZTxVc2VyRGV0YWlscz4gPT4ge1xuICAgICAgY29uc3QgdXNlcmluZm9VcmwgPSBgJHtiYXNlVVJMfS9vaWRjL3VzZXJpbmZvYDtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBnZXRBdXRob3JpemF0aW9uVmFsdWUoKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgcHJvZmlsZSwgbmFtZSB9LFxuICAgICAgfSA9IGF3YWl0IGF4aW9zLmdldCh1c2VyaW5mb1VybCwgZGF0YSk7XG5cbiAgICAgIHJldHVybiB7IHByb2ZpbGUsIG5hbWUgfTtcbiAgICB9LFxuICApO1xuICBpcGNNYWluLmhhbmRsZShcImF1dGhlbnRpY2F0aW9uOnh3aWtpOmF1dGhvcml6YXRpb25WYWx1ZVwiLCAoKSA9PiB7XG4gICAgcmV0dXJuIGdldEF1dGhvcml6YXRpb25WYWx1ZSgpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJhdXRoZW50aWNhdGlvbjp4d2lraTpsb2dvdXRcIiwgKCkgPT4ge1xuICAgIGRlbGV0ZUFjY2Vzc1Rva2VuKCk7XG4gICAgZGVsZXRlVG9rZW5UeXBlKCk7XG4gIH0pO1xufVxuIiwiLypcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC5cbiAqXG4gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mXG4gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVVxuICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BXG4gKiAwMjExMC0xMzAxIFVTQSwgb3Igc2VlIHRoZSBGU0Ygc2l0ZTogaHR0cDovL3d3dy5mc2Yub3JnLlxuICovXG5cbmltcG9ydCB7IGFwcCwgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IFwiLi9zZWN1cml0eS1yZXN0cmljdGlvbnNcIjtcbmltcG9ydCB7IHJlc3RvcmVPckNyZWF0ZVdpbmRvdyB9IGZyb20gXCIuL21haW5XaW5kb3dcIjtcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuLy8gQHRzLWV4cGVjdC1lcnJvciBzaG91bGRuJ3QgaGFwcGVuIGJ1dCB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSB0eXBlcyBmb3IgdGhlIHdob2xlIHByb2plY3Qgb25jZS5cbmltcG9ydCBsb2FkIGZyb20gXCJAeHdpa2kvY3Jpc3RhbC1lbGVjdHJvbi1zdG9yYWdlL21haW5cIjtcbi8vIEB0cy1leHBlY3QtZXJyb3Igc2hvdWxkbid0IGhhcHBlbiBidXQgd2UgbmVlZCB0byBnZW5lcmF0ZSB0aGUgdHlwZXMgZm9yIHRoZSB3aG9sZSBwcm9qZWN0IG9uY2UuXG5pbXBvcnQgbG9hZEJyb3dzZXIgZnJvbSBcIkB4d2lraS9jcmlzdGFsLWJyb3dzZXItZWxlY3Ryb24vbWFpblwiO1xuaW1wb3J0IHsgbG9hZCBhcyBsb2FkQXV0aGVudGljYXRpb24gfSBmcm9tIFwiQHh3aWtpL2NyaXN0YWwtZWxlY3Ryb24tYXV0aGVudGljYXRpb24teHdpa2ktbWFpblwiO1xuaW1wb3J0IHsgbG9hZEZpbGUgfSBmcm9tIFwiLi9yZWxvYWRcIjtcblxuLyoqXG4gKiBQcmV2ZW50IGVsZWN0cm9uIGZyb20gcnVubmluZyBtdWx0aXBsZSBpbnN0YW5jZXMuXG4gKi9cbmNvbnN0IGlzU2luZ2xlSW5zdGFuY2UgPSBhcHAucmVxdWVzdFNpbmdsZUluc3RhbmNlTG9jaygpO1xuaWYgKCFpc1NpbmdsZUluc3RhbmNlKSB7XG4gIGFwcC5xdWl0KCk7XG4gIHByb2Nlc3MuZXhpdCgwKTtcbn1cbmFwcC5vbihcInNlY29uZC1pbnN0YW5jZVwiLCByZXN0b3JlT3JDcmVhdGVXaW5kb3cpO1xuXG4vKipcbiAqIERpc2FibGUgSGFyZHdhcmUgQWNjZWxlcmF0aW9uIHRvIHNhdmUgbW9yZSBzeXN0ZW0gcmVzb3VyY2VzLlxuICovXG5hcHAuZGlzYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uKCk7XG5cbi8qKlxuICogU2hvdXQgZG93biBiYWNrZ3JvdW5kIHByb2Nlc3MgaWYgYWxsIHdpbmRvd3Mgd2FzIGNsb3NlZFxuICovXG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7XG4gIGlmIChwbGF0Zm9ybSAhPT0gXCJkYXJ3aW5cIikge1xuICAgIGFwcC5xdWl0KCk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gd2luZG93IHdoZW4gdGhlIGJhY2tncm91bmQgcHJvY2VzcyBpcyByZWFkeS5cbiAqL1xuYXBwXG4gIC53aGVuUmVhZHkoKVxuICAudGhlbigoKSA9PiB7XG4gICAgbG9hZCgpO1xuICAgIHJlc3RvcmVPckNyZWF0ZVdpbmRvdygpLnRoZW4oKHcpID0+IHtcbiAgICAgIGxvYWRCcm93c2VyKHcpO1xuICAgICAgbG9hZEF1dGhlbnRpY2F0aW9uKHcsIGxvYWRGaWxlKTtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9hcHAjZXZlbnQtYWN0aXZhdGUtbWFjb3MgRXZlbnQ6ICdhY3RpdmF0ZScuXG4gICAgICovXG4gICAgYXBwLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgaWYgKEJyb3dzZXJXaW5kb3cuZ2V0QWxsV2luZG93cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN0b3JlT3JDcmVhdGVXaW5kb3coKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSlcbiAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIGNyZWF0ZSB3aW5kb3c6XCIsIGUpKTtcblxuLyoqXG4gKiBJbnN0YWxsIFZ1ZS5qcyBvciBhbnkgb3RoZXIgZXh0ZW5zaW9uIGluIGRldmVsb3BtZW50IG1vZGUgb25seS5cbiAqIE5vdGU6IFlvdSBtdXN0IGluc3RhbGwgYGVsZWN0cm9uLWRldnRvb2xzLWluc3RhbGxlcmAgbWFudWFsbHlcbiAqL1xuLy8gaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbi8vICAgYXBwXG4vLyAgICAgLndoZW5SZWFkeSgpXG4vLyAgICAgLnRoZW4oKCkgPT4gaW1wb3J0KCdlbGVjdHJvbi1kZXZ0b29scy1pbnN0YWxsZXInKSlcbi8vICAgICAudGhlbihtb2R1bGUgPT4ge1xuLy8gICAgICAgY29uc3Qge2RlZmF1bHQ6IGluc3RhbGxFeHRlbnNpb24sIFZVRUpTM19ERVZUT09MU30gPVxuLy8gICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEhvdGZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2Nhd2EtOTMvdml0ZS1lbGVjdHJvbi1idWlsZGVyL2lzc3Vlcy85MTVcbi8vICAgICAgICAgdHlwZW9mIG1vZHVsZS5kZWZhdWx0ID09PSAnZnVuY3Rpb24nID8gbW9kdWxlIDogKG1vZHVsZS5kZWZhdWx0IGFzIHR5cGVvZiBtb2R1bGUpO1xuLy9cbi8vICAgICAgIHJldHVybiBpbnN0YWxsRXh0ZW5zaW9uKFZVRUpTM19ERVZUT09MUywge1xuLy8gICAgICAgICBsb2FkRXh0ZW5zaW9uT3B0aW9uczoge1xuLy8gICAgICAgICAgIGFsbG93RmlsZUFjY2VzczogdHJ1ZSxcbi8vICAgICAgICAgfSxcbi8vICAgICAgIH0pO1xuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIGluc3RhbGwgZXh0ZW5zaW9uOicsIGUpKTtcbi8vIH1cblxuLyoqXG4gKiBDaGVjayBmb3IgYXBwIHVwZGF0ZXMsIGluc3RhbGwgaXQgaW4gYmFja2dyb3VuZCBhbmQgbm90aWZ5IHVzZXIgdGhhdCBuZXcgdmVyc2lvbiB3YXMgaW5zdGFsbGVkLlxuICogTm8gcmVhc29uIHJ1biB0aGlzIGluIG5vbi1wcm9kdWN0aW9uIGJ1aWxkLlxuICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbi5idWlsZC9hdXRvLXVwZGF0ZS5odG1sI3F1aWNrLXNldHVwLWd1aWRlXG4gKlxuICogTm90ZTogSXQgbWF5IHRocm93IFwiRU5PRU5UOiBubyBzdWNoIGZpbGUgYXBwLXVwZGF0ZS55bWxcIlxuICogaWYgeW91IGNvbXBpbGUgcHJvZHVjdGlvbiBhcHAgd2l0aG91dCBwdWJsaXNoaW5nIGl0IHRvIGRpc3RyaWJ1dGlvbiBzZXJ2ZXIuXG4gKiBMaWtlIGBucG0gcnVuIGNvbXBpbGVgIGRvZXMuIEl0J3Mgb2sg8J+YhVxuICovXG5pZiAoaW1wb3J0Lm1ldGEuZW52LlBST0QpIHtcbiAgYXBwXG4gICAgLndoZW5SZWFkeSgpXG4gICAgLnRoZW4oKCkgPT5cbiAgICAgIC8qKlxuICAgICAgICogSGVyZSB3ZSBmb3JjZWQgdG8gdXNlIGByZXF1aXJlYCBzaW5jZSBlbGVjdHJvbiBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgZHluYW1pYyBpbXBvcnQgaW4gYXNhciBhcmNoaXZlc1xuICAgICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzM4ODI5XG4gICAgICAgKiBQb3RlbnRpYWxseSBpdCBtYXkgYmUgZml4ZWQgYnkgdGhpcyBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vcHVsbC8zNzUzNVxuICAgICAgICovXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgcmVxdWlyZShcImVsZWN0cm9uLXVwZGF0ZXJcIikuYXV0b1VwZGF0ZXIuY2hlY2tGb3JVcGRhdGVzQW5kTm90aWZ5KCksXG4gICAgKVxuICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcihcIkZhaWxlZCBjaGVjayBhbmQgaW5zdGFsbCB1cGRhdGVzOlwiLCBlKSk7XG59XG4iXSwibmFtZXMiOlsiQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUyIsIkFMTE9XRURfRVhURVJOQUxfT1JJR0lOUyIsImFwcCIsIl8iLCJjb250ZW50cyIsImV2ZW50IiwidXJsIiwib3JpZ2luIiwiVVJMIiwid2ViQ29udGVudHMiLCJwZXJtaXNzaW9uIiwiY2FsbGJhY2siLCJwZXJtaXNzaW9uR3JhbnRlZCIsInNoZWxsIiwid2ViUHJlZmVyZW5jZXMiLCJwYXJhbXMiLCJsb2FkRmlsZSIsIndpbiIsInJlc29sdmUiLCJjcmVhdGVXaW5kb3ciLCJicm93c2VyV2luZG93IiwiQnJvd3NlcldpbmRvdyIsImpvaW4iLCJyZXN0b3JlT3JDcmVhdGVXaW5kb3ciLCJ3aW5kb3ciLCJ3IiwiSE9NRV9QQVRIIiwiSE9NRV9QQVRIX0ZVTEwiLCJyZXNvbHZlUGF0aCIsInBhZ2UiLCJsYXN0U2VnbWVudHMiLCJob21lZGlyIiwicmVzb2x2ZVBhZ2VQYXRoIiwicmVzb2x2ZUF0dGFjaG1lbnRzUGF0aCIsInJlc29sdmVBdHRhY2htZW50UGF0aCIsImZpbGVuYW1lIiwiaXNGaWxlIiwicGF0aCIsInN0YXQiLCJmcyIsImUiLCJpc0RpcmVjdG9yeSIsInBhdGhFeGlzdHMiLCJyZWFkUGFnZSIsImlzV2l0aGluIiwicGFnZUNvbnRlbnQiLCJyZWFkQXR0YWNobWVudHMiLCJyb290IiwicmVsIiwicmVsYXRpdmUiLCJzYXZlUGFnZSIsImNvbnRlbnQiLCJ0aXRsZSIsImpzb25Db250ZW50IiwiZmlsZUNvbnRlbnQiLCJ0ZXh0RGVjb2RlciIsIm5ld0pTT04iLCJwYXJlbnREaXJlY3RvcnkiLCJkaXJuYW1lIiwic2F2ZUF0dGFjaG1lbnQiLCJmaWxlUGF0aCIsImxpc3RDaGlsZHJlbiIsImZvbGRlclBhdGgiLCJjaGlsZHJlbiIsImZpbGVzIiwiZmlsZSIsImRlbGV0ZVBhZ2UiLCJsb2FkIiwiaXBjTWFpbiIsInJlbG9hZEJyb3dzZXIiLCJiaW5kIiwiZm4iLCJ0aGlzQXJnIiwidG9TdHJpbmciLCJnZXRQcm90b3R5cGVPZiIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJzdHIiLCJraW5kT2ZUZXN0IiwidHlwZSIsInR5cGVPZlRlc3QiLCJpc0FycmF5IiwiaXNVbmRlZmluZWQiLCJpc0J1ZmZlciIsInZhbCIsImlzRnVuY3Rpb24iLCJpc0FycmF5QnVmZmVyIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJyZXN1bHQiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc0Jvb2xlYW4iLCJpc1BsYWluT2JqZWN0IiwicHJvdG90eXBlIiwiaXNEYXRlIiwiaXNCbG9iIiwiaXNGaWxlTGlzdCIsImlzU3RyZWFtIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzUmVhZGFibGVTdHJlYW0iLCJpc1JlcXVlc3QiLCJpc1Jlc3BvbnNlIiwiaXNIZWFkZXJzIiwidHJpbSIsImZvckVhY2giLCJvYmoiLCJhbGxPd25LZXlzIiwiaSIsImwiLCJrZXlzIiwibGVuIiwia2V5IiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJhIiwiYiIsInN0cmlwQk9NIiwiaW5oZXJpdHMiLCJjb25zdHJ1Y3RvciIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsImRlc2NyaXB0b3JzIiwidG9GbGF0T2JqZWN0Iiwic291cmNlT2JqIiwiZGVzdE9iaiIsImZpbHRlciIsInByb3BGaWx0ZXIiLCJwcm9wIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsImxhc3RJbmRleCIsInRvQXJyYXkiLCJhcnIiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiZm9yRWFjaEVudHJ5IiwiaXRlcmF0b3IiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiaXNIVE1MRm9ybSIsInRvQ2FtZWxDYXNlIiwibSIsInAxIiwicDIiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsIm5hbWUiLCJyZXQiLCJmcmVlemVNZXRob2RzIiwidmFsdWUiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJBTFBIQSIsIkRJR0lUIiwiQUxQSEFCRVQiLCJnZW5lcmF0ZVN0cmluZyIsInNpemUiLCJhbHBoYWJldCIsImxlbmd0aCIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJzdGFjayIsInZpc2l0Iiwic291cmNlIiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiaXNBc3luY0ZuIiwiaXNUaGVuYWJsZSIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInRva2VuIiwiY2FsbGJhY2tzIiwiZGF0YSIsImNiIiwiYXNhcCIsInV0aWxzJDIiLCJBeGlvc0Vycm9yIiwibWVzc2FnZSIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJ1dGlscyIsImVycm9yIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiU3RyZWFtIiwicmVxdWlyZSQkMCIsInV0aWwiLCJyZXF1aXJlJCQxIiwiZGVsYXllZF9zdHJlYW0iLCJEZWxheWVkU3RyZWFtIiwib3B0aW9ucyIsImRlbGF5ZWRTdHJlYW0iLCJvcHRpb24iLCJyZWFsRW1pdCIsImFyZ3MiLCJyIiwicmVxdWlyZSQkMiIsImNvbWJpbmVkX3N0cmVhbSIsIkNvbWJpbmVkU3RyZWFtIiwiY29tYmluZWRTdHJlYW0iLCJzdHJlYW0iLCJpc1N0cmVhbUxpa2UiLCJuZXdTdHJlYW0iLCJkZXN0IiwiZ2V0U3RyZWFtIiwic2VsZiIsImVyciIsIm1pbWVEYiIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiZXhwb3J0cyIsImNoYXJzZXQiLCJjb250ZW50VHlwZSIsImV4dGVuc2lvbiIsImxvb2t1cCIsInBvcHVsYXRlTWFwcyIsIm1hdGNoIiwibWltZSIsImV4dHMiLCJleHRlbnNpb25zIiwidHlwZXMiLCJwcmVmZXJlbmNlIiwiZnJvbSIsInRvIiwiZGVmZXJfMSIsImRlZmVyIiwibmV4dFRpY2siLCJhc3luY18xIiwiYXN5bmMiLCJpc0FzeW5jIiwiYWJvcnRfMSIsImFib3J0Iiwic3RhdGUiLCJjbGVhbiIsIml0ZXJhdGVfMSIsIml0ZXJhdGUiLCJsaXN0IiwicnVuSm9iIiwib3V0cHV0IiwiaXRlbSIsImFib3J0ZXIiLCJzdGF0ZV8xIiwic29ydE1ldGhvZCIsImlzTmFtZWRMaXN0IiwiaW5pdFN0YXRlIiwidGVybWluYXRvcl8xIiwidGVybWluYXRvciIsInBhcmFsbGVsXzEiLCJwYXJhbGxlbCIsInNlcmlhbE9yZGVyZWRNb2R1bGUiLCJzZXJpYWxPcmRlcmVkIiwiYXNjZW5kaW5nIiwiZGVzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsInNlcmlhbF8xIiwic2VyaWFsIiwiYXN5bmNraXQiLCJwb3B1bGF0ZSIsImRzdCIsInNyYyIsImh0dHAiLCJyZXF1aXJlJCQzIiwiaHR0cHMiLCJyZXF1aXJlJCQ0IiwicGFyc2VVcmwiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwiZm9ybV9kYXRhIiwiRm9ybURhdGEiLCJmaWVsZCIsImFwcGVuZCIsImhlYWRlciIsImZvb3RlciIsInZhbHVlTGVuZ3RoIiwiZmlsZVNpemUiLCJjb250ZW50RGlzcG9zaXRpb24iLCJoZWFkZXJzIiwibmV4dCIsImxhc3RQYXJ0IiwidXNlckhlYWRlcnMiLCJmb3JtSGVhZGVycyIsImJvdW5kYXJ5IiwiZGF0YUJ1ZmZlciIsImtub3duTGVuZ3RoIiwiaGFzS25vd25MZW5ndGgiLCJ2YWx1ZXMiLCJkZWZhdWx0cyIsIm9uUmVzcG9uc2UiLCJyZXNwb25jZSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwiaXNGbGF0QXJyYXkiLCJwcmVkaWNhdGVzIiwidG9Gb3JtRGF0YSIsImZvcm1EYXRhIiwiUGxhdGZvcm1Gb3JtRGF0YSIsIm1ldGFUb2tlbnMiLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJpbmRleGVzIiwidXNlQmxvYiIsImNvbnZlcnRWYWx1ZSIsImVsIiwiaW5kZXgiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZW5jb2RlIiwiY2hhck1hcCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwiZW5jb2RlciIsIl9lbmNvZGUiLCJidWlsZFVSTCIsInNlcmlhbGl6ZUZuIiwic2VyaWFsaXplZFBhcmFtcyIsImhhc2htYXJrSW5kZXgiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsImlkIiwiaCIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwicGxhdGZvcm0kMSIsIlVSTFNlYXJjaFBhcmFtcyIsImhhc0Jyb3dzZXJFbnYiLCJfbmF2aWdhdG9yIiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwicGxhdGZvcm0iLCJ0b1VSTEVuY29kZWRGb3JtIiwiaGVscGVycyIsInBhcnNlUHJvcFBhdGgiLCJhcnJheVRvT2JqZWN0IiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJzdHJpbmdpZnlTYWZlbHkiLCJyYXdWYWx1ZSIsInBhcnNlciIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsIl9Gb3JtRGF0YSIsInRyYW5zaXRpb25hbCIsImZvcmNlZEpTT05QYXJzaW5nIiwiSlNPTlJlcXVlc3RlZCIsInN0cmljdEpTT05QYXJzaW5nIiwic3RhdHVzIiwibWV0aG9kIiwiaWdub3JlRHVwbGljYXRlT2YiLCJwYXJzZUhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsIiRpbnRlcm5hbHMiLCJub3JtYWxpemVIZWFkZXIiLCJub3JtYWxpemVWYWx1ZSIsInBhcnNlVG9rZW5zIiwidG9rZW5zIiwidG9rZW5zUkUiLCJpc1ZhbGlkSGVhZGVyTmFtZSIsIm1hdGNoSGVhZGVyVmFsdWUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJmb3JtYXRIZWFkZXIiLCJjaGFyIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZmlyc3QiLCJjb21wdXRlZCIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJDYW5jZWxlZEVycm9yIiwic2V0dGxlIiwicmVqZWN0IiwidmFsaWRhdGVTdGF0dXMiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJiYXNlVVJMIiwicmVsYXRpdmVVUkwiLCJidWlsZEZ1bGxQYXRoIiwicmVxdWVzdGVkVVJMIiwiREVGQVVMVF9QT1JUUyIsInN0cmluZ0VuZHNXaXRoIiwicyIsImdldFByb3h5Rm9yVXJsIiwicGFyc2VkVXJsIiwicHJvdG8iLCJob3N0bmFtZSIsInBvcnQiLCJzaG91bGRQcm94eSIsInByb3h5IiwiZ2V0RW52IiwiTk9fUFJPWFkiLCJwYXJzZWRQcm94eSIsInBhcnNlZFByb3h5SG9zdG5hbWUiLCJwYXJzZWRQcm94eVBvcnQiLCJnZXRQcm94eUZvclVybF8xIiwiZCIsInkiLCJtcyIsInBhcnNlIiwiZm10TG9uZyIsImZtdFNob3J0IiwibiIsIm1zQWJzIiwicGx1cmFsIiwiaXNQbHVyYWwiLCJzZXR1cCIsImVudiIsImNyZWF0ZURlYnVnIiwiY29lcmNlIiwiZGlzYWJsZSIsImVuYWJsZSIsImVuYWJsZWQiLCJkZXN0cm95Iiwic2VsZWN0Q29sb3IiLCJuYW1lc3BhY2UiLCJoYXNoIiwicHJldlRpbWUiLCJlbmFibGVPdmVycmlkZSIsIm5hbWVzcGFjZXNDYWNoZSIsImVuYWJsZWRDYWNoZSIsImRlYnVnIiwiY3VyciIsImZvcm1hdHRlciIsIm5ld0RlYnVnIiwibmFtZXNwYWNlcyIsInNwbGl0IiwidG9OYW1lc3BhY2UiLCJyZWdleHAiLCJjb21tb24iLCJmb3JtYXRBcmdzIiwic2F2ZSIsInVzZUNvbG9ycyIsImxvY2Fsc3RvcmFnZSIsIndhcm5lZCIsIm1vZHVsZSIsImMiLCJsYXN0QyIsImZvcm1hdHRlcnMiLCJ2IiwiaGFzRmxhZyIsImZsYWciLCJhcmd2IiwicHJlZml4IiwicG9zIiwidGVybWluYXRvclBvcyIsIm9zIiwiZm9yY2VDb2xvciIsInRyYW5zbGF0ZUxldmVsIiwibGV2ZWwiLCJzdXBwb3J0c0NvbG9yIiwibWluIiwib3NSZWxlYXNlIiwic2lnbiIsInZlcnNpb24iLCJnZXRTdXBwb3J0TGV2ZWwiLCJzdXBwb3J0c0NvbG9yXzEiLCJ0dHkiLCJpbml0IiwibG9nIiwiayIsImNvbG9yQ29kZSIsImdldERhdGUiLCJzcmNNb2R1bGUiLCJkZWJ1Z18xIiwiV3JpdGFibGUiLCJhc3NlcnQiLCJsb29rc0xpa2VOb2RlIiwibG9va3NMaWtlQnJvd3NlciIsImxvb2tzTGlrZVY4IiwidXNlTmF0aXZlVVJMIiwicHJlc2VydmVkVXJsRmllbGRzIiwiZXZlbnRzIiwiZXZlbnRIYW5kbGVycyIsIkludmFsaWRVcmxFcnJvciIsImNyZWF0ZUVycm9yVHlwZSIsIlJlZGlyZWN0aW9uRXJyb3IiLCJUb29NYW55UmVkaXJlY3RzRXJyb3IiLCJNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciIsIldyaXRlQWZ0ZXJFbmRFcnJvciIsIlJlZGlyZWN0YWJsZVJlcXVlc3QiLCJyZXNwb25zZUNhbGxiYWNrIiwiY2F1c2UiLCJkZXN0cm95UmVxdWVzdCIsImVuY29kaW5nIiwiY3VycmVudFJlcXVlc3QiLCJtc2VjcyIsImRlc3Ryb3lPblRpbWVvdXQiLCJzb2NrZXQiLCJzdGFydFRpbWVyIiwiY2xlYXJUaW1lciIsInByb3BlcnR5Iiwic2VhcmNoUG9zIiwicHJvdG9jb2wiLCJuYXRpdmVQcm90b2NvbCIsInNjaGVtZSIsImJ1ZmZlcnMiLCJ3cml0ZU5leHQiLCJidWZmZXIiLCJzdGF0dXNDb2RlIiwibG9jYXRpb24iLCJyZXF1ZXN0SGVhZGVycyIsImJlZm9yZVJlZGlyZWN0IiwicmVtb3ZlTWF0Y2hpbmdIZWFkZXJzIiwiY3VycmVudEhvc3RIZWFkZXIiLCJjdXJyZW50VXJsUGFydHMiLCJjdXJyZW50SG9zdCIsImN1cnJlbnRVcmwiLCJyZWRpcmVjdFVybCIsInJlc29sdmVVcmwiLCJzcHJlYWRVcmxPYmplY3QiLCJpc1N1YmRvbWFpbiIsInJlc3BvbnNlRGV0YWlscyIsInJlcXVlc3REZXRhaWxzIiwid3JhcCIsInByb3RvY29scyIsIm5hdGl2ZVByb3RvY29scyIsIndyYXBwZWRQcm90b2NvbCIsImlucHV0IiwiaXNVUkwiLCJ2YWxpZGF0ZVVybCIsImdldCIsIndyYXBwZWRSZXF1ZXN0IiwiYmFzZSIsInVybE9iamVjdCIsInNwcmVhZCIsInJlZ2V4IiwibGFzdFZhbHVlIiwiYmFzZUNsYXNzIiwiQ3VzdG9tRXJyb3IiLCJwcm9wZXJ0aWVzIiwic3ViZG9tYWluIiwiZG9tYWluIiwiZG90IiwiZm9sbG93UmVkaXJlY3RzTW9kdWxlIiwiVkVSU0lPTiIsInBhcnNlUHJvdG9jb2wiLCJEQVRBX1VSTF9QQVRURVJOIiwiZnJvbURhdGFVUkkiLCJ1cmkiLCJhc0Jsb2IiLCJfQmxvYiIsImlzQmFzZTY0IiwiYm9keSIsImtJbnRlcm5hbHMiLCJBeGlvc1RyYW5zZm9ybVN0cmVhbSIsImludGVybmFscyIsImNodW5rIiwibWF4UmF0ZSIsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsInRpbWVXaW5kb3ciLCJkaXZpZGVyIiwiYnl0ZXNUaHJlc2hvbGQiLCJtaW5DaHVua1NpemUiLCJwdXNoQ2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2siLCJieXRlcyIsInRyYW5zZm9ybUNodW5rIiwiY2h1bmtTaXplIiwiY2h1bmtSZW1haW5kZXIiLCJtYXhDaHVua1NpemUiLCJieXRlc0xlZnQiLCJwYXNzZWQiLCJub3ciLCJ0cmFuc2Zvcm1OZXh0Q2h1bmsiLCJhc3luY0l0ZXJhdG9yIiwicmVhZEJsb2IiLCJibG9iIiwiQk9VTkRBUllfQUxQSEFCRVQiLCJ0ZXh0RW5jb2RlciIsIlRleHRFbmNvZGVyIiwiQ1JMRiIsIkNSTEZfQllURVMiLCJDUkxGX0JZVEVTX0NPVU5UIiwiRm9ybURhdGFQYXJ0IiwiZXNjYXBlTmFtZSIsImlzU3RyaW5nVmFsdWUiLCJmb3JtRGF0YVRvU3RyZWFtIiwiZm9ybSIsImhlYWRlcnNIYW5kbGVyIiwidGFnIiwiYm91bmRhcnlCeXRlcyIsImZvb3RlckJ5dGVzIiwiY29udGVudExlbmd0aCIsInBhcnRzIiwicGFydCIsImNvbXB1dGVkSGVhZGVycyIsIlJlYWRhYmxlIiwiWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSIsImNhbGxiYWNraWZ5Iiwic3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJ0aW1lc3RhbXBzIiwiaGVhZCIsInRhaWwiLCJmaXJzdFNhbXBsZVRTIiwiY2h1bmtMZW5ndGgiLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwidGhyb3R0bGUiLCJmcmVxIiwidGltZXN0YW1wIiwidGhyZXNob2xkIiwibGFzdEFyZ3MiLCJ0aW1lciIsImludm9rZSIsInByb2dyZXNzRXZlbnRSZWR1Y2VyIiwibGlzdGVuZXIiLCJpc0Rvd25sb2FkU3RyZWFtIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsImxvYWRlZCIsInRvdGFsIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJpblJhbmdlIiwicHJvZ3Jlc3NFdmVudERlY29yYXRvciIsInRocm90dGxlZCIsImxlbmd0aENvbXB1dGFibGUiLCJhc3luY0RlY29yYXRvciIsInpsaWJPcHRpb25zIiwiemxpYiIsImJyb3RsaU9wdGlvbnMiLCJpc0Jyb3RsaVN1cHBvcnRlZCIsImh0dHBGb2xsb3ciLCJodHRwc0ZvbGxvdyIsImZvbGxvd1JlZGlyZWN0cyIsImlzSHR0cHMiLCJzdXBwb3J0ZWRQcm90b2NvbHMiLCJmbHVzaE9uRmluaXNoIiwiZmx1c2giLCJkaXNwYXRjaEJlZm9yZVJlZGlyZWN0Iiwic2V0UHJveHkiLCJjb25maWdQcm94eSIsInByb3h5VXJsIiwiYmFzZTY0IiwicHJveHlIb3N0IiwicmVkaXJlY3RPcHRpb25zIiwiaXNIdHRwQWRhcHRlclN1cHBvcnRlZCIsIndyYXBBc3luYyIsImFzeW5jRXhlY3V0b3IiLCJvbkRvbmUiLCJpc0RvbmUiLCJkb25lIiwiaXNSZWplY3RlZCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsInJlYXNvbiIsIm9uRG9uZUhhbmRsZXIiLCJyZXNvbHZlRmFtaWx5IiwiYWRkcmVzcyIsImZhbWlseSIsImJ1aWxkQWRkcmVzc0VudHJ5IiwiaHR0cEFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZUVuY29kaW5nIiwicmVxIiwiX2xvb2t1cCIsIm9wdCIsImFyZzAiLCJhZGRyZXNzZXMiLCJhZGRyIiwiZW1pdHRlciIsIkV2ZW50RW1pdHRlciIsIm9uRmluaXNoZWQiLCJmdWxsUGF0aCIsImNvbnZlcnRlZERhdGEiLCJvblVwbG9hZFByb2dyZXNzIiwib25Eb3dubG9hZFByb2dyZXNzIiwibWF4VXBsb2FkUmF0ZSIsIm1heERvd25sb2FkUmF0ZSIsInVzZXJCb3VuZGFyeSIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidXJsVXNlcm5hbWUiLCJ1cmxQYXNzd29yZCIsImN1c3RvbUVyciIsInRyYW5zcG9ydCIsImlzSHR0cHNSZXF1ZXN0IiwicmVzIiwic3RyZWFtcyIsInJlc3BvbnNlTGVuZ3RoIiwidHJhbnNmb3JtU3RyZWFtIiwicmVzcG9uc2VTdHJlYW0iLCJsYXN0UmVxdWVzdCIsIm9mZkxpc3RlbmVycyIsInJlc3BvbnNlQnVmZmVyIiwidG90YWxSZXNwb25zZUJ5dGVzIiwicmVzcG9uc2VEYXRhIiwidGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJlbmRlZCIsImVycm9yZWQiLCJpc1VSTFNhbWVPcmlnaW4iLCJtc2llIiwidXJsUGFyc2luZ05vZGUiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInJlcXVlc3RVUkwiLCJjb29raWVzIiwiZXhwaXJlcyIsInNlY3VyZSIsImNvb2tpZSIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwiY29uZmlnVmFsdWUiLCJyZXNvbHZlQ29uZmlnIiwibmV3Q29uZmlnIiwid2l0aFhTUkZUb2tlbiIsInhzcmZIZWFkZXJOYW1lIiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmVmFsdWUiLCJpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQiLCJ4aHJBZGFwdGVyIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiY2FuY2VsIiwiY29tcG9zZVNpZ25hbHMiLCJzaWduYWxzIiwiY29udHJvbGxlciIsImFib3J0ZWQiLCJvbmFib3J0IiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJzdHJlYW1DaHVuayIsImVuZCIsInJlYWRCeXRlcyIsIml0ZXJhYmxlIiwicmVhZFN0cmVhbSIsInJlYWRlciIsInRyYWNrU3RyZWFtIiwib25Qcm9ncmVzcyIsIm9uRmluaXNoIiwiX29uRmluaXNoIiwibG9hZGVkQnl0ZXMiLCJpc0ZldGNoU3VwcG9ydGVkIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJ0ZXN0Iiwic3VwcG9ydHNSZXF1ZXN0U3RyZWFtIiwiZHVwbGV4QWNjZXNzZWQiLCJoYXNDb250ZW50VHlwZSIsIkRFRkFVTFRfQ0hVTktfU0laRSIsInN1cHBvcnRzUmVzcG9uc2VTdHJlYW0iLCJyZXNvbHZlcnMiLCJnZXRCb2R5TGVuZ3RoIiwicmVzb2x2ZUJvZHlMZW5ndGgiLCJmZXRjaEFkYXB0ZXIiLCJjYW5jZWxUb2tlbiIsIndpdGhDcmVkZW50aWFscyIsImZldGNoT3B0aW9ucyIsImNvbXBvc2VkU2lnbmFsIiwicmVxdWVzdENvbnRlbnRMZW5ndGgiLCJfcmVxdWVzdCIsImNvbnRlbnRUeXBlSGVhZGVyIiwiaXNDcmVkZW50aWFsc1N1cHBvcnRlZCIsImlzU3RyZWFtUmVzcG9uc2UiLCJyZXNwb25zZUNvbnRlbnRMZW5ndGgiLCJrbm93bkFkYXB0ZXJzIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXIiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvcnMiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2YWxpZGF0b3IiLCJmb3JtYXRNZXNzYWdlIiwiZGVzYyIsIm9wdHMiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJwYXJhbXNTZXJpYWxpemVyIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHJvbWlzZSIsImNoYWluIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwib25mdWxmaWxsZWQiLCJpc0F4aW9zRXJyb3IiLCJwYXlsb2FkIiwiSHR0cFN0YXR1c0NvZGUiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImF4aW9zIiwicHJvbWlzZXMiLCJkaXNhbGxvd2VkS2V5cyIsImRpZ2l0cyIsImdldFBhdGhTZWdtZW50cyIsImN1cnJlbnRTZWdtZW50IiwiY3VycmVudFBhcnQiLCJpc0lnbm9yaW5nIiwiY2hhcmFjdGVyIiwiaXNTdHJpbmdJbmRleCIsIm9iamVjdCIsImFzc2VydE5vdFN0cmluZ0luZGV4IiwiZ2V0UHJvcGVydHkiLCJwYXRoQXJyYXkiLCJzZXRQcm9wZXJ0eSIsImRlbGV0ZVByb3BlcnR5IiwiaGFzUHJvcGVydHkiLCJ0bXBkaXIiLCJwcm9jZXNzIiwibWFjb3MiLCJsaWJyYXJ5Iiwid2luZG93cyIsImFwcERhdGEiLCJsb2NhbEFwcERhdGEiLCJsaW51eCIsImVudlBhdGhzIiwic3VmZml4IiwiYXR0ZW1wdGlmeUFzeW5jIiwib25FcnJvciIsImF0dGVtcHRpZnlTeW5jIiwiSVNfVVNFUl9ST09UIiwiTElNSVRfRklMRVNfREVTQ1JJUFRPUlMiLCJOT09QIiwiSGFuZGxlcnMiLCJSZXRyeWZ5UXVldWUiLCJjbGVhbnVwIiwicmVzb2x2ZXIiLCJSZXRyeWZ5UXVldWUkMSIsInJldHJ5aWZ5QXN5bmMiLCJpc1JldHJpYWJsZUVycm9yIiwiYXR0ZW1wdCIsIm9uUmVzb2x2ZSIsIm9uUmVqZWN0IiwiZGVsYXkiLCJyZXRyeWlmeVN5bmMiLCJGUyIsInByb21pc2lmeSIsIkRFRkFVTFRfRU5DT0RJTkciLCJERUZBVUxUX0ZJTEVfTU9ERSIsIkRFRkFVTFRfRk9MREVSX01PREUiLCJERUZBVUxUX1dSSVRFX09QVElPTlMiLCJERUZBVUxUX1VTRVJfVUlEIiwiREVGQVVMVF9VU0VSX0dJRCIsIkRFRkFVTFRfVElNRU9VVF9TWU5DIiwiSVNfUE9TSVgiLCJMSU1JVF9CQVNFTkFNRV9MRU5HVEgiLCJpc0V4Y2VwdGlvbiIsIklTX0xJTlVYIiwiSVNfV0lORE9XUyIsIlNpZ25hbHMiLCJJbnRlcmNlcHRvciIsIkludGVyY2VwdG9yJDEiLCJ3aGVuRXhpdCIsIlRlbXAiLCJyYW5kb21uZXNzIiwiY3JlYXRvciIsInB1cmdlIiwidGVtcFBhdGgiLCJiYXNlbmFtZSIsInRydW5jYWJsZSIsInRydW5jYXRpb25MZW5ndGgiLCJ3cml0ZUZpbGVTeW5jIiwidGVtcERpc3Bvc2VyIiwiZmQiLCJmaWxlUGF0aFJlYWwiLCJmaWxlUGF0aEV4aXN0cyIsInVzZVN0YXRDaG93biIsInVzZVN0YXRNb2RlIiwic3RhdHMiLCJwYXJlbnRQYXRoIiwiX0NvZGVPck5hbWUiLCJOYW1lIiwiX0NvZGUiLCJfYSIsIm5hbWVzIiwic3RycyIsImFkZENvZGVBcmciLCJwbHVzIiwiZXhwciIsInNhZmVTdHJpbmdpZnkiLCJvcHRpbWl6ZSIsImFyZyIsImludGVycG9sYXRlIiwibWVyZ2VFeHBySXRlbXMiLCJzdHJDb25jYXQiLCJjMSIsImMyIiwieCIsInN0cmluZ2lmeSIsImdldEVzbUV4cG9ydE5hbWUiLCJyZWdleHBDb2RlIiwicngiLCJjb2RlXzEiLCJWYWx1ZUVycm9yIiwiVXNlZFZhbHVlU3RhdGUiLCJTY29wZSIsInByZWZpeGVzIiwicGFyZW50IiwibmFtZU9yUHJlZml4IiwibmciLCJfYiIsIlZhbHVlU2NvcGVOYW1lIiwibmFtZVN0ciIsIml0ZW1JbmRleCIsIlZhbHVlU2NvcGUiLCJ2YWx1ZUtleSIsInZzIiwiX25hbWUiLCJrZXlPclJlZiIsInNjb3BlTmFtZSIsInVzZWRWYWx1ZXMiLCJnZXRDb2RlIiwidmFsdWVDb2RlIiwibmFtZVNldCIsImRlZiIsInNjb3BlXzEiLCJjb2RlXzIiLCJzY29wZV8yIiwiTm9kZSIsIl9uYW1lcyIsIl9jb25zdGFudHMiLCJEZWYiLCJ2YXJLaW5kIiwicmhzIiwiZXM1IiwiX24iLCJjb25zdGFudHMiLCJvcHRpbWl6ZUV4cHIiLCJBc3NpZ24iLCJsaHMiLCJzaWRlRWZmZWN0cyIsImFkZEV4cHJOYW1lcyIsIkFzc2lnbk9wIiwib3AiLCJMYWJlbCIsImxhYmVsIiwiQnJlYWsiLCJUaHJvdyIsIkFueUNvZGUiLCJQYXJlbnROb2RlIiwibm9kZXMiLCJzdWJ0cmFjdE5hbWVzIiwiYWRkTmFtZXMiLCJCbG9ja05vZGUiLCJSb290IiwiRWxzZSIsIklmIiwiY29uZGl0aW9uIiwiY29uZCIsIm5zIiwibm90IiwiRm9yIiwiRm9yTG9vcCIsIml0ZXJhdGlvbiIsIkZvclJhbmdlIiwiRm9ySXRlciIsImxvb3AiLCJGdW5jIiwiUmV0dXJuIiwiVHJ5IiwiQ2F0Y2giLCJGaW5hbGx5IiwiQ29kZUdlbiIsImV4dFNjb3BlIiwicHJlZml4T3JOYW1lIiwiY29uc3RhbnQiLCJfY29uc3RhbnQiLCJrZXlWYWx1ZXMiLCJ0aGVuQm9keSIsImVsc2VCb2R5Iiwibm9kZSIsImZvckJvZHkiLCJ0cnlCb2R5IiwiY2F0Y2hDb2RlIiwiZmluYWxseUNvZGUiLCJub2RlQ291bnQiLCJ0b0Nsb3NlIiwiZnVuY0JvZHkiLCJOMSIsIk4yIiwicmVwbGFjZU5hbWUiLCJjYW5PcHRpbWl6ZSIsIml0ZW1zIiwicGFyIiwiYW5kQ29kZSIsIm1hcHBlbmQiLCJhbmQiLCJvckNvZGUiLCJvciIsImNvZGVnZW5fMSIsInRvSGFzaCIsImFsd2F5c1ZhbGlkU2NoZW1hIiwiaXQiLCJjaGVja1Vua25vd25SdWxlcyIsInNjaGVtYUhhc1J1bGVzIiwicnVsZXMiLCJjaGVja1N0cmljdE1vZGUiLCJzY2hlbWFIYXNSdWxlc0J1dFJlZiIsIlJVTEVTIiwic2NoZW1hUmVmT3JWYWwiLCJ0b3BTY2hlbWFSZWYiLCJzY2hlbWFQYXRoIiwia2V5d29yZCIsIiRkYXRhIiwidW5lc2NhcGVGcmFnbWVudCIsInVuZXNjYXBlSnNvblBvaW50ZXIiLCJlc2NhcGVGcmFnbWVudCIsImVzY2FwZUpzb25Qb2ludGVyIiwiZWFjaEl0ZW0iLCJ4cyIsImYiLCJtYWtlTWVyZ2VFdmFsdWF0ZWQiLCJtZXJnZU5hbWVzIiwibWVyZ2VUb05hbWUiLCJtZXJnZVZhbHVlcyIsInJlc3VsdFRvTmFtZSIsImdlbiIsInRvTmFtZSIsInNldEV2YWx1YXRlZCIsImV2YWx1YXRlZFByb3BzVG9OYW1lIiwicHMiLCJwIiwic25pcHBldHMiLCJ1c2VGdW5jIiwiVHlwZSIsImdldEVycm9yUGF0aCIsImRhdGFQcm9wIiwiZGF0YVByb3BUeXBlIiwianNQcm9wZXJ0eVN5bnRheCIsIm1zZyIsIm1vZGUiLCJuYW1lc18xIiwidXRpbF8xIiwic2NoZW1hVHlwZSIsInJlcG9ydEVycm9yIiwiY3h0IiwiZXJyb3JQYXRocyIsIm92ZXJyaWRlQWxsRXJyb3JzIiwiY29tcG9zaXRlUnVsZSIsImFsbEVycm9ycyIsImVyck9iaiIsImVycm9yT2JqZWN0Q29kZSIsImFkZEVycm9yIiwicmV0dXJuRXJyb3JzIiwicmVwb3J0RXh0cmFFcnJvciIsInJlc2V0RXJyb3JzQ291bnQiLCJlcnJzQ291bnQiLCJleHRlbmRFcnJvcnMiLCJzY2hlbWFWYWx1ZSIsImVycnMiLCJ2YWxpZGF0ZU5hbWUiLCJzY2hlbWFFbnYiLCJFIiwiY3JlYXRlRXJyb3JzIiwiZXJyb3JPYmplY3QiLCJlcnJvckluc3RhbmNlUGF0aCIsImVycm9yU2NoZW1hUGF0aCIsImV4dHJhRXJyb3JQcm9wcyIsImVycm9yUGF0aCIsImluc3RhbmNlUGF0aCIsImluc3RQYXRoIiwiZXJyU2NoZW1hUGF0aCIsInBhcmVudFNjaGVtYSIsInNjaFBhdGgiLCJwcm9wZXJ0eU5hbWUiLCJib29sU2NoZW1hIiwiZXJyb3JzXzEiLCJib29sRXJyb3IiLCJ0b3BCb29sT3JFbXB0eVNjaGVtYSIsImZhbHNlU2NoZW1hRXJyb3IiLCJib29sT3JFbXB0eVNjaGVtYSIsInZhbGlkIiwiX2pzb25UeXBlcyIsImpzb25UeXBlcyIsImlzSlNPTlR5cGUiLCJnZXRSdWxlcyIsImdyb3VwcyIsImFwcGxpY2FiaWxpdHkiLCJzY2hlbWFIYXNSdWxlc0ZvclR5cGUiLCJncm91cCIsInNob3VsZFVzZUdyb3VwIiwicnVsZSIsInNob3VsZFVzZVJ1bGUiLCJrd2QiLCJkYXRhVHlwZSIsInJ1bGVzXzEiLCJhcHBsaWNhYmlsaXR5XzEiLCJEYXRhVHlwZSIsImdldFNjaGVtYVR5cGVzIiwiZ2V0SlNPTlR5cGVzIiwidHMiLCJjb2VyY2VBbmRDaGVja0RhdGFUeXBlIiwiY29lcmNlVG8iLCJjb2VyY2VUb1R5cGVzIiwiY2hlY2tUeXBlcyIsIndyb25nVHlwZSIsImNoZWNrRGF0YVR5cGVzIiwiY29lcmNlRGF0YSIsInJlcG9ydFR5cGVFcnJvciIsIkNPRVJDSUJMRSIsImNvZXJjZVR5cGVzIiwidCIsImNvZXJjZWQiLCJjb2VyY2VTcGVjaWZpY1R5cGUiLCJhc3NpZ25QYXJlbnREYXRhIiwicGFyZW50RGF0YSIsInBhcmVudERhdGFQcm9wZXJ0eSIsImNoZWNrRGF0YVR5cGUiLCJzdHJpY3ROdW1zIiwiY29ycmVjdCIsIkVRIiwibnVtQ29uZCIsIl9jb25kIiwiZGF0YVR5cGVzIiwibm90T2JqIiwidHlwZUVycm9yIiwiZ2V0VHlwZUVycm9yQ29udGV4dCIsInNjaGVtYUNvZGUiLCJhc3NpZ25EZWZhdWx0cyIsInR5IiwiYXNzaWduRGVmYXVsdCIsInNjaCIsImNoaWxkRGF0YSIsInV0aWxfMiIsImNoZWNrUmVwb3J0TWlzc2luZ1Byb3AiLCJub1Byb3BlcnR5SW5EYXRhIiwiY2hlY2tNaXNzaW5nUHJvcCIsIm1pc3NpbmciLCJyZXBvcnRNaXNzaW5nUHJvcCIsImhhc1Byb3BGdW5jIiwiaXNPd25Qcm9wZXJ0eSIsInByb3BlcnR5SW5EYXRhIiwib3duUHJvcGVydGllcyIsImFsbFNjaGVtYVByb3BlcnRpZXMiLCJzY2hlbWFNYXAiLCJzY2hlbWFQcm9wZXJ0aWVzIiwiY2FsbFZhbGlkYXRlQ29kZSIsImZ1bmMiLCJwYXNzU2NoZW1hIiwiZGF0YUFuZFNjaGVtYSIsInZhbEN4dCIsIm5ld1JlZ0V4cCIsInVzZVBhdHRlcm4iLCJwYXR0ZXJuIiwidSIsInZhbGlkYXRlQXJyYXkiLCJ2YWxpZEFyciIsInZhbGlkYXRlSXRlbXMiLCJub3RWYWxpZCIsInZhbGlkYXRlVW5pb24iLCJzY2hWYWxpZCIsIl9zY2giLCJzY2hDeHQiLCJtYWNyb0tleXdvcmRDb2RlIiwibWFjcm9TY2hlbWEiLCJzY2hlbWFSZWYiLCJ1c2VLZXl3b3JkIiwiZnVuY0tleXdvcmRDb2RlIiwiY2hlY2tBc3luY0tleXdvcmQiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlUmVmIiwidmFsaWRhdGVLZXl3b3JkIiwiYXNzaWduVmFsaWQiLCJtb2RpZnlEYXRhIiwicmVwb3J0RXJycyIsInJ1bGVFcnJzIiwidmFsaWRhdGVBc3luYyIsInZhbGlkYXRlU3luYyIsImFkZEVycnMiLCJ2YWxpZGF0ZUVycnMiLCJfYXdhaXQiLCJwYXNzQ3h0IiwiZXJyb3JzIiwidmFsaWRTY2hlbWFUeXBlIiwiYWxsb3dVbmRlZmluZWQiLCJzdCIsInZhbGlkYXRlS2V5d29yZFVzYWdlIiwiZGVwcyIsInN1YnNjaGVtYSIsImdldFN1YnNjaGVtYSIsInNjaGVtYVByb3AiLCJleHRlbmRTdWJzY2hlbWFEYXRhIiwiZHBUeXBlIiwiZGF0YVBhdGhBcnIiLCJuZXh0RGF0YSIsImRhdGFDb250ZXh0UHJvcHMiLCJfbmV4dERhdGEiLCJleHRlbmRTdWJzY2hlbWFNb2RlIiwianRkRGlzY3JpbWluYXRvciIsImp0ZE1ldGFkYXRhIiwiZmFzdERlZXBFcXVhbCIsImVxdWFsIiwidHJhdmVyc2UiLCJqc29uU2NoZW1hVHJhdmVyc2VNb2R1bGUiLCJwcmUiLCJwb3N0IiwiX3RyYXZlcnNlIiwianNvblB0ciIsInJvb3RTY2hlbWEiLCJwYXJlbnRKc29uUHRyIiwicGFyZW50S2V5d29yZCIsImtleUluZGV4IiwiZXNjYXBlSnNvblB0ciIsIlNJTVBMRV9JTkxJTkVEIiwiaW5saW5lUmVmIiwibGltaXQiLCJoYXNSZWYiLCJjb3VudEtleXMiLCJSRUZfS0VZV09SRFMiLCJjb3VudCIsImdldEZ1bGxQYXRoIiwibm9ybWFsaXplIiwibm9ybWFsaXplSWQiLCJfZ2V0RnVsbFBhdGgiLCJUUkFJTElOR19TTEFTSF9IQVNIIiwiYmFzZUlkIiwiQU5DSE9SIiwiZ2V0U2NoZW1hUmVmcyIsInNjaGVtYUlkIiwidXJpUmVzb2x2ZXIiLCJzY2hJZCIsImJhc2VJZHMiLCJwYXRoUHJlZml4IiwibG9jYWxSZWZzIiwic2NoZW1hUmVmcyIsImlubmVyQmFzZUlkIiwiYWRkUmVmIiwiYWRkQW5jaG9yIiwicmVmIiwiYW1iaWd1b3MiLCJzY2hPclJlZiIsImNoZWNrQW1iaWd1b3NSZWYiLCJhbmNob3IiLCJzY2gxIiwic2NoMiIsImJvb2xTY2hlbWFfMSIsImRhdGFUeXBlXzEiLCJkYXRhVHlwZV8yIiwiZGVmYXVsdHNfMSIsImtleXdvcmRfMSIsInN1YnNjaGVtYV8xIiwicmVzb2x2ZV8xIiwidmFsaWRhdGVGdW5jdGlvbkNvZGUiLCJpc1NjaGVtYU9iaiIsImNoZWNrS2V5d29yZHMiLCJzY2hlbWFDeHRIYXNSdWxlcyIsInRvcFNjaGVtYU9iakNvZGUiLCJ2YWxpZGF0ZUZ1bmN0aW9uIiwiZnVuY1NvdXJjZVVybCIsImRlc3RydWN0dXJlVmFsQ3h0RVM1IiwiZGVzdHJ1Y3R1cmVWYWxDeHQiLCJjb21tZW50S2V5d29yZCIsImNoZWNrTm9EZWZhdWx0IiwicmVzZXRFdmFsdWF0ZWQiLCJ0eXBlQW5kS2V5d29yZHMiLCJyZXR1cm5SZXN1bHRzIiwic3Vic2NoZW1hQ29kZSIsInN1YlNjaGVtYU9iakNvZGUiLCJ1cGRhdGVDb250ZXh0IiwiY2hlY2tBc3luY1NjaGVtYSIsImNoZWNrUmVmc0FuZEtleXdvcmRzIiwic2NoZW1hS2V5d29yZHMiLCJjaGVja2VkVHlwZXMiLCJyb290TmFtZSIsIlZhbGlkYXRpb25FcnJvciIsImFzc2lnbkV2YWx1YXRlZCIsImV2YWx1YXRlZCIsInR5cGVFcnJvcnMiLCJrZXl3b3JkQ29kZSIsImNoZWNrU3RyaWN0VHlwZXMiLCJncm91cEtleXdvcmRzIiwiaXRlcmF0ZUtleXdvcmRzIiwidXNlRGVmYXVsdHMiLCJjaGVja0NvbnRleHRUeXBlcyIsImNoZWNrTXVsdGlwbGVUeXBlcyIsImNoZWNrS2V5d29yZFR5cGVzIiwiaW5jbHVkZXNUeXBlIiwic3RyaWN0VHlwZXNFcnJvciIsIm5hcnJvd1NjaGVtYVR5cGVzIiwiaGFzQXBwbGljYWJsZVR5cGUiLCJzY2hUcyIsImt3ZFQiLCJ3aXRoVHlwZXMiLCJLZXl3b3JkQ3h0IiwiZ2V0RGF0YSIsInN1Y2Nlc3NBY3Rpb24iLCJmYWlsQWN0aW9uIiwiZXJyb3JQYXJhbXMiLCJhc3NpZ24iLCJjb2RlQmxvY2siLCIkZGF0YVZhbGlkIiwid3JvbmckRGF0YVR5cGUiLCJpbnZhbGlkJERhdGFTY2hlbWEiLCJ2YWxpZGF0ZVNjaGVtYVJlZiIsImFwcGwiLCJuZXh0Q29udGV4dCIsInNjaGVtYUN4dCIsInJ1bGVUeXBlIiwiSlNPTl9QT0lOVEVSIiwiUkVMQVRJVkVfSlNPTl9QT0lOVEVSIiwiZGF0YUxldmVsIiwiZGF0YU5hbWVzIiwianNvblBvaW50ZXIiLCJ1cCIsImVycm9yTXNnIiwic2VnbWVudHMiLCJzZWdtZW50IiwicG9pbnRlclR5cGUiLCJ2YWxpZGF0aW9uX2Vycm9yIiwicmVmX2Vycm9yIiwiTWlzc2luZ1JlZkVycm9yIiwiY29tcGlsZSIsInZhbGlkYXRpb25fZXJyb3JfMSIsInZhbGlkYXRlXzEiLCJTY2hlbWFFbnYiLCJjb21waWxlU2NoZW1hIiwiZ2V0Q29tcGlsaW5nU2NoZW1hIiwicm9vdElkIiwibGluZXMiLCJfVmFsaWRhdGlvbkVycm9yIiwic291cmNlQ29kZSIsInZhbGlkYXRlQ29kZSIsInJlc29sdmVSZWYiLCJzY2hPckZ1bmMiLCJpbmxpbmVPckNvbXBpbGUiLCJzY2hFbnYiLCJzYW1lU2NoZW1hRW52IiwiczEiLCJzMiIsInJlc29sdmVTY2hlbWEiLCJyZWZQYXRoIiwiZ2V0SnNvblBvaW50ZXIiLCJQUkVWRU5UX1NDT1BFX0NIQU5HRSIsInBhcnNlZFJlZiIsInBhcnRTY2hlbWEiLCIkcmVmIiwiSEVYIiwic2NvcGVkQ2hhcnMiLCJub3JtYWxpemVJUHY0IiwiaG9zdCIsImZpbmRUb2tlbiIsInN0cmlwTGVhZGluZ1plcm9zIiwic3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkIiwia2VlcFplcm8iLCJhY2MiLCJzdHJpcCIsImdldElQVjYiLCJ0b2tlbkNvdW50IiwiaXNab25lIiwiZW5kaXB2NkVuY291bnRlcmVkIiwiZW5kSXB2NiIsImNvbnN1bWUiLCJoZXgiLCJjdXJzb3IiLCJub3JtYWxpemVJUHY2IiwiaXB2NiIsIm5ld0hvc3QiLCJlc2NhcGVkSG9zdCIsIm91dCIsInNraXAiLCJpbmQiLCJSRFMxIiwiUkRTMiIsIlJEUzMiLCJSRFM1IiwicmVtb3ZlRG90U2VnbWVudHMiLCJpbSIsIm5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nIiwiY29tcG9uZW50cyIsImVzYyIsInJlY29tcG9zZUF1dGhvcml0eSIsInVyaVRva2VucyIsImlwVjRyZXMiLCJpcFY2cmVzIiwiVVVJRF9SRUciLCJVUk5fUkVHIiwiaXNTZWN1cmUiLCJ3c0NvbXBvbmVudHMiLCJodHRwUGFyc2UiLCJodHRwU2VyaWFsaXplIiwid3NQYXJzZSIsIndzU2VyaWFsaXplIiwicXVlcnkiLCJ1cm5QYXJzZSIsInVybkNvbXBvbmVudHMiLCJ1cm5TY2hlbWUiLCJzY2hlbWVIYW5kbGVyIiwiU0NIRU1FUyIsInVyblNlcmlhbGl6ZSIsIm5pZCIsInVyaUNvbXBvbmVudHMiLCJuc3MiLCJ1cm51dWlkUGFyc2UiLCJ1dWlkQ29tcG9uZW50cyIsInVybnV1aWRTZXJpYWxpemUiLCJ3cyIsIndzcyIsInVybiIsInVybnV1aWQiLCJzY2hlbWVzIiwic2VyaWFsaXplIiwiYmFzZVVSSSIsInJlbGF0aXZlVVJJIiwic2NoZW1lbGVzc09wdGlvbnMiLCJyZXNvbHZlZCIsInJlc29sdmVDb21wb25lbnRzIiwic2tpcE5vcm1hbGl6YXRpb24iLCJ1cmlBIiwidXJpQiIsImNtcHRzIiwiYXV0aG9yaXR5IiwiaGV4TG9va1VwIiwibm9uU2ltcGxlRG9tYWluIiwiVVJJX1BBUlNFIiwiZ290RW5jb2RpbmciLCJpc0lQIiwiaXB2NHJlc3VsdCIsImlwdjZyZXN1bHQiLCJmYXN0VXJpIiwiZmFzdFVyaU1vZHVsZSIsInVyaV8xIiwicmVmX2Vycm9yXzEiLCJjb21waWxlXzEiLCJjb2RlZ2VuXzIiLCIkZGF0YVJlZlNjaGVtYSIsImRlZmF1bHRSZWdFeHAiLCJmbGFncyIsIk1FVEFfSUdOT1JFX09QVElPTlMiLCJFWFRfU0NPUEVfTkFNRVMiLCJyZW1vdmVkT3B0aW9ucyIsImRlcHJlY2F0ZWRPcHRpb25zIiwiTUFYX0VYUFJFU1NJT04iLCJyZXF1aXJlZE9wdGlvbnMiLCJvIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfayIsIl9sIiwiX20iLCJfbyIsIl9wIiwiX3EiLCJfciIsIl9zIiwiX3QiLCJfdSIsIl92IiwiX3ciLCJfeCIsIl95IiwiX3oiLCJfMCIsIl9vcHR6IiwiQWp2IiwiZ2V0TG9nZ2VyIiwiZm9ybWF0T3B0IiwiY2hlY2tPcHRpb25zIiwiZ2V0TWV0YVNjaGVtYU9wdGlvbnMiLCJhZGRJbml0aWFsRm9ybWF0cyIsImFkZEluaXRpYWxLZXl3b3JkcyIsImFkZEluaXRpYWxTY2hlbWFzIiwibWV0YSIsIl9kYXRhUmVmU2NoZW1hIiwic2NoZW1hS2V5UmVmIiwiX21ldGEiLCJsb2FkU2NoZW1hIiwicnVuQ29tcGlsZUFzeW5jIiwiX3NjaGVtYSIsImxvYWRNZXRhU2NoZW1hIiwiX2NvbXBpbGVBc3luYyIsImNoZWNrTG9hZGVkIiwibG9hZE1pc3NpbmdTY2hlbWEiLCJtaXNzaW5nUmVmIiwiX2xvYWRTY2hlbWEiLCJfdmFsaWRhdGVTY2hlbWEiLCJ0aHJvd09yTG9nRXJyb3IiLCIkc2NoZW1hIiwia2V5UmVmIiwiZ2V0U2NoRW52IiwiY2FjaGVLZXkiLCJkZWZpbml0aW9ucyIsImt3ZE9yRGVmIiwiY2hlY2tLZXl3b3JkIiwiYWRkUnVsZSIsImtleXdvcmRNZXRhc2NoZW1hIiwiZGVmaW5pdGlvbiIsInNlcGFyYXRvciIsImRhdGFWYXIiLCJ0ZXh0IiwibWV0YVNjaGVtYSIsImtleXdvcmRzSnNvblBvaW50ZXJzIiwia2V5d29yZHMiLCJzZWciLCJzY2hlbWFPckRhdGEiLCJzY2hlbWFzIiwidmFsaWRhdGVTY2hlbWEiLCJhZGRTY2hlbWEiLCJjdXJyZW50T3B0cyIsImNoZWNrT3B0cyIsIm9wdHNTY2hlbWFzIiwiZGVmcyIsIm1ldGFPcHRzIiwibm9Mb2dzIiwibG9nZ2VyIiwiS0VZV09SRF9OQU1FIiwicnVsZUdyb3VwIiwiYWRkQmVmb3JlUnVsZSIsImJlZm9yZSIsIl9ydWxlIiwiJGRhdGFSZWYiLCJjYWxsUm9vdFJlZiIsInNjaE9yRW52IiwiY2FsbFZhbGlkYXRlIiwiaW5saW5lUmVmU2NoZW1hIiwiY2FsbFJlZiIsImdldFZhbGlkYXRlIiwic2NoTmFtZSIsIiRhc3luYyIsImNhbGxBc3luY1JlZiIsImNhbGxTeW5jUmVmIiwiYWRkRXZhbHVhdGVkRnJvbSIsImFkZEVycm9yc0Zyb20iLCJzY2hFdmFsdWF0ZWQiLCJjb3JlXzEiLCJpZF8xIiwicmVmXzEiLCJjb3JlIiwibGltaXROdW1iZXIiLCJvcHMiLCJLV0RzIiwibXVsdGlwbGVPZiIsInByZWMiLCJpbnZhbGlkIiwidWNzMmxlbmd0aF8xIiwidWNzMmxlbmd0aCIsImxpbWl0TGVuZ3RoIiwiY29tcCIsImxpbWl0UHJvcGVydGllcyIsInJlcXVpcmVkIiwibWlzc2luZ1Byb3BlcnR5IiwidXNlTG9vcCIsImFsbEVycm9yc01vZGUiLCJleGl0T25FcnJvck1vZGUiLCJkZWZpbmVkUHJvcGVydGllcyIsInJlcXVpcmVkS2V5IiwibG9vcEFsbFJlcXVpcmVkIiwibG9vcFVudGlsTWlzc2luZyIsImxpbWl0SXRlbXMiLCJlcXVhbF8xIiwidW5pcXVlSXRlbXMiLCJqIiwiaXRlbVR5cGVzIiwidmFsaWRhdGVVbmlxdWVJdGVtcyIsImxvb3BOIiwibG9vcE4yIiwiaW5kaWNlcyIsImVxbCIsIm91dGVyIiwiX2NvbnN0IiwiX2VudW0iLCJnZXRFcWwiLCJsb29wRW51bSIsInZTY2hlbWEiLCJlcXVhbENvZGUiLCJ2YWxpZGF0aW9uXzEiLCJsaW1pdE51bWJlcl8xIiwibXVsdGlwbGVPZl8xIiwibGltaXRMZW5ndGhfMSIsInBhdHRlcm5fMSIsImxpbWl0UHJvcGVydGllc18xIiwicmVxdWlyZWRfMSIsImxpbWl0SXRlbXNfMSIsInVuaXF1ZUl0ZW1zXzEiLCJjb25zdF8xIiwiZW51bV8xIiwidmFsaWRhdGlvbiIsImFkZGl0aW9uYWxJdGVtcyIsInZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zIiwidmFsaWRhdGVUdXBsZSIsImV4dHJhSXRlbXMiLCJzY2hBcnIiLCJjaGVja1N0cmljdFR1cGxlIiwiZnVsbFR1cGxlIiwicHJlZml4SXRlbXMiLCJpdGVtc18xIiwiaXRlbXMyMDIwIiwiYWRkaXRpb25hbEl0ZW1zXzEiLCJjb250YWlucyIsIm1heCIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiLCJ2YWxpZGF0ZUl0ZW1zV2l0aENvdW50IiwiY2hlY2tMaW1pdHMiLCJfdmFsaWQiLCJibG9jayIsImRlcHNDb3VudCIsInByb3BlcnR5X2llcyIsInByb3BEZXBzIiwic2NoRGVwcyIsInNwbGl0RGVwZW5kZW5jaWVzIiwidmFsaWRhdGVQcm9wZXJ0eURlcHMiLCJ2YWxpZGF0ZVNjaGVtYURlcHMiLCJwcm9wZXJ0eURlcHMiLCJzY2hlbWFEZXBzIiwiZGVwUHJvcCIsInByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdFByb3BzIiwiY2hlY2tBZGRpdGlvbmFsUHJvcGVydGllcyIsImFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUiLCJpc0FkZGl0aW9uYWwiLCJkZWZpbmVkUHJvcCIsInByb3BzU2NoZW1hIiwiZGVsZXRlQWRkaXRpb25hbCIsImFwcGx5QWRkaXRpb25hbFNjaGVtYSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEiLCJhbGxQcm9wcyIsImhhc0RlZmF1bHQiLCJhcHBseVByb3BlcnR5U2NoZW1hIiwicGF0dGVyblByb3BlcnRpZXMiLCJwYXR0ZXJucyIsImFsd2F5c1ZhbGlkUGF0dGVybnMiLCJjaGVja1Byb3BlcnRpZXMiLCJ2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzIiwicGF0IiwiY2hlY2tNYXRjaGluZ1Byb3BlcnRpZXMiLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJhbHdheXNWYWxpZCIsImFueU9mIiwib25lT2YiLCJwYXNzaW5nIiwidmFsaWRhdGVPbmVPZiIsImFsbE9mIiwiX2lmIiwiaGFzVGhlbiIsImhhc1NjaGVtYSIsImhhc0Vsc2UiLCJ2YWxpZGF0ZUlmIiwiaWZDbGF1c2UiLCJ2YWxpZGF0ZUNsYXVzZSIsInRoZW5FbHNlIiwiYXBwbGljYXRvciIsInByZWZpeEl0ZW1zXzEiLCJpdGVtczIwMjBfMSIsImNvbnRhaW5zXzEiLCJkZXBlbmRlbmNpZXNfMSIsInByb3BlcnR5TmFtZXNfMSIsInByb3BlcnRpZXNfMSIsInBhdHRlcm5Qcm9wZXJ0aWVzXzEiLCJub3RfMSIsImFueU9mXzEiLCJyZXF1aXJlJCQxMSIsIm9uZU9mXzEiLCJyZXF1aXJlJCQxMiIsImFsbE9mXzEiLCJyZXF1aXJlJCQxMyIsImlmXzEiLCJyZXF1aXJlJCQxNCIsInRoZW5FbHNlXzEiLCJyZXF1aXJlJCQxNSIsImdldEFwcGxpY2F0b3IiLCJkcmFmdDIwMjAiLCJkeW5hbWljQW5jaG9yXzEiLCJkeW5hbWljQW5jaG9yIiwiX2dldFZhbGlkYXRlIiwiZHluYW1pY1JlZl8xIiwiZHluYW1pY1JlZiIsIl9keW5hbWljUmVmIiwiX2NhbGxSZWYiLCJyZWN1cnNpdmVBbmNob3IiLCJyZWN1cnNpdmVSZWYiLCJkeW5hbWljXzEiLCJyZWN1cnNpdmVBbmNob3JfMSIsInJlY3Vyc2l2ZVJlZl8xIiwiZHluYW1pYyIsImRlcGVuZGVudFJlcXVpcmVkIiwiZGVwZW5kZW50U2NoZW1hcyIsImxpbWl0Q29udGFpbnMiLCJuZXh0XzEiLCJkZXBlbmRlbnRSZXF1aXJlZF8xIiwiZGVwZW5kZW50U2NoZW1hc18xIiwibGltaXRDb250YWluc18xIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwidW5ldmFsdWF0ZWREeW5hbWljIiwidW5ldmFsdWF0ZWRQcm9wQ29kZSIsInVuZXZhbHVhdGVkU3RhdGljIiwiZXZhbHVhdGVkUHJvcHMiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRfMSIsInVuZXZhbHVhdGVkUHJvcGVydGllc18xIiwidW5ldmFsdWF0ZWRJdGVtc18xIiwidW5ldmFsdWF0ZWQiLCJ2YWxpZGF0ZSREYXRhRm9ybWF0IiwidmFsaWRhdGVGb3JtYXQiLCJmbXRzIiwiZkRlZiIsImZUeXBlIiwidW5rbm93bkZtdCIsImludmFsaWRGbXQiLCJjYWxsRm9ybWF0IiwidmFsaWREYXRhIiwiZm9ybWF0RGVmIiwidW5rbm93bkZvcm1hdCIsImZtdFR5cGUiLCJmbXRSZWYiLCJnZXRGb3JtYXQiLCJ2YWxpZENvbmRpdGlvbiIsInVua25vd25Nc2ciLCJmbXREZWYiLCJmbXQiLCJmb3JtYXRfMiIsImZvcm1hdF8xIiwibWV0YWRhdGEiLCJhcHBsaWNhdG9yXzEiLCJtZXRhZGF0YV8xIiwiZHJhZnQyMDIwVm9jYWJ1bGFyaWVzIiwiRGlzY3JFcnJvciIsImRpc2NyaW1pbmF0b3IiLCJ0eXBlc18xIiwiZGlzY3JFcnJvciIsInRhZ05hbWUiLCJ2YWxpZGF0ZU1hcHBpbmciLCJtYXBwaW5nIiwiZ2V0TWFwcGluZyIsInRhZ1ZhbHVlIiwiYXBwbHlUYWdTY2hlbWEiLCJvbmVPZk1hcHBpbmciLCJ0b3BSZXF1aXJlZCIsImhhc1JlcXVpcmVkIiwidGFnUmVxdWlyZWQiLCJwcm9wU2NoIiwiYWRkTWFwcGluZ3MiLCJhZGRNYXBwaW5nIiwianNvblNjaGVtYTIwMjAxMiIsIk1FVEFfU1VQUE9SVF9EQVRBIiwiYWRkTWV0YVNjaGVtYTIwMjAiLCJ3aXRoJGRhdGEiLCJhanYiLCJkcmFmdDIwMjBfMSIsImRpc2NyaW1pbmF0b3JfMSIsImpzb25fc2NoZW1hXzIwMjBfMTJfMSIsIk1FVEFfU0NIRU1BX0lEIiwiQWp2MjAyMCIsImNvbXBhcmUiLCJkYXRlIiwiY29tcGFyZURhdGUiLCJnZXRUaW1lIiwiY29tcGFyZVRpbWUiLCJnZXREYXRlVGltZSIsImNvbXBhcmVEYXRlVGltZSIsImNvbXBhcmVJc29UaW1lIiwiY29tcGFyZUlzb0RhdGVUaW1lIiwiYnl0ZSIsInZhbGlkYXRlSW50MzIiLCJ2YWxpZGF0ZUludDY0IiwidmFsaWRhdGVOdW1iZXIiLCJpc0xlYXBZZWFyIiwieWVhciIsIkRBVEUiLCJEQVlTIiwibW9udGgiLCJkYXkiLCJkMSIsImQyIiwiVElNRSIsInN0cmljdFRpbWVab25lIiwiaHIiLCJzZWMiLCJ0eiIsInR6U2lnbiIsInR6SCIsInR6TSIsInV0Y01pbiIsInV0Y0hyIiwidDEiLCJ0MiIsImExIiwiYTIiLCJEQVRFX1RJTUVfU0VQQVJBVE9SIiwidGltZSIsImRhdGVUaW1lIiwiZHQxIiwiZHQyIiwiTk9UX1VSSV9GUkFHTUVOVCIsIlVSSSIsIkJZVEUiLCJNSU5fSU5UMzIiLCJNQVhfSU5UMzIiLCJaX0FOQ0hPUiIsImRyYWZ0NyIsImRyYWZ0N1ZvY2FidWxhcmllcyIsImRyYWZ0N18xIiwiZHJhZnQ3TWV0YVNjaGVtYSIsImFqdl8xIiwiZkN4dCIsImNvbXBhcmVDb2RlIiwiZm9ybWF0TGltaXRQbHVnaW4iLCJmb3JtYXRzXzEiLCJsaW1pdF8xIiwiZnVsbE5hbWUiLCJmYXN0TmFtZSIsImZvcm1hdHNQbHVnaW4iLCJhZGRGb3JtYXRzIiwiZm9ybWF0cyIsImV4cG9ydE5hbWUiLCJjb3B5UHJvcGVydHkiLCJpZ25vcmVOb25Db25maWd1cmFibGUiLCJ0b0Rlc2NyaXB0b3IiLCJmcm9tRGVzY3JpcHRvciIsImNhbkNvcHlQcm9wZXJ0eSIsImNoYW5nZVByb3RvdHlwZSIsImZyb21Qcm90b3R5cGUiLCJ3cmFwcGVkVG9TdHJpbmciLCJ3aXRoTmFtZSIsImZyb21Cb2R5IiwidG9TdHJpbmdEZXNjcmlwdG9yIiwidG9TdHJpbmdOYW1lIiwiY2hhbmdlVG9TdHJpbmciLCJuZXdUb1N0cmluZyIsIndyaXRhYmxlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIm1pbWljRnVuY3Rpb24iLCJkZWJvdW5jZUZ1bmN0aW9uIiwiaW5wdXRGdW5jdGlvbiIsIndhaXQiLCJtYXhXYWl0IiwiYWZ0ZXIiLCJtYXhUaW1lb3V0IiwiZGVib3VuY2VkRnVuY3Rpb24iLCJhcmd1bWVudHNfIiwibGF0ZXIiLCJtYXhMYXRlciIsInNob3VsZENhbGxOb3ciLCJTRU1WRVJfU1BFQ19WRVJTSU9OIiwiTUFYX0xFTkdUSCIsIk1BWF9TQUZFX0lOVEVHRVIiLCJNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIIiwiTUFYX1NBRkVfQlVJTERfTEVOR1RIIiwiUkVMRUFTRV9UWVBFUyIsInJlIiwic2FmZVJlIiwiUiIsIkxFVFRFUkRBU0hOVU1CRVIiLCJzYWZlUmVnZXhSZXBsYWNlbWVudHMiLCJtYWtlU2FmZVJlZ2V4IiwiY3JlYXRlVG9rZW4iLCJpc0dsb2JhbCIsInNhZmUiLCJsb29zZU9wdGlvbiIsImVtcHR5T3B0cyIsInBhcnNlT3B0aW9ucyIsInBhcnNlT3B0aW9uc18xIiwibnVtZXJpYyIsImNvbXBhcmVJZGVudGlmaWVycyIsImFudW0iLCJibnVtIiwicmNvbXBhcmVJZGVudGlmaWVycyIsImlkZW50aWZpZXJzIiwiU2VtVmVyJGQiLCJTZW1WZXIiLCJudW0iLCJvdGhlciIsInJlbGVhc2UiLCJpZGVudGlmaWVyIiwiaWRlbnRpZmllckJhc2UiLCJwcmVyZWxlYXNlIiwic2VtdmVyIiwidGhyb3dFcnJvcnMiLCJlciIsInBhcnNlXzEiLCJ2YWxpZF8xIiwiY2xlYW5fMSIsImluYyIsImluY18xIiwiZGlmZiIsInZlcnNpb24xIiwidmVyc2lvbjIiLCJ2MSIsInYyIiwiY29tcGFyaXNvbiIsInYxSGlnaGVyIiwiaGlnaFZlcnNpb24iLCJsb3dWZXJzaW9uIiwiaGlnaEhhc1ByZSIsImRpZmZfMSIsIm1ham9yIiwibG9vc2UiLCJtYWpvcl8xIiwibWlub3IiLCJtaW5vcl8xIiwicGF0Y2giLCJwYXRjaF8xIiwicHJlcmVsZWFzZV8xIiwiY29tcGFyZV8xIiwicmNvbXBhcmUiLCJyY29tcGFyZV8xIiwiY29tcGFyZUxvb3NlIiwiY29tcGFyZUxvb3NlXzEiLCJjb21wYXJlQnVpbGQiLCJ2ZXJzaW9uQSIsInZlcnNpb25CIiwiY29tcGFyZUJ1aWxkXzEiLCJzb3J0Iiwic29ydF8xIiwicnNvcnQiLCJyc29ydF8xIiwiZ3QiLCJndF8xIiwibHQiLCJsdF8xIiwiZXEiLCJlcV8xIiwibmVxIiwibmVxXzEiLCJndGUiLCJndGVfMSIsImx0ZSIsImx0ZV8xIiwiY21wIiwiY21wXzEiLCJjb2VyY2VSdGxSZWdleCIsImNvZXJjZV8xIiwiTFJVQ2FjaGUiLCJmaXJzdEtleSIsImxydWNhY2hlIiwiU1BBQ0VfQ0hBUkFDVEVSUyIsIlJhbmdlIiwicmFuZ2UiLCJDb21wYXJhdG9yIiwiaXNOdWxsU2V0IiwiaXNBbnkiLCJjb21wcyIsIm1lbW9LZXkiLCJGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRSIsIkZMQUdfTE9PU0UiLCJjYWNoZWQiLCJoeXBoZW5SZXBsYWNlIiwiY29tcGFyYXRvclRyaW1SZXBsYWNlIiwidGlsZGVUcmltUmVwbGFjZSIsImNhcmV0VHJpbVJlcGxhY2UiLCJyYW5nZUxpc3QiLCJwYXJzZUNvbXBhcmF0b3IiLCJyZXBsYWNlR1RFMCIsInJhbmdlTWFwIiwiY29tcGFyYXRvcnMiLCJ0aGlzQ29tcGFyYXRvcnMiLCJpc1NhdGlzZmlhYmxlIiwicmFuZ2VDb21wYXJhdG9ycyIsInRoaXNDb21wYXJhdG9yIiwicmFuZ2VDb21wYXJhdG9yIiwidGVzdFNldCIsIkxSVSIsInJlbWFpbmluZ0NvbXBhcmF0b3JzIiwidGVzdENvbXBhcmF0b3IiLCJvdGhlckNvbXBhcmF0b3IiLCJyZXBsYWNlQ2FyZXRzIiwicmVwbGFjZVRpbGRlcyIsInJlcGxhY2VYUmFuZ2VzIiwicmVwbGFjZVN0YXJzIiwiaXNYIiwicmVwbGFjZVRpbGRlIiwiTSIsInByIiwicmVwbGFjZUNhcmV0IiwieiIsInJlcGxhY2VYUmFuZ2UiLCJndGx0IiwieE0iLCJ4bSIsInhwIiwiYW55WCIsImluY1ByIiwiJDAiLCJmTSIsImZtIiwiZnAiLCJmcHIiLCJmYiIsInRNIiwidG0iLCJ0cCIsInRwciIsInNldCIsImFsbG93ZWQiLCJBTlkiLCJjb21wYXJhdG9yIiwic2F0aXNmaWVzIiwic2F0aXNmaWVzXzEiLCJ0b0NvbXBhcmF0b3JzIiwidG9Db21wYXJhdG9yc18xIiwibWF4U2F0aXNmeWluZyIsInZlcnNpb25zIiwibWF4U1YiLCJyYW5nZU9iaiIsIm1heFNhdGlzZnlpbmdfMSIsIm1pblNhdGlzZnlpbmciLCJtaW5TViIsIm1pblNhdGlzZnlpbmdfMSIsIm1pblZlcnNpb24iLCJtaW52ZXIiLCJzZXRNaW4iLCJjb21wdmVyIiwibWluVmVyc2lvbl8xIiwidmFsaWRSYW5nZSIsIm91dHNpZGUiLCJoaWxvIiwiZ3RmbiIsImx0ZWZuIiwibHRmbiIsImVjb21wIiwiaGlnaCIsImxvdyIsIm91dHNpZGVfMSIsImd0ciIsImd0cl8xIiwibHRyIiwibHRyXzEiLCJpbnRlcnNlY3RzIiwicjEiLCJyMiIsImludGVyc2VjdHNfMSIsInNpbXBsaWZ5IiwicHJldiIsInJhbmdlcyIsInNpbXBsaWZpZWQiLCJvcmlnaW5hbCIsInN1YnNldCIsInN1YiIsImRvbSIsInNhd05vbk51bGwiLCJPVVRFUiIsInNpbXBsZVN1YiIsInNpbXBsZURvbSIsImlzU3ViIiwic2ltcGxlU3Vic2V0IiwibWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSIsIm1pbmltdW1WZXJzaW9uIiwiZXFTZXQiLCJoaWdoZXJHVCIsImxvd2VyTFQiLCJndGx0Q29tcCIsImhpZ2hlciIsImxvd2VyIiwiaGFzRG9tTFQiLCJoYXNEb21HVCIsIm5lZWREb21MVFByZSIsIm5lZWREb21HVFByZSIsInN1YnNldF8xIiwiaW50ZXJuYWxSZSIsInJlcXVpcmUkJDE2IiwicmVxdWlyZSQkMTciLCJyZXF1aXJlJCQxOCIsInJlcXVpcmUkJDE5IiwicmVxdWlyZSQkMjAiLCJyZXF1aXJlJCQyMSIsInJlcXVpcmUkJDIyIiwicmVxdWlyZSQkMjMiLCJyZXF1aXJlJCQyNCIsInJlcXVpcmUkJDI1IiwicmVxdWlyZSQkMjYiLCJyZXF1aXJlJCQyNyIsInJlcXVpcmUkJDI4IiwicmVxdWlyZSQkMjkiLCJyZXF1aXJlJCQzMCIsInJlcXVpcmUkJDMxIiwicmVxdWlyZSQkMzIiLCJyZXF1aXJlJCQzMyIsInJlcXVpcmUkJDM0IiwicmVxdWlyZSQkMzUiLCJyZXF1aXJlJCQzNiIsInJlcXVpcmUkJDM3IiwicmVxdWlyZSQkMzgiLCJzaW1wbGlmeVJhbmdlIiwicmVxdWlyZSQkMzkiLCJyZXF1aXJlJCQ0MCIsIm9iamVjdFRvU3RyaW5nIiwidWludDhBcnJheVN0cmluZ2lmaWVkIiwiYXJyYXlCdWZmZXJTdHJpbmdpZmllZCIsImlzVHlwZSIsInR5cGVDb25zdHJ1Y3RvciIsInR5cGVTdHJpbmdpZmllZCIsImlzVWludDhBcnJheSIsImlzVWludDhBcnJheU9yQXJyYXlCdWZmZXIiLCJhc3NlcnRVaW50OEFycmF5IiwiYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIiLCJjb25jYXRVaW50OEFycmF5cyIsImFycmF5cyIsInRvdGFsTGVuZ3RoIiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJyZXR1cm5WYWx1ZSIsIm9mZnNldCIsImFycmF5IiwiY2FjaGVkRGVjb2RlcnMiLCJ1aW50OEFycmF5VG9TdHJpbmciLCJhc3NlcnRTdHJpbmciLCJjYWNoZWRFbmNvZGVyIiwic3RyaW5nVG9VaW50OEFycmF5Iiwic3RyaW5nIiwiYWp2Rm9ybWF0cyIsImFqdkZvcm1hdHNNb2R1bGUiLCJlbmNyeXB0aW9uQWxnb3JpdGhtIiwiY3JlYXRlUGxhaW5PYmplY3QiLCJpc0V4aXN0IiwiY2hlY2tWYWx1ZVR5cGUiLCJub25Kc29uVHlwZXMiLCJJTlRFUk5BTF9LRVkiLCJNSUdSQVRJT05fS0VZIiwiQ29uZiIsIiN2YWxpZGF0b3IiLCIjZW5jcnlwdGlvbktleSIsIiNvcHRpb25zIiwiI2RlZmF1bHRWYWx1ZXMiLCJwYXJ0aWFsT3B0aW9ucyIsImZpbGVFeHRlbnNpb24iLCJmaWxlU3RvcmUiLCJzdG9yZSIsImRhdGFTdHJpbmciLCJkZXNlcmlhbGl6ZWREYXRhIiwiaW5pdGlhbGl6YXRpb25WZWN0b3IiLCJjcnlwdG8iLCJkZWNpcGhlciIsInNsaWNlIiwiZGF0YVVwZGF0ZSIsImdldHRlciIsIm9uQ2hhbmdlIiwib2xkVmFsdWUiLCJuZXdWYWx1ZSIsImlzRGVlcFN0cmljdEVxdWFsIiwiY2lwaGVyIiwiYXRvbWljV3JpdGVGaWxlU3luYyIsImRlYm91bmNlRm4iLCJtaWdyYXRpb25zIiwidmVyc2lvblRvTWlncmF0ZSIsImJlZm9yZUVhY2hNaWdyYXRpb24iLCJwcmV2aW91c01pZ3JhdGVkVmVyc2lvbiIsIm5ld2VyVmVyc2lvbnMiLCJjYW5kaWRhdGVWZXJzaW9uIiwic3RvcmVCYWNrdXAiLCJtaWdyYXRpb24iLCJpc0luaXRpYWxpemVkIiwiaW5pdERhdGFMaXN0ZW5lciIsIkVsZWN0cm9uU3RvcmUiLCJkZWZhdWx0Q3dkIiwiYXBwVmVyc2lvbiIsImVsZWN0cm9uIiwidG9rZW5UeXBlS2V5IiwiYWNjZXNzVG9rZW5LZXkiLCJzdG9yZUluc3RhbmNlIiwiU3RvcmUiLCJybSIsInNldFRva2VuVHlwZSIsInNldEFjY2Vzc1Rva2VuIiwiZ2V0VG9rZW5UeXBlIiwiZ2V0QWNjZXNzVG9rZW4iLCJkZWxldGVUb2tlblR5cGUiLCJkZWxldGVBY2Nlc3NUb2tlbiIsImNhbGxiYWNrVXJsIiwiY2xpZW50SWQiLCJnZXRUb2tlbkZyb21DYWxsYmFja0NvZGUiLCJvaWRjVXJsIiwidG9rZW5VcmwiLCJpbml0QXV0aCIsInJlbG9hZCIsInBhcnNlZFVSTCIsIm1haW5XaW4iLCJhdXRoV2luIiwiZ2V0QXV0aG9yaXphdGlvblZhbHVlIiwiYXV0aG9yaXphdGlvblVybCIsInRva2VuVHlwZSIsInVzZXJpbmZvVXJsIiwicHJvZmlsZSIsImlzU2luZ2xlSW5zdGFuY2UiLCJsb2FkQnJvd3NlciIsImxvYWRBdXRoZW50aWNhdGlvbiJdLCJtYXBwaW5ncyI6IjhjQW9DTUEsR0FBZ0UsSUFBSSxJQU1wRSxDQUFDLENBQ1AsRUFHQUEsR0FBZ0MsSUFBSSx5QkFBOEIsSUFBQSxHQUFLLEVBWXZFLE1BQU1DLE9BQStCLElBQXlCLENBQzVELG9CQUNGLENBQUMsRUFFREMsRUFB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QU9KLFFBQVEsa0JBQWtCLEVBQUUsWUFBWSx5QkFBeUIsQ0FBQSxFQUVsRSxNQUFPLEdBQU0sUUFBUSxNQUFNLG9DQUFxQyxDQUFDLENBQUMiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0XX0=