@worktif/runtime 0.3.0-edge.7 → 0.3.0-edge.8
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/out/dist/bin/templates/runtime-web/basic/package.json +1 -1
- package/out/dist/lambda/bundle.js +9 -9
- package/out/dist/lib/index.js +1 -1
- package/out/dist/lib/lib/runtime-web/pureweb.d.ts +1 -1
- package/out/dist/src/core/services/runtime-extensions/runtime-extensions.service.d.ts +2 -7
- package/out/dist/src/core/services/runtime-extensions/runtime-extensions.service.d.ts.map +1 -1
- package/out/dist/src/lib/runtime-web/pureweb.d.ts +1 -1
- package/package.json +2 -2
package/out/dist/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";var C=Object.create;var u=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var T=(r,t)=>{for(var e in t)u(r,e,{get:t[e],enumerable:!0})},s=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of E(t))!S.call(r,n)&&n!==e&&u(r,n,{get:()=>t[n],enumerable:!(o=x(t,n))||o.enumerable});return r},c=(r,t,e)=>(s(r,t,"default"),e&&s(e,t,"default")),k=(r,t,e)=>(e=r!=null?C(N(r)):{},s(t||!r||!r.__esModule?u(e,"default",{value:r,enumerable:!0}):e,r)),P=r=>s(u({},"__esModule",{value:!0}),r);var a={};T(a,{BrowserPipeline:()=>d,ConfigValidationError:()=>l,EnvironmentDetectionError:()=>f,createRuntimeConfig:()=>b,extractRuntimeConfig:()=>v,isRuntimeConfig:()=>y,isValidServiceName:()=>w,mergeRuntimeConfig:()=>g,pureweb:()=>D});module.exports=P(a);c(a,require("@worktif/purenow"),module.exports);var p=k(require("react")),R=require("react-dom/client"),m=require("react-router"),d=class{async execute(t,e){try{console.info("Starting browser pipeline execution",{serviceName:t.serviceName,stage:t.stage,url:e.metadata.url,userAgent:e.metadata.userAgent,viewport:e.metadata.viewport});let o=this.createBrowserRouter(t),n=this.createAppElement(t),h=p.createElement(m.RouterProvider,{router:o},n);this.hydrateApplication(h),this.setupHttpClient(t),console.info("Browser pipeline execution completed successfully",{serviceName:t.serviceName,stage:t.stage})}catch(o){throw console.error("Browser pipeline execution failed",{serviceName:t.serviceName,stage:t.stage,error:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0}),o}}createBrowserRouter(t){console.debug("Creating browser router",{routeCount:t.router.getRoutes().length});let e=t.router.getRoutes(),o=(0,m.createBrowserRouter)(e);return console.debug("Browser router created successfully",{routeCount:e.length}),o}createAppElement(t){console.debug("Creating app element from factory");try{let e=t.app({router:t.router});if(!p.isValidElement(e))throw new Error("App factory must return a valid React element");return console.debug("App element created successfully"),e}catch(e){throw console.error("Failed to create app element",{error:e instanceof Error?e.message:String(e)}),new Error(`Failed to create app element: ${e instanceof Error?e.message:String(e)}`)}}hydrateApplication(t){console.debug("Starting React hydration");try{let e=document.getElementById("root");if(!e)throw new Error('Root container element not found. Expected element with id="root"');(0,R.hydrateRoot)(e,t),console.info("React hydration completed successfully")}catch(e){throw console.error("React hydration failed",{error:e instanceof Error?e.message:String(e)}),new Error(`React hydration failed: ${e instanceof Error?e.message:String(e)}`)}}setupHttpClient(t){console.debug("Setting up HTTP client for Lambda endpoints");try{let e=this.getApiBaseUrl(t.stage);typeof window<"u"&&(window.__PURENOW_CONFIG__={serviceName:t.serviceName,stage:t.stage,apiBaseUrl:e}),console.info("HTTP client configured successfully",{baseUrl:e,stage:t.stage})}catch(e){throw console.error("Failed to setup HTTP client",{error:e instanceof Error?e.message:String(e)}),new Error(`Failed to setup HTTP client: ${e instanceof Error?e.message:String(e)}`)}}getApiBaseUrl(t){return`${typeof window<"u"?window.location.origin:""}/api`}};function w(r){return/^[a-zA-Z][a-zA-Z0-9-]{0,127}$/.test(r)}var i=require("@worktif/purenow"),l=class extends Error{constructor(t){super(`Configuration validation failed:
|
|
2
2
|
${t.map(e=>` - ${e}`).join(`
|
|
3
3
|
`)}`),this.name="ConfigValidationError",this.errors=t,Error.captureStackTrace(this,this.constructor)}},f=class extends Error{constructor(t){super(t),this.name="EnvironmentDetectionError",Error.captureStackTrace(this,this.constructor)}};function A(){return typeof window<"u"?"browser":typeof process<"u"&&process.env?.AWS_LAMBDA_FUNCTION_NAME?"lambda":(typeof process<"u"&&(process.env?.PURENOW_MODE==="cdk"||process.env?.CDK_DEFAULT_ACCOUNT||process.env?.CDK_DEFAULT_REGION||process.argv?.some(r=>r.includes("cdk")||r.includes("synth"))),"cdk")}function M(r,t){let e=[];return(!r.serviceName||!/^[a-zA-Z][a-zA-Z0-9-]{0,127}$/.test(r.serviceName))&&e.push("serviceName must start with a letter, contain only alphanumeric characters and hyphens, and be max 128 characters"),["dev","staging","prod"].includes(r.stage)||e.push("stage must be one of: dev, staging, prod"),t&&!r.infra&&e.push("infra configuration is required in CDK context"),{valid:e.length===0,errors:e}}function D(r){let t=A(),o=M(r,t==="cdk");if(!o.valid)throw new l(o.errors);switch(t){case"browser":{(0,i.purenow)({app:({router:n})=>r.app({router:n}),router:(0,i.purenowRouter)({router:r.router.getRoutes(),defaults:r.router.defaults}),config:{serviceName:r.serviceName,stage:r.stage}});break}case"lambda":case"cdk":{console.log("[Runtime] Server-side pipeline detected (%s)",t),(0,i.purenow)({app:({router:n})=>r.app({router:n}),router:(0,i.purenowRouter)({router:r.router.getRoutes(),defaults:r.router.defaults}),config:{serviceName:r.serviceName,stage:r.stage}});break}default:console.log("[Runtime Web] Unknown environment type: %s",t);break}}function g(r,t){return{...r,runtime:{enableThirdStack:!1,runtimeWebMode:"development",additionalFeatures:[],devServerEnhancements:{hotReload:!0,debugMode:!1,performanceMonitoring:!1},buildOptimizations:{bundleAnalysis:!1,treeshaking:!0,codeMinification:!0},...t}}}function y(r){return!!(r&&typeof r=="object"&&"runtime"in r)}function v(r){return r.runtime}function b(r){return g(r)}0&&(module.exports={BrowserPipeline,ConfigValidationError,EnvironmentDetectionError,createRuntimeConfig,extractRuntimeConfig,isRuntimeConfig,isValidServiceName,mergeRuntimeConfig,pureweb,...require("@worktif/purenow")});
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzeCIsICIuLi8uLi8uLi9zcmMvbGliL3J1bnRpbWUtd2ViL3BpcGVsaW5lcy9icm93c2VyLXBpcGVsaW5lLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS13ZWIvdHlwZXMvY29uZmlnLnR5cGVzLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS13ZWIvcHVyZXdlYi50cyIsICIuLi8uLi8uLi9zcmMvbGliL3J1bnRpbWUtd2ViL3J1bnRpbWUuY29uZmlnLnR5cGVzLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zZWQgdW5kZXIgRWxhc3RpYyBMaWNlbnNlIDIuMC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRWxhc3RpYy0yLjBcbiAqL1xuXG4vLyBSZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHRoZSBiYXNlIFB1cmVub3cgZnJhbWV3b3JrXG5leHBvcnQgKiBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcblxuLy8gRXhwb3J0IHJ1bnRpbWUtd2ViIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHlcbmV4cG9ydCAqIGZyb20gJy4vbGliL3J1bnRpbWUtd2ViJztcblxuLy8gRXhwb3J0IHJ1bnRpbWUgY29uZmlndXJhdGlvbiB0eXBlcyBhbmQgdXRpbGl0aWVzXG4vLyBleHBvcnQgKiBmcm9tICcuL3V0aWxzJztcblxuXG4vLyBSZS1leHBvcnQgcHVyZW5vdyBiaW4gZnVuY3Rpb25hbGl0eVxuLy8gZXhwb3J0ICogZnJvbSAnQHdvcmt0aWYvcHVyZW5vdyc7XG4iLCAiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zaW5nIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHlkcmF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyTWV0YWRhdGEsIFJ1bnRpbWVXZWJDb25maWcgfSBmcm9tICdAbGliL3J1bnRpbWUtd2ViL3R5cGVzJztcblxuLy8gaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHdvcmt0aWYvdXRpbHMnO1xuXG4vKipcbiAqIEJyb3dzZXIgZXhlY3V0aW9uIHBpcGVsaW5lIGZvciBSdW50aW1lIFRhcmdldCBDb3JlLlxuICpcbiAqIEB0b2RvOiBvcmRpbmF0ZSB0aGlzIGNsYXNzIHRvIGluZnJhIG9yIGNvcmUgY2F1c2Ugd2UgaGF2ZSBOb2RlLmpzIHJlc3BvbnNpYmlsaXR5XG4gKiAgICAgIC0tLS0gT1IgXHUyMDEzPiBSRU1PVkUgTE9HR0VSXG4gKlxuICogKipBUkNISVRFQ1RVUkUgTk9URSoqOiBUaGlzIGZpbGUgaXMgaW4gYHNyYy9saWIvYCBiZWNhdXNlIGl0OlxuICogLSBVc2VzIGJyb3dzZXItb25seSBBUElzICh3aW5kb3csIGRvY3VtZW50LCBoeWRyYXRlUm9vdClcbiAqIC0gUnVucyBPTkxZIGluIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqIC0gTXVzdCBiZSBpc29tb3JwaGljLXNhZmUgKG5vIE5vZGUuanMgQVBJcylcbiAqIC0gTkVWRVIgcnVucyBpbiBMYW1iZGFcbiAqXG4gKiBIYW5kbGVzIGNsaWVudC1zaWRlIGh5ZHJhdGlvbiBvZiBSZWFjdCBhcHBsaWNhdGlvbnMgd2l0aCBwcmUtbG9hZGVkIGRhdGFcbiAqIGZyb20gc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBTZXRzIHVwIGNsaWVudC1zaWRlIHJvdXRpbmcgYW5kIEhUVFAgY2xpZW50XG4gKiBmb3IgcG9zdC1oeWRyYXRpb24gQVBJIGNhbGxzIHRvIExhbWJkYSBlbmRwb2ludHMuXG4gKlxuICogKipFeGVjdXRpb24gRmxvdyoqOlxuICogMS4gSHlkcmF0ZSBSZWFjdCBhcHAgd2l0aCBleGlzdGluZyBQdXJlbm93Um91dGVyXG4gKiAyLiBDYWxsIGNvbmZpZy5hcHAoeyByb3V0ZXIgfSkgdG8gZ2V0IFJlYWN0IGVsZW1lbnRcbiAqIDMuIEluaXRpYWxpemUgY2xpZW50LXNpZGUgbmF2aWdhdGlvblxuICogNC4gU2V0IHVwIEhUVFAgY2xpZW50IGZvciBMYW1iZGEgZW5kcG9pbnQgY2FsbHNcbiAqXG4gKiAqKlJlcXVpcmVtZW50cyoqOiBSRVEtMDYsIFJFUS0xMlxuICovXG5leHBvcnQgY2xhc3MgQnJvd3NlclBpcGVsaW5lIHtcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBsb2dnZXIoe1xuICAvLyAgIHNlcnZpY2VOYW1lOiAnQGxpYi9ydW50aW1lLXdlYi9waXBlbGluZXMvYnJvd3Nlci1waXBlbGluZScsXG4gIC8vIH0pO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGJyb3dzZXIgcGlwZWxpbmUgZm9yIGNsaWVudC1zaWRlIGh5ZHJhdGlvbi5cbiAgICpcbiAgICogSHlkcmF0ZXMgdGhlIFJlYWN0IGFwcGxpY2F0aW9uIHdpdGggcHJlLWxvYWRlZCBkYXRhIGZyb20gU1NSIGFuZCBzZXRzIHVwXG4gICAqIGNsaWVudC1zaWRlIHJvdXRpbmcuIFVzZXMgUmVhY3QgaHlkcmF0aW9uIChub3QgcmVuZGVyKSB0byBtYXRjaCB0aGVcbiAgICogc2VydmVyLXJlbmRlcmVkIEhUTUwgZXhhY3RseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIFB1cmVub3cgY29uZmlndXJhdGlvbiB3aXRoIGFwcCBmYWN0b3J5IGFuZCByb3V0ZXJcbiAgICogQHBhcmFtIGNvbnRleHQgLSBCcm93c2VyIGVudmlyb25tZW50IGNvbnRleHQgd2l0aCBtZXRhZGF0YVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBpcGVsaW5lID0gbmV3IEJyb3dzZXJQaXBlbGluZSgpO1xuICAgKiBhd2FpdCBwaXBlbGluZS5leGVjdXRlKGNvbmZpZywge1xuICAgKiAgIHR5cGU6ICdicm93c2VyJyxcbiAgICogICBtZXRhZGF0YToge1xuICAgKiAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgKiAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICogICAgIHZpZXdwb3J0OiB7IHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCwgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQgfVxuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShjb25maWc6IFJ1bnRpbWVXZWJDb25maWcsIGNvbnRleHQ6IHsgdHlwZTogJ2Jyb3dzZXInOyBtZXRhZGF0YTogQnJvd3Nlck1ldGFkYXRhIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKCdTdGFydGluZyBicm93c2VyIHBpcGVsaW5lIGV4ZWN1dGlvbicsIHtcbiAgICAgICAgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgICAgdXJsOiBjb250ZXh0Lm1ldGFkYXRhLnVybCxcbiAgICAgICAgdXNlckFnZW50OiBjb250ZXh0Lm1ldGFkYXRhLnVzZXJBZ2VudCxcbiAgICAgICAgdmlld3BvcnQ6IGNvbnRleHQubWV0YWRhdGEudmlld3BvcnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gMS4gQ3JlYXRlIGJyb3dzZXIgcm91dGVyIGZyb20gUHVyZW5vd1JvdXRlclxuICAgICAgY29uc3QgYnJvd3NlclJvdXRlciA9IHRoaXMuY3JlYXRlQnJvd3NlclJvdXRlcihjb25maWcpO1xuXG4gICAgICAvLyAyLiBHZXQgUmVhY3QgZWxlbWVudCBmcm9tIGFwcCBmYWN0b3J5XG4gICAgICBjb25zdCBhcHBFbGVtZW50ID0gdGhpcy5jcmVhdGVBcHBFbGVtZW50KGNvbmZpZyk7XG5cbiAgICAgIC8vIDMuIENyZWF0ZSByb3V0ZXIgcHJvdmlkZXIgd2l0aCB0aGUgYXBwXG4gICAgICBjb25zdCByb3V0ZXJQcm92aWRlciA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyUHJvdmlkZXIsIHtcbiAgICAgICAgcm91dGVyOiBicm93c2VyUm91dGVyLFxuICAgICAgfSwgYXBwRWxlbWVudCk7XG5cbiAgICAgIC8vIDQuIEh5ZHJhdGUgdGhlIGFwcGxpY2F0aW9uICh1c2UgaHlkcmF0aW9uLCBub3QgcmVuZGVyKVxuICAgICAgdGhpcy5oeWRyYXRlQXBwbGljYXRpb24ocm91dGVyUHJvdmlkZXIpO1xuXG4gICAgICAvLyA1LiBTZXQgdXAgSFRUUCBjbGllbnQgZm9yIHBvc3QtaHlkcmF0aW9uIEFQSSBjYWxsc1xuICAgICAgdGhpcy5zZXR1cEh0dHBDbGllbnQoY29uZmlnKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdCcm93c2VyIHBpcGVsaW5lIGV4ZWN1dGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQnJvd3NlciBwaXBlbGluZSBleGVjdXRpb24gZmFpbGVkJywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJyb3dzZXIgcm91dGVyIGZyb20gUHVyZW5vd1JvdXRlciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2VzIHRoZSBleGlzdGluZyBQdXJlbm93Um91dGVyIHRvIGdldCByb3V0ZXMgYW5kIGNyZWF0ZXMgYSBSZWFjdCBSb3V0ZXJcbiAgICogYnJvd3NlciByb3V0ZXIgZm9yIGNsaWVudC1zaWRlIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgQnJvd3NlciByb3V0ZXIgaW5zdGFuY2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQnJvd3NlclJvdXRlcihjb25maWc6IFJ1bnRpbWVXZWJDb25maWcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdDcmVhdGluZyBicm93c2VyIHJvdXRlcicsIHtcbiAgICAgIHJvdXRlQ291bnQ6IGNvbmZpZy5yb3V0ZXIuZ2V0Um91dGVzKCkubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgLy8gR2V0IHJvdXRlcyBmcm9tIFB1cmVub3dSb3V0ZXJcbiAgICBjb25zdCByb3V0ZXMgPSBjb25maWcucm91dGVyLmdldFJvdXRlcygpO1xuXG4gICAgLy8gQ3JlYXRlIGJyb3dzZXIgcm91dGVyIHdpdGggcm91dGVzIChjYXN0IHRvIFJvdXRlT2JqZWN0W10gZm9yIGNvbXBhdGliaWxpdHkpXG4gICAgY29uc3QgYnJvd3NlclJvdXRlciA9IGNyZWF0ZUJyb3dzZXJSb3V0ZXIocm91dGVzIGFzIGFueSk7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdCcm93c2VyIHJvdXRlciBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgIHJvdXRlQ291bnQ6IHJvdXRlcy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYnJvd3NlclJvdXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgUmVhY3QgZWxlbWVudCBmcm9tIGFwcCBmYWN0b3J5IGZ1bmN0aW9uLlxuICAgKlxuICAgKiBDYWxscyB0aGUgdXNlcidzIGFwcCBmYWN0b3J5IGZ1bmN0aW9uIHdpdGggdGhlIHJvdXRlciBkZXBlbmRlbmN5XG4gICAqIHRvIGdldCB0aGUgcm9vdCBSZWFjdCBlbGVtZW50IGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUm9vdCBSZWFjdCBlbGVtZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFwcEVsZW1lbnQoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnKTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgICBjb25zb2xlLmRlYnVnKCdDcmVhdGluZyBhcHAgZWxlbWVudCBmcm9tIGZhY3RvcnknKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDYWxsIGFwcCBmYWN0b3J5IHdpdGggcm91dGVyIGRlcGVuZGVuY3lcbiAgICAgIGNvbnN0IGFwcEVsZW1lbnQgPSBjb25maWcuYXBwKHsgcm91dGVyOiBjb25maWcucm91dGVyIH0pO1xuXG4gICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGFwcEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXBwIGZhY3RvcnkgbXVzdCByZXR1cm4gYSB2YWxpZCBSZWFjdCBlbGVtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoJ0FwcCBlbGVtZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICByZXR1cm4gYXBwRWxlbWVudDtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGFwcCBlbGVtZW50Jywge1xuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgYXBwIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIeWRyYXRlIHRoZSBSZWFjdCBhcHBsaWNhdGlvbiBpbiB0aGUgYnJvd3Nlci5cbiAgICpcbiAgICogVXNlcyBSZWFjdCdzIGh5ZHJhdGVSb290IHRvIGh5ZHJhdGUgdGhlIHNlcnZlci1yZW5kZXJlZCBIVE1MIHdpdGhcbiAgICogdGhlIGNsaWVudC1zaWRlIFJlYWN0IGFwcGxpY2F0aW9uLiBUaGlzIGVuc3VyZXMgdGhlIGNsaWVudCBtYXRjaGVzXG4gICAqIHRoZSBzZXJ2ZXIgZXhhY3RseSB0byBhdm9pZCBoeWRyYXRpb24gbWlzbWF0Y2hlcy5cbiAgICpcbiAgICogQHBhcmFtIHJvdXRlclByb3ZpZGVyIC0gUm91dGVyIHByb3ZpZGVyIGVsZW1lbnQgdG8gaHlkcmF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlQXBwbGljYXRpb24ocm91dGVyUHJvdmlkZXI6IFJlYWN0LlJlYWN0RWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1N0YXJ0aW5nIFJlYWN0IGh5ZHJhdGlvbicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCB0aGUgcm9vdCBjb250YWluZXIgZWxlbWVudFxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTtcbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBjb250YWluZXIgZWxlbWVudCBub3QgZm91bmQuIEV4cGVjdGVkIGVsZW1lbnQgd2l0aCBpZD1cInJvb3RcIicpO1xuICAgICAgfVxuXG4gICAgICAvLyBIeWRyYXRlIHRoZSBhcHBsaWNhdGlvbiAobm90IHJlbmRlciAtIG11c3QgbWF0Y2ggc2VydmVyIEhUTUwpXG4gICAgICBoeWRyYXRlUm9vdChjb250YWluZXIsIHJvdXRlclByb3ZpZGVyKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdSZWFjdCBoeWRyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlYWN0IGh5ZHJhdGlvbiBmYWlsZWQnLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVhY3QgaHlkcmF0aW9uIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBIVFRQIGNsaWVudCBmb3IgTGFtYmRhIGVuZHBvaW50IGNhbGxzLlxuICAgKlxuICAgKiBDb25maWd1cmVzIHRoZSBIVFRQIGNsaWVudCBmb3IgbWFraW5nIEFQSSBjYWxscyB0byBMYW1iZGEgZW5kcG9pbnRzXG4gICAqIGFmdGVyIGh5ZHJhdGlvbi4gVGhpcyBpcyB1c2VkIGZvciBwb3N0LWh5ZHJhdGlvbiBpbnRlcmFjdGlvbnMgdGhhdFxuICAgKiByZXF1aXJlIHNlcnZlci1zaWRlIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0dXBIdHRwQ2xpZW50KGNvbmZpZzogUnVudGltZVdlYkNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NldHRpbmcgdXAgSFRUUCBjbGllbnQgZm9yIExhbWJkYSBlbmRwb2ludHMnKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTZXQgdXAgYmFzZSBVUkwgZm9yIEFQSSBjYWxscyBiYXNlZCBvbiBzdGFnZVxuICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMuZ2V0QXBpQmFzZVVybChjb25maWcuc3RhZ2UpO1xuXG4gICAgICAvLyBTdG9yZSBjb25maWd1cmF0aW9uIGdsb2JhbGx5IGZvciB1c2UgYnkgZGF0YSBsb2FkZXJzXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUFVSRU5PV19DT05GSUdfXyA9IHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHN0YWdlOiBjb25maWcuc3RhZ2UsXG4gICAgICAgICAgYXBpQmFzZVVybDogYmFzZVVybCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5pbmZvKCdIVFRQIGNsaWVudCBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgIH0pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZXR1cCBIVFRQIGNsaWVudCcsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0dXAgSFRUUCBjbGllbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVBJIGJhc2UgVVJMIGJhc2VkIG9uIGRlcGxveW1lbnQgc3RhZ2UuXG4gICAqXG4gICAqIERldGVybWluZXMgdGhlIGFwcHJvcHJpYXRlIEFQSSBiYXNlIFVSTCBmb3IgbWFraW5nIEhUVFAgcmVxdWVzdHNcbiAgICogdG8gTGFtYmRhIGVuZHBvaW50cyBiYXNlZCBvbiB0aGUgZGVwbG95bWVudCBzdGFnZS5cbiAgICpcbiAgICogQHBhcmFtIHN0YWdlIC0gRGVwbG95bWVudCBzdGFnZVxuICAgKiBAcmV0dXJucyBBUEkgYmFzZSBVUkxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0QXBpQmFzZVVybChzdGFnZTogJ2RldicgfCAnc3RhZ2luZycgfCAncHJvZCcpOiBzdHJpbmcge1xuICAgIC8vIEluIGJyb3dzZXIgY29udGV4dCwgQVBJIGNhbGxzIGdvIHRocm91Z2ggdGhlIHNhbWUgb3JpZ2luXG4gICAgLy8gVGhlIGFjdHVhbCBBUEkgR2F0ZXdheSBVUkwgaXMgaGFuZGxlZCBieSBDbG91ZEZyb250IHJvdXRpbmdcbiAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJztcblxuICAgIC8vIEFQSSBlbmRwb2ludHMgYXJlIHR5cGljYWxseSB1bmRlciAvYXBpIHBhdGhcbiAgICByZXR1cm4gYCR7b3JpZ2lufS9hcGlgO1xuICB9XG59XG4iLCAiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zZWQgdW5kZXIgRWxhc3RpYyBMaWNlbnNlIDIuMC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRWxhc3RpYy0yLjBcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEluZnJhT3B0aW9ucyB9IGZyb20gJy4vaW5mcmEudHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNaWNyb3NlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSAnLi9taWNyb3NlcnZpY2UudHlwZXMnO1xuXG4vKipcbiAqIFB1cmVub3dSb3V0ZXIgaW50ZXJmYWNlIGZvciBydW50aW1lLXdlYiBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBEZWZpbmVzIHRoZSBlc3NlbnRpYWwgbWV0aG9kcyBuZWVkZWQgYnkgdGhlIHJ1bnRpbWUtd2ViIHBpcGVsaW5lcy5cbiAqIFRoaXMgaW50ZXJmYWNlIG1hdGNoZXMgdGhlIGFjdHVhbCBQdXJlbm93Um91dGVyIGNsYXNzIGZyb20gQGxpYi9yZWFjdC9wdXJlbm93LnJvdXRlci5cbiAqL1xuaW50ZXJmYWNlIFB1cmVub3dSb3V0ZXIge1xuICAvKipcbiAgICogR2V0IGFsbCByb3V0ZSBvYmplY3RzIGFzIGFuIGFycmF5LlxuICAgKiBVc2VkIGZvciBjcmVhdGluZyBicm93c2VyIHJvdXRlcnMgYW5kIFNTUiBzdGF0aWMgaGFuZGxlcnMuXG4gICAqL1xuICBnZXRSb3V0ZXMoKTogQXJyYXk8e1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgZWxlbWVudD86IHVua25vd247XG4gICAgbG9hZGVyPzogdW5rbm93bjtcbiAgICBjaGlsZHJlbj86IHVua25vd247XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgfT47XG5cbiAgLyoqXG4gICAqIEZpbmQgYSByb3V0ZSBieSBpdHMgSUQuXG4gICAqL1xuICBnZXRSb3V0ZUJ5SWQ/KGlkOiBzdHJpbmcpOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBGaW5kIGEgcm91dGUgYnkgaXRzIHBhdGguXG4gICAqL1xuICBnZXRSb3V0ZUJ5UGF0aD8ocGF0aDogc3RyaW5nKTogdW5rbm93bjtcblxuICAvKipcbiAgICogR2V0IHRoZSByb3V0ZXMgYXJyYXkgKGdldHRlcikuXG4gICAqL1xuICByb3V0ZXM/OiBBcnJheTx1bmtub3duPjtcblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBkZWZhdWx0cz86IHVua25vd247XG59XG5cbi8qKlxuICogU3RhZ2UgZW52aXJvbm1lbnQgZm9yIGRlcGxveW1lbnQuXG4gKlxuICogLSBgZGV2YDogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcbiAqIC0gYHN0YWdpbmdgOiBTdGFnaW5nL3ByZS1wcm9kdWN0aW9uIGVudmlyb25tZW50XG4gKiAtIGBwcm9kYDogUHJvZHVjdGlvbiBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgdHlwZSBTdGFnZSA9ICdkZXYnIHwgJ3N0YWdpbmcnIHwgJ3Byb2QnO1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBleHRyYWN0IHNlcnZpY2UgbmFtZXMgZnJvbSByZWdpc3RlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoaXMgZW5hYmxlcyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbiBvZiBzZXJ2aWNlIG5hbWVzIGFuZCBwcm92aWRlc1xuICogdHlwZS1zYWZlIGFjY2VzcyB0byBzZXJ2aWNlIGlkZW50aWZpZXJzIHRocm91Z2hvdXQgdGhlIGZyYW1ld29yay5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIFNlcnZpY2VOYW1lczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4+ID0ga2V5b2YgVDtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gZ2VuZXJhdGUgTGFtYmRhIElEcyBmcm9tIHNlcnZpY2UgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBDb21iaW5lcyBzZXJ2aWNlIG5hbWVzIHdpdGggTGFtYmRhIElEcyB0byBjcmVhdGUgZnVsbHkgcXVhbGlmaWVkXG4gKiBMYW1iZGEgaWRlbnRpZmllcnMgZm9yIHR5cGUtc2FmZSBMYW1iZGEgcmVzb2x1dGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIExhbWJkYUlkczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXVsnbGFtYmRhcyddW251bWJlcl0gZXh0ZW5kcyB7IGlkOiBpbmZlciBJIH1cbiAgICA/IEkgZXh0ZW5kcyBzdHJpbmdcbiAgICAgID8gYCR7SyAmIHN0cmluZ30uJHtJfWBcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuLyoqXG4gKiBUeXBlIGNvbnN0cmFpbnQgZm9yIHZhbGlkIHNlcnZpY2UgbmFtZXMuXG4gKlxuICogRW5zdXJlcyBzZXJ2aWNlIG5hbWVzIGZvbGxvdyB0aGUgdmFsaWRhdGlvbiBwYXR0ZXJuOlxuICogLSBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgKGEteiwgQS1aKVxuICogLSBDYW4gY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1xuICogLSBNYXhpbXVtIGxlbmd0aDogMTI4IGNoYXJhY3RlcnNcbiAqXG4gKiBUaGlzIGlzIGEgYnJhbmRlZCB0eXBlIHRoYXQgcHJvdmlkZXMgY29tcGlsZS10aW1lIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkU2VydmljZU5hbWUgPSBzdHJpbmcgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6ICdWYWxpZFNlcnZpY2VOYW1lJyB9O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gdmFsaWRhdGUgc2VydmljZSBuYW1lIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgLSBUaGUgc2VydmljZSBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBUeXBlIHByZWRpY2F0ZSBpbmRpY2F0aW5nIGlmIHRoZSBzZXJ2aWNlIG5hbWUgaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTZXJ2aWNlTmFtZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc2VydmljZU5hbWUgaXMgVmFsaWRTZXJ2aWNlTmFtZSB7XG4gIHJldHVybiAvXlthLXpBLVpdW2EtekEtWjAtOS1dezAsMTI3fSQvLnRlc3Qoc2VydmljZU5hbWUpO1xufVxuXG4vKipcbiAqIE1haW4gY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIFJ1bnRpbWUgVGFyZ2V0IENvcmUuXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB1bmlmaWVkIGNvbmZpZ3VyYXRpb24gdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGV4ZWN1dGlvbiBjb250ZXh0czpcbiAqIC0gQnJvd3NlcjogSHlkcmF0ZXMgUmVhY3QgYXBwbGljYXRpb24gd2l0aCBjbGllbnQtc2lkZSByb3V0aW5nXG4gKiAtIExhbWJkYTogRXhlY3V0ZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIGFuZCBidXNpbmVzcyBsb2dpY1xuICogLSBDREs6IFN5bnRoZXNpemVzIENsb3VkRm9ybWF0aW9uIGluZnJhc3RydWN0dXJlXG4gKlxuICogQHRlbXBsYXRlIFRSZWdpc3RlciAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIHR5cGUgZm9yIHR5cGUtc2FmZSBzZXJ2aWNlIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHB1cmVub3cgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93L3J1bnRpbWUtd2ViJztcbiAqIGltcG9ydCB7IFB1cmVub3dSb3V0ZXIgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcbiAqXG4gKiBjb25zdCBjb25maWcgPSB7XG4gKiAgIGFwcDogKHsgcm91dGVyIH0pID0+IDxBcHAgcm91dGVyPXtyb3V0ZXJ9IC8+LFxuICogICByb3V0ZXI6IG5ldyBQdXJlbm93Um91dGVyKHsgcm91dGVyOiByb3V0ZXMsIGRlZmF1bHRzOiB7fSB9KSxcbiAqICAgc2VydmljZU5hbWU6ICdteS1hcHAnLFxuICogICBzdGFnZTogJ2RldicsXG4gKiAgIHJlZ2lzdGVyOiB7XG4gKiAgICAgcGF5bWVudHM6IHtcbiAqICAgICAgIHRpZXM6IFtQYXltZW50c1RpZXNdLFxuICogICAgICAgbGFtYmRhczogW2NoYXJnZUhhbmRsZXIsIHJlZnVuZEhhbmRsZXJdXG4gKiAgICAgfSxcbiAqICAgICB1c2Vyczoge1xuICogICAgICAgdGllczogW1VzZXJzVGllc10sXG4gKiAgICAgICBsYW1iZGFzOiBbY3JlYXRlVXNlckhhbmRsZXIsIGdldFVzZXJIYW5kbGVyXVxuICogICAgIH1cbiAqICAgfSBhcyBjb25zdCwgIC8vIFVzZSAnYXMgY29uc3QnIGZvciBiZXR0ZXIgdHlwZSBpbmZlcmVuY2VcbiAqICAgaW5mcmE6IHtcbiAqICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAqICAgICBzdGFnZTogJ2RldicsXG4gKiAgICAgcmVhY3RFbnRyeTogJy4vc3JjL2luZGV4LnRzeCcsXG4gKiAgICAgYXBpTW9kZTogJ2FwaUdhdGV3YXknXG4gKiAgIH1cbiAqIH0gc2F0aXNmaWVzIFB1cmVub3dDb25maWc7XG4gKlxuICogcHVyZW5vdyhjb25maWcpO1xuICogYGBgXG4gKlxuICogQHRvZG86IGFmdGVyIFJ1bnRpbWVXZWIgcmVwbyB3aWxsIGJlIHJlc29sdmVkLCBSdW50aW1lV2ViQ29uZmlnIE1VU1QgZXh0ZW5kIFB1cmVub3dDb25maWcgQ29yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVXZWJDb25maWc8VFJlZ2lzdGVyIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4gPSBSZWNvcmQ8c3RyaW5nLCBNaWNyb3NlcnZpY2VEZWZpbml0aW9uPj4ge1xuICAvKipcbiAgICogUmVhY3QgYXBwbGljYXRpb24gY29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqXG4gICAqIFJlY2VpdmVzIHRoZSByb3V0ZXIgaW5zdGFuY2UgYXMgYSBkZXBlbmRlbmN5IGFuZCByZXR1cm5zIHRoZSByb290IFJlYWN0IGVsZW1lbnQuXG4gICAqIFRoaXMgcGF0dGVybiBlbmFibGVzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG9mIHRoZSByb3V0ZXIgaW50byB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyAtIERlcGVuZGVuY2llcyBvYmplY3QgY29udGFpbmluZyB0aGUgcm91dGVyXG4gICAqIEBwYXJhbSBkZXBzLnJvdXRlciAtIFB1cmVub3dSb3V0ZXIgaW5zdGFuY2UgZm9yIG5hdmlnYXRpb24gYW5kIHJvdXRpbmdcbiAgICogQHJldHVybnMgUm9vdCBSZWFjdCBlbGVtZW50IChSZWFjdC5SZWFjdEVsZW1lbnQpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXBwOiAoeyByb3V0ZXIgfSkgPT4gPEFwcCByb3V0ZXI9e3JvdXRlcn0gLz5cbiAgICogYGBgXG4gICAqL1xuICBhcHA6IChkZXBzOiB7IHJvdXRlcjogUHVyZW5vd1JvdXRlciB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFB1cmVub3dSb3V0ZXIgaW5zdGFuY2UgZm9yIGFwcGxpY2F0aW9uIHJvdXRpbmcuXG4gICAqXG4gICAqIERlZmluZXMgYWxsIHJvdXRlcywgbG9hZGVycywgYW5kIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogVGhlIHJvdXRlciBpcyB1c2VkIGluIGJvdGggc2VydmVyLXNpZGUgcmVuZGVyaW5nIChMYW1iZGEpIGFuZCBjbGllbnQtc2lkZSBoeWRyYXRpb24gKGJyb3dzZXIpLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBQdXJlbm93Um91dGVyfSBmb3Igcm91dGVyIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiByb3V0ZXI6IG5ldyBQdXJlbm93Um91dGVyKHtcbiAgICogICByb3V0ZXI6IFtcbiAgICogICAgIHsgcGF0aDogJy8nLCBlbGVtZW50OiA8SG9tZSAvPiB9LFxuICAgKiAgICAgeyBwYXRoOiAnL2Fib3V0JywgZWxlbWVudDogPEFib3V0IC8+IH1cbiAgICogICBdLFxuICAgKiAgIGRlZmF1bHRzOiB7fVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHJvdXRlcjogUHVyZW5vd1JvdXRlcjtcblxuICAvKipcbiAgICogU2VydmljZSBuYW1lIGlkZW50aWZpZXIgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogVXNlZCBhcyBhIHByZWZpeCBmb3IgYWxsIEFXUyByZXNvdXJjZXMgKExhbWJkYSBmdW5jdGlvbnMsIEFQSSBHYXRld2F5LCBTMyBidWNrZXRzLCBldGMuKS5cbiAgICogTXVzdCBiZSB1bmlxdWUgd2l0aGluIHlvdXIgQVdTIGFjY291bnQgYW5kIHJlZ2lvbi5cbiAgICpcbiAgICogKipWYWxpZGF0aW9uIFJ1bGVzKio6XG4gICAqIC0gTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIChhLXosIEEtWilcbiAgICogLSBDYW4gY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1xuICAgKiAtIE1heGltdW0gbGVuZ3RoOiAxMjggY2hhcmFjdGVyc1xuICAgKiAtIFBhdHRlcm46IGAvXlthLXpBLVpdW2EtekEtWjAtOS1dezAsMTI3fSQvYFxuICAgKlxuICAgKiAqKkV4YW1wbGVzKio6XG4gICAqIC0gVmFsaWQ6IGBteS1hcHBgLCBgTXlBcHBgLCBgYXBwMTIzYCwgYG15LWFwcC12MmBcbiAgICogLSBJbnZhbGlkOiBgMTIzYXBwYCAoc3RhcnRzIHdpdGggbnVtYmVyKSwgYG15X2FwcGAgKHVuZGVyc2NvcmUpLCBgbXkgYXBwYCAoc3BhY2UpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc2VydmljZU5hbWU6ICdteS1hcHBsaWNhdGlvbidcbiAgICogYGBgXG4gICAqL1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IHN0YWdlL2Vudmlyb25tZW50LlxuICAgKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCByZXNvdXJjZSBuYW1pbmcuXG4gICAqIFVzZWQgdG8gY3JlYXRlIHNlcGFyYXRlIGluZnJhc3RydWN0dXJlIHN0YWNrcyBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50cy5cbiAgICpcbiAgICogKipWYWx1ZXMqKjpcbiAgICogLSBgZGV2YDogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgKGxvY2FsIHRlc3RpbmcsIHJhcGlkIGl0ZXJhdGlvbilcbiAgICogLSBgc3RhZ2luZ2A6IFN0YWdpbmcvcHJlLXByb2R1Y3Rpb24gZW52aXJvbm1lbnQgKFFBLCBpbnRlZ3JhdGlvbiB0ZXN0aW5nKVxuICAgKiAtIGBwcm9kYDogUHJvZHVjdGlvbiBlbnZpcm9ubWVudCAobGl2ZSB1c2VycylcbiAgICpcbiAgICogKipJbXBhY3QqKjpcbiAgICogLSBSZXNvdXJjZSBuYW1pbmc6IGB7c2VydmljZU5hbWV9LXtyZXNvdXJjZX0te3N0YWdlfWBcbiAgICogLSBFbnZpcm9ubWVudCB2YXJpYWJsZXM6IERpZmZlcmVudCBjb25maWdzIHBlciBzdGFnZVxuICAgKiAtIENhY2hlIFRUTDogU2hvcnRlciBpbiBkZXYsIGxvbmdlciBpbiBwcm9kXG4gICAqIC0gTG9nZ2luZzogTW9yZSB2ZXJib3NlIGluIGRldiwgc3RydWN0dXJlZCBpbiBwcm9kXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc3RhZ2U6ICdkZXYnXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhZ2U6IFN0YWdlO1xuXG4gIC8qKlxuICAgKiBNaWNyb3NlcnZpY2UgcmVnaXN0cnkgKHJ1bnRpbWUtbGV2ZWwgY29uZmlndXJhdGlvbikuXG4gICAqXG4gICAqICoqUmVxdWlyZWQqKjogRGVmaW5lcyBhbGwgbWljcm9zZXJ2aWNlcywgdGhlaXIgREkgY29udGFpbmVycywgYW5kIExhbWJkYSBlbmRwb2ludHMuXG4gICAqICoqVXNlZCBpbiBhbGwgY29udGV4dHMqKjogQnJvd3NlciAoZm9yIHR5cGUgZ2VuZXJhdGlvbiksIExhbWJkYSAoZm9yIERJKSwgQ0RLIChmb3IgaW5mcmFzdHJ1Y3R1cmUpLlxuICAgKiAqKkFyY2hpdGVjdHVyZSoqOiBUaGlzIGlzIHJ1bnRpbWUgY29uZmlndXJhdGlvbiwgc2VwYXJhdGUgZnJvbSBpbmZyYXN0cnVjdHVyZSBjb25jZXJucy5cbiAgICpcbiAgICogRWFjaCBtaWNyb3NlcnZpY2UgZ2V0cyBpdHMgb3duIFB1cmVDb250YWluZXIgaW5zdGFuY2UgYnVpbHQgZnJvbSB0aGUgVGllcyBjbGFzc2VzLlxuICAgKiBMYW1iZGEgZnVuY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIHdpcmVkIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqXG4gICAqICoqVHlwZSBTYWZldHkqKjogU2VydmljZSBuYW1lcyBhcmUgZGVyaXZlZCBmcm9tIG9iamVjdCBrZXlzLCBlbnN1cmluZyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbi5cbiAgICogKipObyBNYWdpYyBTdHJpbmdzKio6IEFsbCBzZXJ2aWNlIGlkZW50aWZpZXJzIGFyZSB0eXBlLXNhZmUgYW5kIGF1dG8tZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBNaWNyb3NlcnZpY2VEZWZpbml0aW9ufSBmb3IgbWljcm9zZXJ2aWNlIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHJlZ2lzdGVyOiB7XG4gICAqICAgcGF5bWVudHM6IHtcbiAgICogICAgIHRpZXM6IFtQYXltZW50c1RpZXMsIEJpbGxpbmdUaWVzXSxcbiAgICogICAgIGxhbWJkYXM6IFtjaGFyZ2VIYW5kbGVyLCByZWZ1bmRIYW5kbGVyLCB3ZWJob29rSGFuZGxlcl1cbiAgICogICB9LFxuICAgKiAgIHVzZXJzOiB7XG4gICAqICAgICB0aWVzOiBbVXNlcnNUaWVzLCBBdXRoVGllc10sXG4gICAqICAgICBsYW1iZGFzOiBbY3JlYXRlVXNlckhhbmRsZXIsIGdldFVzZXJIYW5kbGVyLCBsb2dpbkhhbmRsZXJdXG4gICAqICAgfVxuICAgKiB9IGFzIGNvbnN0ICAvLyBVc2UgJ2FzIGNvbnN0JyBmb3IgYmV0dGVyIHR5cGUgaW5mZXJlbmNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVnaXN0ZXI6IFRSZWdpc3RlcjtcblxuICAvKipcbiAgICogSW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiBmb3IgQ0RLIGRlcGxveW1lbnQuXG4gICAqXG4gICAqICoqT3B0aW9uYWwqKjogT25seSByZXF1aXJlZCB3aGVuIHJ1bm5pbmcgaW4gQ0RLIGNvbnRleHQgKHN5bnRoZXNpemluZyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMpLlxuICAgKiAqKk5vdCB1c2VkKio6IEluIGJyb3dzZXIgYW5kIExhbWJkYSBjb250ZXh0cyAocnVudGltZSBjb25maWd1cmF0aW9uIGlzIGluIHJlZ2lzdGVyKS5cbiAgICogKipQdXJlIGluZnJhc3RydWN0dXJlKio6IENvbnRhaW5zIG9ubHkgQVdTIHJlc291cmNlIGNvbmZpZ3VyYXRpb24sIG5vIGJ1c2luZXNzIGxvZ2ljLlxuICAgKlxuICAgKiBEZWZpbmVzOlxuICAgKiAtIEFXUyBhY2NvdW50IGFuZCByZWdpb25cbiAgICogLSBMYW1iZGEgY29uZmlndXJhdGlvbiAobWVtb3J5LCB0aW1lb3V0LCBWUEMpXG4gICAqIC0gQVBJIEdhdGV3YXkgb3IgTGFtYmRhIFVSTCBtb2RlXG4gICAqIC0gQ3VzdG9tIGRvbWFpbiBjb25maWd1cmF0aW9uXG4gICAqIC0gUmVhY3QgZW50cnkgcG9pbnQgZm9yIFNTUiBMYW1iZGFcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgSW5mcmFPcHRpb25zfSBmb3IgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW5mcmE6IHtcbiAgICogICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICogICBzdGFnZTogJ2RldicsXG4gICAqICAgcmVhY3RFbnRyeTogJy4vc3JjL2luZGV4LnRzeCcsXG4gICAqICAgYXBpTW9kZTogJ2FwaUdhdGV3YXknLFxuICAgKiAgIGxhbWJkYU1lbW9yeVNpemU6IDEwMjQsXG4gICAqICAgbGFtYmRhVGltZW91dDogMzAsXG4gICAqICAgZG9tYWluOiB7XG4gICAqICAgICByb290RG9tYWluOiAnbXlhcHAuY29tJyxcbiAgICogICAgIHN1YmRvbWFpbjogJ2FwaSdcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBpbmZyYT86IEluZnJhT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUeXBlLXNhZmUgUHVyZW5vdyBjb25maWd1cmF0aW9uIHdpdGggaW5mZXJyZWQgc2VydmljZSBuYW1lcy5cbiAqXG4gKiBUaGlzIHR5cGUgcHJvdmlkZXMgUnVudGltZSBDb3JlIHR5cGUgc2FmZXR5IGJ5IGluZmVycmluZyBzZXJ2aWNlIG5hbWVzIGZyb20gdGhlIHJlZ2lzdGVyXG4gKiBjb25maWd1cmF0aW9uLCBlbmFibGluZyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbiBvZiBzZXJ2aWNlIHJlZmVyZW5jZXMuXG4gKlxuICogQHRlbXBsYXRlIFRSZWdpc3RlciAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIHR5cGVcbiAqL1xuZXhwb3J0IHR5cGUgVHlwZVNhZmVQdXJlbm93Q29uZmlnPFRSZWdpc3RlciBleHRlbmRzIFJlY29yZDxzdHJpbmcsIE1pY3Jvc2VydmljZURlZmluaXRpb24+PiA9XG4gIFJ1bnRpbWVXZWJDb25maWc8VFJlZ2lzdGVyPiAmIHtcbiAgLyoqXG4gICAqIFR5cGUtc2FmZSBzZXJ2aWNlIG5hbWVzIGRlcml2ZWQgZnJvbSByZWdpc3RlciBrZXlzLlxuICAgKiBBdmFpbGFibGUgYXQgY29tcGlsZS10aW1lIGZvciB0eXBlIGNoZWNraW5nIGFuZCBJREUgYXV0b2NvbXBsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWVzPzogU2VydmljZU5hbWVzPFRSZWdpc3Rlcj47XG5cbiAgLyoqXG4gICAqIFR5cGUtc2FmZSBMYW1iZGEgSURzIGRlcml2ZWQgZnJvbSByZWdpc3RlciBjb25maWd1cmF0aW9uLlxuICAgKiBBdmFpbGFibGUgYXQgY29tcGlsZS10aW1lIGZvciB0eXBlIGNoZWNraW5nIGFuZCBJREUgYXV0b2NvbXBsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhSWRzPzogTGFtYmRhSWRzPFRSZWdpc3Rlcj47XG59O1xuIiwgIi8qXG4gKiBFbGFzdGljIExpY2Vuc2UgMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiB3b3JrdGlmLnB1cmVub3cuY2RrIDx3b3JrdGlmX3B1cmVub3dfY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9saWNlbnNpbmcvZWxhc3RpYy1saWNlbnNlIGZvciBkZXRhaWxzLlxuICpcbiAqIFJlLWxpY2Vuc2luZyBub3RpY2U6XG4gKiAgIFRoaXMgZmlsZSB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQnVzaW5lc3MgU291cmNlIExpY2Vuc2UgMS4xIChCVVNMLTEuMSkuXG4gKiAgIEFzIG9mIDIwMjUtMDktMjIsIGl0IGlzIHJlLWxpY2Vuc2VkIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdW50aW1lV2ViQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBwdXJlbm93LCBQdXJlbm93Um91dGUsIHB1cmVub3dSb3V0ZXIsIFB1cmVub3dSb3V0ZXJEZWZhdWx0cyB9IGZyb20gJ0B3b3JrdGlmL3B1cmVub3cnO1xuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlscy5cbiAqIEZvbGxvd3MgcHVyZW5vdyBlcnJvciBwYXR0ZXJucyB3aXRob3V0IGVtb2ppLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcyAqL1xuICByZWFkb25seSBlcnJvcnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGVycm9yczogc3RyaW5nW10pIHtcbiAgICBzdXBlcihgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDpcXG4ke2Vycm9ycy5tYXAoZSA9PiBgICAtICR7ZX1gKS5qb2luKCdcXG4nKX1gKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29uZmlnVmFsaWRhdGlvbkVycm9yJztcbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGVudmlyb25tZW50IGRldGVjdGlvbiBmYWlscy5cbiAqIEZvbGxvd3MgcHVyZW5vdyBlcnJvciBwYXR0ZXJucyB3aXRob3V0IGVtb2ppLlxuICovXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0Vudmlyb25tZW50RGV0ZWN0aW9uRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IHRoZSBjdXJyZW50IHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKiBUaGlzIGlzIGEgbGlnaHR3ZWlnaHQgZGV0ZWN0aW9uIHRoYXQgd29ya3MgaW4gYWxsIGVudmlyb25tZW50cy5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0RW52aXJvbm1lbnQoKTogJ2Jyb3dzZXInIHwgJ2xhbWJkYScgfCAnY2RrJyB7XG4gIC8vIEJyb3dzZXIgZGV0ZWN0aW9uXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAnYnJvd3Nlcic7XG4gIH1cblxuICAvLyBMYW1iZGEgZGV0ZWN0aW9uXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnY/LkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSkge1xuICAgIHJldHVybiAnbGFtYmRhJztcbiAgfVxuXG4gIC8vIENESyBkZXRlY3Rpb25cbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChwcm9jZXNzLmVudj8uUFVSRU5PV19NT0RFID09PSAnY2RrJykge1xuICAgICAgcmV0dXJuICdjZGsnO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnY/LkNES19ERUZBVUxUX0FDQ09VTlQgfHwgcHJvY2Vzcy5lbnY/LkNES19ERUZBVUxUX1JFR0lPTikge1xuICAgICAgcmV0dXJuICdjZGsnO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5hcmd2Py5zb21lKGFyZyA9PiBhcmcuaW5jbHVkZXMoJ2NkaycpIHx8IGFyZy5pbmNsdWRlcygnc3ludGgnKSkpIHtcbiAgICAgIHJldHVybiAnY2RrJztcbiAgICB9XG4gIH1cblxuICAvLyBEZWZhdWx0IHRvIENESyBmb3IgTm9kZS5qcyBlbnZpcm9ubWVudHMgKGJ1aWxkIHRpbWUpXG4gIHJldHVybiAnY2RrJztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQuXG4gKiBMaWdodHdlaWdodCB2YWxpZGF0aW9uIHRoYXQgd29ya3MgaW4gYWxsIGVudmlyb25tZW50cy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb25maWcoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnLCBpc0NES0NvbnRleHQ6IGJvb2xlYW4pOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gU2VydmljZSBuYW1lIHZhbGlkYXRpb25cbiAgaWYgKCFjb25maWcuc2VydmljZU5hbWUgfHwgIS9eW2EtekEtWl1bYS16QS1aMC05LV17MCwxMjd9JC8udGVzdChjb25maWcuc2VydmljZU5hbWUpKSB7XG4gICAgZXJyb3JzLnB1c2goJ3NlcnZpY2VOYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCBhbmQgYmUgbWF4IDEyOCBjaGFyYWN0ZXJzJyk7XG4gIH1cblxuICAvLyBTdGFnZSB2YWxpZGF0aW9uXG4gIGlmICghWydkZXYnLCAnc3RhZ2luZycsICdwcm9kJ10uaW5jbHVkZXMoY29uZmlnLnN0YWdlKSkge1xuICAgIGVycm9ycy5wdXNoKCdzdGFnZSBtdXN0IGJlIG9uZSBvZjogZGV2LCBzdGFnaW5nLCBwcm9kJyk7XG4gIH1cblxuICAvLyBJbmZyYSB2YWxpZGF0aW9uIGZvciBDREsgY29udGV4dFxuICBpZiAoaXNDREtDb250ZXh0ICYmICFjb25maWcuaW5mcmEpIHtcbiAgICBlcnJvcnMucHVzaCgnaW5mcmEgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCBpbiBDREsgY29udGV4dCcpO1xuICB9XG5cbiAgcmV0dXJuIHsgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsIGVycm9ycyB9O1xufVxuXG4vKipcbiAqIFVuaWZpZWQgZW50cnkgcG9pbnQgZm9yIFJ1bnRpbWUgVGFyZ2V0IENvcmUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHNpbmdsZSBBUEkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGV4ZWN1dGlvbiBjb250ZXh0czpcbiAqIC0gKipCcm93c2VyKio6IEh5ZHJhdGVzIFJlYWN0IGFwcGxpY2F0aW9uIHdpdGggY2xpZW50LXNpZGUgcm91dGluZ1xuICogLSAqKkxhbWJkYSoqOiBFeGVjdXRlcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgYW5kIGJ1c2luZXNzIGxvZ2ljIHdpdGggRElcbiAqIC0gKipDREsqKjogU3ludGhlc2l6ZXMgQ2xvdWRGb3JtYXRpb24gaW5mcmFzdHJ1Y3R1cmUgdGVtcGxhdGVzXG4gKlxuICogVGhlIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBhbmQgcm91dGVzXG4gKiBleGVjdXRpb24gdG8gdGhlIGFwcHJvcHJpYXRlIHBpcGVsaW5lIHdpdGhvdXQgdXNlciBpbnRlcnZlbnRpb24uXG4gKlxuICogKipOb3RlKio6IEZvciBMYW1iZGEgYW5kIENESyBjb250ZXh0cywgdXNlIHRoZSBzZXJ2ZXItc2lkZSBlbnRyeSBwb2ludFxuICogZnJvbSBgQGNvcmUvcnVudGltZS13ZWJgIGluc3RlYWQuIFRoaXMgYnJvd3Nlci1jb21wYXRpYmxlIHZlcnNpb25cbiAqIG9ubHkgc3VwcG9ydHMgYnJvd3NlciBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFVuaWZpZWQgY29uZmlndXJhdGlvbiBmb3IgYWxsIGNvbnRleHRzXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBleGVjdXRpb24gY29tcGxldGVzXG4gKiBAdGhyb3dzIENvbmZpZ1ZhbGlkYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIGludmFsaWRcbiAqIEB0aHJvd3MgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvciBpZiBlbnZpcm9ubWVudCBjYW5ub3QgYmUgZGV0ZWN0ZWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgZXhlY3V0aW9uIGZhaWxzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHB1cmVub3cgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93L3J1bnRpbWUtd2ViJztcbiAqIGltcG9ydCB7IFB1cmVub3dSb3V0ZXIgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcbiAqXG4gKiBwdXJlbm93KHtcbiAqICAgYXBwOiAoeyByb3V0ZXIgfSkgPT4gPEFwcCByb3V0ZXI9e3JvdXRlcn0gLz4sXG4gKiAgIHJvdXRlcjogbmV3IFB1cmVub3dSb3V0ZXIoeyByb3V0ZXMsIGRlZmF1bHRzOiB7fSB9KSxcbiAqICAgc2VydmljZU5hbWU6ICdteS1hcHAnLFxuICogICBzdGFnZTogJ2RldicsXG4gKiAgIHJlZ2lzdGVyOiB7XG4gKiAgICAgcGF5bWVudHM6IHtcbiAqICAgICAgIHRpZXM6IFtQYXltZW50c1RpZXNdLFxuICogICAgICAgbGFtYmRhczogW2NoYXJnZUhhbmRsZXIsIHJlZnVuZEhhbmRsZXJdXG4gKiAgICAgfVxuICogICB9LFxuICogICBpbmZyYToge1xuICogICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICogICAgIHN0YWdlOiAnZGV2JyxcbiAqICAgICByZWFjdEVudHJ5OiAnLi9zcmMvaW5kZXgudHN4JyxcbiAqICAgICBhcGlNb2RlOiAnYXBpR2F0ZXdheSdcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1cmV3ZWIoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnKTogdm9pZCB7XG4gIC8vIDEuIERldGVjdCBydW50aW1lIGVudmlyb25tZW50IHVzaW5nIGxpZ2h0d2VpZ2h0IGRldGVjdGlvblxuICBjb25zdCBlbnZUeXBlID0gZGV0ZWN0RW52aXJvbm1lbnQoKTtcbiAgY29uc3QgaXNDREtDb250ZXh0ID0gZW52VHlwZSA9PT0gJ2Nkayc7XG5cbiAgLy8gMi4gVmFsaWRhdGUgY29uZmlndXJhdGlvblxuICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVDb25maWcoY29uZmlnLCBpc0NES0NvbnRleHQpO1xuXG4gIGlmICghdmFsaWRhdGlvblJlc3VsdC52YWxpZCkge1xuICAgIHRocm93IG5ldyBDb25maWdWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvblJlc3VsdC5lcnJvcnMpO1xuICB9XG5cbiAgLy8gMy4gUm91dGUgdG8gYXBwcm9wcmlhdGUgcGlwZWxpbmUgYmFzZWQgb24gZW52aXJvbm1lbnRcbiAgc3dpdGNoIChlbnZUeXBlKSB7XG4gICAgY2FzZSAnYnJvd3Nlcic6IHtcbiAgICAgIC8vIEJyb3dzZXIgcGlwZWxpbmUgLSBoeWRyYXRlIFJlYWN0IGFwcFxuICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSBwYXRoIHRoYXQgcnVucyBpbiB0aGUgYnJvd3NlclxuICAgICAgcHVyZW5vdyh7XG4gICAgICAgIGFwcDogKHsgcm91dGVyIH0pID0+IGNvbmZpZy5hcHAoeyByb3V0ZXIgfSksXG4gICAgICAgIHJvdXRlcjogcHVyZW5vd1JvdXRlcih7XG4gICAgICAgICAgcm91dGVyOiBjb25maWcucm91dGVyLmdldFJvdXRlcygpIGFzIFB1cmVub3dSb3V0ZVtdLFxuICAgICAgICAgIGRlZmF1bHRzOiBjb25maWcucm91dGVyLmRlZmF1bHRzIGFzIFB1cmVub3dSb3V0ZXJEZWZhdWx0cyxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIHNlcnZpY2VOYW1lOiBjb25maWcuc2VydmljZU5hbWUsXG4gICAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnbGFtYmRhJzpcbiAgICBjYXNlICdjZGsnOiB7XG4gICAgICAvLyBMYW1iZGEgYW5kIENESyBwaXBlbGluZXMgcmVxdWlyZSBzZXJ2ZXItc2lkZSBjb2RlXG4gICAgICAvLyBUaGVzZSBzaG91bGQgdXNlIHRoZSBzZXJ2ZXItc2lkZSBlbnRyeSBwb2ludCBmcm9tIEBjb3JlL3J1bnRpbWUtd2ViXG4gICAgICBjb25zb2xlLmxvZygnW1J1bnRpbWVdIFNlcnZlci1zaWRlIHBpcGVsaW5lIGRldGVjdGVkICglcyknLCBlbnZUeXBlKTtcbiAgICAgIHB1cmVub3coe1xuICAgICAgICBhcHA6ICh7IHJvdXRlciB9KSA9PiBjb25maWcuYXBwKHsgcm91dGVyIH0pLFxuICAgICAgICByb3V0ZXI6IHB1cmVub3dSb3V0ZXIoe1xuICAgICAgICAgIHJvdXRlcjogY29uZmlnLnJvdXRlci5nZXRSb3V0ZXMoKSBhcyBQdXJlbm93Um91dGVbXSxcbiAgICAgICAgICBkZWZhdWx0czogY29uZmlnLnJvdXRlci5kZWZhdWx0cyBhcyBQdXJlbm93Um91dGVyRGVmYXVsdHMsXG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHN0YWdlOiBjb25maWcuc3RhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgICAgLy8gY29uc29sZS5sb2coJ1tSdW50aW1lIFdlYl0gTGFtYmRhIHJ1bnRpbWUgZGV0ZWN0ZWQsIHNraXBwaW5nIGJyb3dzZXIgcmVuZGVyaW5nIHBpcGVsaW5lJyk7XG4gICAgICAvLyB0aHJvdyBuZXcgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvcihcbiAgICAgIC8vICAgYFNlcnZlci1zaWRlIGVudmlyb25tZW50IGRldGVjdGVkICgke2VudlR5cGV9KS4gYCArXG4gICAgICAvLyAgIGBVc2UgdGhlIHNlcnZlci1zaWRlIGVudHJ5IHBvaW50IGZyb20gJ0Bjb3JlL3J1bnRpbWUtd2ViJyBmb3IgTGFtYmRhIGFuZCBDREsgY29udGV4dHMuYCxcbiAgICAgIC8vICk7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUubG9nKCdbUnVudGltZSBXZWJdIFVua25vd24gZW52aXJvbm1lbnQgdHlwZTogJXMnLCBlbnZUeXBlKTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIHRocm93IG5ldyBFbnZpcm9ubWVudERldGVjdGlvbkVycm9yKFxuICAgIC8vICAgYFVua25vd24gZW52aXJvbm1lbnQgdHlwZTogJHtlbnZUeXBlfWAsXG4gICAgLy8gKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIGJyb3dzZXIgcGlwZWxpbmUgZm9yIFJlYWN0IGh5ZHJhdGlvbi5cbiAqIFRoaXMgaXMgYnJvd3Nlci1zYWZlIGNvZGUgdGhhdCBkb2Vzbid0IGltcG9ydCBmcm9tIEBjb3JlLy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUJyb3dzZXJQaXBlbGluZShjb25maWc6IFJ1bnRpbWVXZWJDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gRW5zdXJlIHdlJ3JlIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudFxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvcignQnJvd3NlciBlbnZpcm9ubWVudCByZXF1aXJlZCBmb3IgYnJvd3NlciBwaXBlbGluZScpO1xuICB9XG5cbiAgLy8gSW1wb3J0IFJlYWN0IERPTSBmb3IgaHlkcmF0aW9uXG4gIGNvbnN0IHsgaHlkcmF0ZVJvb3QsIGNyZWF0ZVJvb3QgfSA9IGF3YWl0IGltcG9ydCgncmVhY3QtZG9tL2NsaWVudCcpO1xuICBjb25zdCB7IGNyZWF0ZUJyb3dzZXJSb3V0ZXIgfSA9IGF3YWl0IGltcG9ydCgncmVhY3Qtcm91dGVyJyk7XG4gIGNvbnN0IFJlYWN0ID0gYXdhaXQgaW1wb3J0KCdyZWFjdCcpO1xuXG4gIC8vIEdldCBET00gZWxlbWVudHNcbiAgY29uc3Qgcm9vdFB1cmVub3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdC1wdXJlbm93Jyk7XG4gIGNvbnN0IHJvb3RJbnRlcm5hbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290LWludGVybmFsJyk7XG5cbiAgLy8gRGV0ZXJtaW5lIHdoaWNoIHJvb3QgZWxlbWVudCB0byB1c2VcbiAgY29uc3Qgcm9vdEVsZW1lbnQgPSByb290UHVyZW5vdyB8fCByb290SW50ZXJuYWw7XG5cbiAgaWYgKCFyb290RWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdbUnVudGltZV0gUm9vdCBlbGVtZW50IG5vdCBmb3VuZC4gJyArXG4gICAgICAnRW5zdXJlIHlvdXIgSFRNTCBpbmNsdWRlcyA8ZGl2IGlkPVwicm9vdC1wdXJlbm93XCI+PC9kaXY+IG9yIDxkaXYgaWQ9XCJyb290LWludGVybmFsXCI+PC9kaXY+JyxcbiAgICApO1xuICB9XG5cbiAgLy8gR2V0IHJvdXRlcyBmcm9tIHRoZSByb3V0ZXIgLSB1c2Ugcm91dGVzIHByb3BlcnR5IG9yIGdldFJvdXRlcyBtZXRob2RcbiAgY29uc3Qgcm91dGVzID0gY29uZmlnLnJvdXRlci5yb3V0ZXMgfHwgKGNvbmZpZy5yb3V0ZXIgYXMgYW55KS5nZXRSb3V0ZXM/LigpIHx8IFtdO1xuXG4gIC8vIENyZWF0ZSBicm93c2VyIHJvdXRlciAtIGNhc3Qgcm91dGVzIHRvIGFueSB0byBhdm9pZCB0eXBlIGlzc3VlcyB3aXRoIGRpZmZlcmVudCByZWFjdC1yb3V0ZXIgdmVyc2lvbnNcbiAgY29uc3QgYnJvd3NlclJvdXRlciA9IGNyZWF0ZUJyb3dzZXJSb3V0ZXIocm91dGVzIGFzIGFueSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBhcHAgZWxlbWVudCAtIHBhc3MgdGhlIGJyb3dzZXIgcm91dGVyXG4gIGNvbnN0IEFwcEVsZW1lbnQgPSBjb25maWcuYXBwKHsgcm91dGVyOiBicm93c2VyUm91dGVyIGFzIGFueSB9KTtcblxuICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgaHlkcmF0ZSAoU1NSIEhUTUwgZXhpc3RzKSBvciByZW5kZXIgZnJlc2hcbiAgaWYgKHJvb3RQdXJlbm93Py5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAvLyBIeWRyYXRlIFNTUiBIVE1MXG4gICAgY29uc29sZS5sb2coJ1tSdW50aW1lXSBIeWRyYXRpbmcgU1NSIEhUTUwuLi4nKTtcbiAgICBoeWRyYXRlUm9vdChyb290RWxlbWVudCwgUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5TdHJpY3RNb2RlLCBudWxsLCBBcHBFbGVtZW50KSk7XG4gICAgY29uc29sZS5sb2coJ1tSdW50aW1lXSBIeWRyYXRpb24gY29tcGxldGUnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGcmVzaCByZW5kZXJcbiAgICBjb25zb2xlLmxvZygnW1J1bnRpbWVdIENyZWF0aW5nIGZyZXNoIFJlYWN0IHJvb3QuLi4nKTtcbiAgICBjb25zdCByb290ID0gY3JlYXRlUm9vdChyb290RWxlbWVudCk7XG4gICAgcm9vdC5yZW5kZXIoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5TdHJpY3RNb2RlLCBudWxsLCBBcHBFbGVtZW50KSk7XG4gICAgY29uc29sZS5sb2coJ1tSdW50aW1lXSBSZW5kZXIgY29tcGxldGUnKTtcbiAgfVxufVxuIiwgIi8qXG4gKiBFbGFzdGljIExpY2Vuc2UgMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiB3b3JrdGlmLnB1cmVub3cuY2RrIDx3b3JrdGlmX3B1cmVub3dfY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9saWNlbnNpbmcvZWxhc3RpYy1saWNlbnNlIGZvciBkZXRhaWxzLlxuICpcbiAqIFJlLWxpY2Vuc2luZyBub3RpY2U6XG4gKiAgIFRoaXMgZmlsZSB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQnVzaW5lc3MgU291cmNlIExpY2Vuc2UgMS4xIChCVVNMLTEuMSkuXG4gKiAgIEFzIG9mIDIwMjUtMDktMjIsIGl0IGlzIHJlLWxpY2Vuc2VkIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQdXJlbm93Q29uZmlnIH0gZnJvbSAnQHdvcmt0aWYvcHVyZW5vdyc7XG5cbi8qKlxuICogUnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHRoYXQgZXh0ZW5kcyBQdXJlbm93Q29uZmlnLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIGFkZHMgcnVudGltZSB3b3Jrc3BhY2UgZnVuY3Rpb25hbGl0eSB3aGlsZSBwcmVzZXJ2aW5nXG4gKiBhbGwgZXhpc3RpbmcgcHVyZW5vdyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb25cbiAqIGlzIG1lcmdlZCB3aXRoIHB1cmVub3cgY29uZmlndXJhdGlvbiByYXRoZXIgdGhhbiByZXBsYWNpbmcgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZUNvbmZpZyBleHRlbmRzIFB1cmVub3dDb25maWcge1xuICAvKipcbiAgICogUnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAqIFRoZXNlIHNldHRpbmdzIGV4dGVuZCBwdXJlbm93IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCByZXBsYWNpbmcgaXQuXG4gICAqL1xuICBydW50aW1lPzoge1xuICAgIC8qKiBFbmFibGUgUnVudGltZSBDb3JlIHN0YWNrIGRlcGxveW1lbnQgKGV4dGVuZHMgcHVyZW5vdydzIHR3by1zdGFjayBhcmNoaXRlY3R1cmUpICovXG4gICAgZW5hYmxlVGhpcmRTdGFjaz86IGJvb2xlYW47XG5cbiAgICAvKiogUnVudGltZSB3ZWIgbW9kZSBjb25maWd1cmF0aW9uICovXG4gICAgcnVudGltZVdlYk1vZGU/OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG4gICAgLyoqIEFkZGl0aW9uYWwgcnVudGltZSBmZWF0dXJlcyB0byBlbmFibGUgKi9cbiAgICBhZGRpdGlvbmFsRmVhdHVyZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKiBEZXZlbG9wbWVudCBzZXJ2ZXIgZW5oYW5jZW1lbnRzICovXG4gICAgZGV2U2VydmVyRW5oYW5jZW1lbnRzPzoge1xuICAgICAgLyoqIEVuYWJsZSBob3QgbW9kdWxlIHJlcGxhY2VtZW50ICovXG4gICAgICBob3RSZWxvYWQ/OiBib29sZWFuO1xuICAgICAgLyoqIEVuYWJsZSBkZWJ1ZyBtb2RlIHdpdGggYWRkaXRpb25hbCBsb2dnaW5nICovXG4gICAgICBkZWJ1Z01vZGU/OiBib29sZWFuO1xuICAgICAgLyoqIEVuYWJsZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nICovXG4gICAgICBwZXJmb3JtYW5jZU1vbml0b3Jpbmc/OiBib29sZWFuO1xuICAgIH07XG5cbiAgICAvKiogQnVpbGQgb3B0aW1pemF0aW9ucyAqL1xuICAgIGJ1aWxkT3B0aW1pemF0aW9ucz86IHtcbiAgICAgIC8qKiBFbmFibGUgYnVuZGxlIGFuYWx5c2lzICovXG4gICAgICBidW5kbGVBbmFseXNpcz86IGJvb2xlYW47XG4gICAgICAvKiogRW5hYmxlIHRyZWUgc2hha2luZyAqL1xuICAgICAgdHJlZXNoYWtpbmc/OiBib29sZWFuO1xuICAgICAgLyoqIEVuYWJsZSBjb2RlIG1pbmlmaWNhdGlvbiAqL1xuICAgICAgY29kZU1pbmlmaWNhdGlvbj86IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG1lcmdpbmcgdXRpbGl0eSB0aGF0IHByZXNlcnZlcyBhbGwgcHVyZW5vdyBzZXR0aW5nc1xuICogd2hpbGUgYWRkaW5nIHJ1bnRpbWUtc3BlY2lmaWMgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0gcHVyZW5vd0NvbmZpZyAtIEJhc2UgcHVyZW5vdyBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gcnVudGltZUNvbmZpZyAtIFJ1bnRpbWUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0byBtZXJnZVxuICogQHJldHVybnMgTWVyZ2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBhbGwgcHVyZW5vdyBzZXR0aW5ncyBwcmVzZXJ2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlUnVudGltZUNvbmZpZyhcbiAgcHVyZW5vd0NvbmZpZzogUHVyZW5vd0NvbmZpZyxcbiAgcnVudGltZUNvbmZpZz86IFBhcnRpYWw8UnVudGltZUNvbmZpZ1sncnVudGltZSddPixcbik6IFJ1bnRpbWVDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLnB1cmVub3dDb25maWcsXG4gICAgcnVudGltZToge1xuICAgICAgZW5hYmxlVGhpcmRTdGFjazogZmFsc2UsXG4gICAgICBydW50aW1lV2ViTW9kZTogJ2RldmVsb3BtZW50JyxcbiAgICAgIGFkZGl0aW9uYWxGZWF0dXJlczogW10sXG5cbiAgICAgIC8vIEB0b2RvOiBjcml0aWFsIHRvIGltcHJvdmUgdGhpcyBzb2x1dGlvbi4gT3RoZXJ3aXNlIFx1MjAxMz4gVU5ORUNFU1NBUlkgT1BUSU9OUyBUT1RBTExZXG4gICAgICBkZXZTZXJ2ZXJFbmhhbmNlbWVudHM6IHtcbiAgICAgICAgaG90UmVsb2FkOiB0cnVlLFxuICAgICAgICBkZWJ1Z01vZGU6IGZhbHNlLFxuICAgICAgICBwZXJmb3JtYW5jZU1vbml0b3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGJ1aWxkT3B0aW1pemF0aW9uczoge1xuICAgICAgICBidW5kbGVBbmFseXNpczogZmFsc2UsXG4gICAgICAgIHRyZWVzaGFraW5nOiB0cnVlLFxuICAgICAgICBjb2RlTWluaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIC4uLnJ1bnRpbWVDb25maWcsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgY29uZmlndXJhdGlvbiBpcyBhIFJ1bnRpbWVDb25maWcuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIHJ1bnRpbWUtc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSdW50aW1lQ29uZmlnKGNvbmZpZzogYW55KTogY29uZmlnIGlzIFJ1bnRpbWVDb25maWcge1xuICByZXR1cm4gISEoY29uZmlnICYmIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmICdydW50aW1lJyBpbiBjb25maWcpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZyb20gYSBSdW50aW1lQ29uZmlnLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBSdW50aW1lQ29uZmlnIHRvIGV4dHJhY3QgZnJvbVxuICogQHJldHVybnMgUnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJ1bnRpbWVDb25maWcoY29uZmlnOiBSdW50aW1lQ29uZmlnKTogUnVudGltZUNvbmZpZ1sncnVudGltZSddIHtcbiAgcmV0dXJuIGNvbmZpZy5ydW50aW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIFJ1bnRpbWVDb25maWcgZnJvbSBhIGJhc2UgUHVyZW5vd0NvbmZpZyB3aXRoIGRlZmF1bHQgcnVudGltZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gcHVyZW5vd0NvbmZpZyAtIEJhc2UgcHVyZW5vdyBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSdW50aW1lQ29uZmlnIHdpdGggZGVmYXVsdCBydW50aW1lIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW50aW1lQ29uZmlnKHB1cmVub3dDb25maWc6IFB1cmVub3dDb25maWcpOiBSdW50aW1lQ29uZmlnIHtcbiAgcmV0dXJuIG1lcmdlUnVudGltZUNvbmZpZyhwdXJlbm93Q29uZmlnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6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Q0FBZ0RHLENBQU8sS0FDbkUsV0FBUSxDQUNOLElBQUssQ0FBQyxDQUFFLE9BQUFFLENBQU8sSUFBTUwsRUFBTyxJQUFJLENBQUUsT0FBQUssQ0FBTyxDQUFDLEVBQzFDLFVBQVEsaUJBQWMsQ0FDcEIsT0FBUUwsRUFBTyxPQUFPLFVBQVUsRUFDaEMsU0FBVUEsRUFBTyxPQUFPLFFBQzFCLENBQUMsRUFDRCxPQUFRLENBQ04sWUFBYUEsRUFBTyxZQUNwQixNQUFPQSxFQUFPLEtBQ2hCLENBQ0YsQ0FBQyxFQUNELEtBTUYsQ0FFQSxRQUNFLFFBQVEsSUFBSSw2Q0FBOENHLENBQU8sRUFDakUsS0FJSixDQUNGLENDOUlPLFNBQVNHLEVBQ2RDLEVBQ0FDLEVBQ2UsQ0FDZixNQUFPLENBQ0wsR0FBR0QsRUFDSCxRQUFTLENBQ1AsaUJBQWtCLEdBQ2xCLGVBQWdCLGNBQ2hCLG1CQUFvQixDQUFDLEVBR3JCLHNCQUF1QixDQUNyQixVQUFXLEdBQ1gsVUFBVyxHQUNYLHNCQUF1QixFQUN6QixFQUNBLG1CQUFvQixDQUNsQixlQUFnQixHQUNoQixZQUFhLEdBQ2IsaUJBQWtCLEVBQ3BCLEVBQ0EsR0FBR0MsQ0FDTCxDQUNGLENBQ0YsQ0FRTyxTQUFTQyxFQUFnQkMsRUFBc0MsQ0FDcEUsTUFBTyxDQUFDLEVBQUVBLEdBQVUsT0FBT0EsR0FBVyxVQUFZLFlBQWFBLEVBQ2pFLENBUU8sU0FBU0MsRUFBcUJELEVBQWlELENBQ3BGLE9BQU9BLEVBQU8sT0FDaEIsQ0FRTyxTQUFTRSxFQUFvQkwsRUFBNkMsQ0FDL0UsT0FBT0QsRUFBbUJDLENBQWEsQ0FDekMiLAogICJuYW1lcyI6IFsiaW5kZXhfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJCcm93c2VyUGlwZWxpbmUiLCAiQ29uZmlnVmFsaWRhdGlvbkVycm9yIiwgIkVudmlyb25tZW50RGV0ZWN0aW9uRXJyb3IiLCAiY3JlYXRlUnVudGltZUNvbmZpZyIsICJleHRyYWN0UnVudGltZUNvbmZpZyIsICJpc1J1bnRpbWVDb25maWciLCAiaXNWYWxpZFNlcnZpY2VOYW1lIiwgIm1lcmdlUnVudGltZUNvbmZpZyIsICJwdXJld2ViIiwgIl9fdG9Db21tb25KUyIsICJfX3JlRXhwb3J0IiwgIlJlYWN0IiwgImltcG9ydF9jbGllbnQiLCAiaW1wb3J0X3JlYWN0X3JvdXRlciIsICJCcm93c2VyUGlwZWxpbmUiLCAiY29uZmlnIiwgImNvbnRleHQiLCAiYnJvd3NlclJvdXRlciIsICJhcHBFbGVtZW50IiwgInJvdXRlclByb3ZpZGVyIiwgImVycm9yIiwgInJvdXRlcyIsICJjb250YWluZXIiLCAiYmFzZVVybCIsICJzdGFnZSIsICJpc1ZhbGlkU2VydmljZU5hbWUiLCAic2VydmljZU5hbWUiLCAiaW1wb3J0X3B1cmVub3ciLCAiQ29uZmlnVmFsaWRhdGlvbkVycm9yIiwgImVycm9ycyIsICJFbnZpcm9ubWVudERldGVjdGlvbkVycm9yIiwgIm1lc3NhZ2UiLCAiZGV0ZWN0RW52aXJvbm1lbnQiLCAiYXJnIiwgInZhbGlkYXRlQ29uZmlnIiwgImNvbmZpZyIsICJpc0NES0NvbnRleHQiLCAicHVyZXdlYiIsICJlbnZUeXBlIiwgInZhbGlkYXRpb25SZXN1bHQiLCAicm91dGVyIiwgIm1lcmdlUnVudGltZUNvbmZpZyIsICJwdXJlbm93Q29uZmlnIiwgInJ1bnRpbWVDb25maWciLCAiaXNSdW50aW1lQ29uZmlnIiwgImNvbmZpZyIsICJleHRyYWN0UnVudGltZUNvbmZpZyIsICJjcmVhdGVSdW50aW1lQ29uZmlnIl0KfQo=
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzeCIsICIuLi8uLi8uLi9zcmMvbGliL3J1bnRpbWUtd2ViL3BpcGVsaW5lcy9icm93c2VyLXBpcGVsaW5lLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS13ZWIvdHlwZXMvY29uZmlnLnR5cGVzLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS13ZWIvcHVyZXdlYi50cyIsICIuLi8uLi8uLi9zcmMvbGliL3J1bnRpbWUtd2ViL3J1bnRpbWUuY29uZmlnLnR5cGVzLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zZWQgdW5kZXIgRWxhc3RpYyBMaWNlbnNlIDIuMC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRWxhc3RpYy0yLjBcbiAqL1xuXG4vLyBSZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHRoZSBiYXNlIFB1cmVub3cgZnJhbWV3b3JrXG5leHBvcnQgKiBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcblxuLy8gRXhwb3J0IHJ1bnRpbWUtd2ViIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHlcbmV4cG9ydCAqIGZyb20gJy4vbGliL3J1bnRpbWUtd2ViJztcblxuLy8gRXhwb3J0IHJ1bnRpbWUgY29uZmlndXJhdGlvbiB0eXBlcyBhbmQgdXRpbGl0aWVzXG4vLyBleHBvcnQgKiBmcm9tICcuL3V0aWxzJztcblxuXG4vLyBSZS1leHBvcnQgcHVyZW5vdyBiaW4gZnVuY3Rpb25hbGl0eVxuLy8gZXhwb3J0ICogZnJvbSAnQHdvcmt0aWYvcHVyZW5vdyc7XG4iLCAiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zaW5nIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHlkcmF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyTWV0YWRhdGEsIFJ1bnRpbWVXZWJDb25maWcgfSBmcm9tICdAbGliL3J1bnRpbWUtd2ViL3R5cGVzJztcblxuLy8gaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHdvcmt0aWYvdXRpbHMnO1xuXG4vKipcbiAqIEJyb3dzZXIgZXhlY3V0aW9uIHBpcGVsaW5lIGZvciBSdW50aW1lIFRhcmdldCBDb3JlLlxuICpcbiAqIEB0b2RvOiBvcmRpbmF0ZSB0aGlzIGNsYXNzIHRvIGluZnJhIG9yIGNvcmUgY2F1c2Ugd2UgaGF2ZSBOb2RlLmpzIHJlc3BvbnNpYmlsaXR5XG4gKiAgICAgIC0tLS0gT1IgXHUyMDEzPiBSRU1PVkUgTE9HR0VSXG4gKlxuICogKipBUkNISVRFQ1RVUkUgTk9URSoqOiBUaGlzIGZpbGUgaXMgaW4gYHNyYy9saWIvYCBiZWNhdXNlIGl0OlxuICogLSBVc2VzIGJyb3dzZXItb25seSBBUElzICh3aW5kb3csIGRvY3VtZW50LCBoeWRyYXRlUm9vdClcbiAqIC0gUnVucyBPTkxZIGluIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqIC0gTXVzdCBiZSBpc29tb3JwaGljLXNhZmUgKG5vIE5vZGUuanMgQVBJcylcbiAqIC0gTkVWRVIgcnVucyBpbiBMYW1iZGFcbiAqXG4gKiBIYW5kbGVzIGNsaWVudC1zaWRlIGh5ZHJhdGlvbiBvZiBSZWFjdCBhcHBsaWNhdGlvbnMgd2l0aCBwcmUtbG9hZGVkIGRhdGFcbiAqIGZyb20gc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBTZXRzIHVwIGNsaWVudC1zaWRlIHJvdXRpbmcgYW5kIEhUVFAgY2xpZW50XG4gKiBmb3IgcG9zdC1oeWRyYXRpb24gQVBJIGNhbGxzIHRvIExhbWJkYSBlbmRwb2ludHMuXG4gKlxuICogKipFeGVjdXRpb24gRmxvdyoqOlxuICogMS4gSHlkcmF0ZSBSZWFjdCBhcHAgd2l0aCBleGlzdGluZyBQdXJlbm93Um91dGVyXG4gKiAyLiBDYWxsIGNvbmZpZy5hcHAoeyByb3V0ZXIgfSkgdG8gZ2V0IFJlYWN0IGVsZW1lbnRcbiAqIDMuIEluaXRpYWxpemUgY2xpZW50LXNpZGUgbmF2aWdhdGlvblxuICogNC4gU2V0IHVwIEhUVFAgY2xpZW50IGZvciBMYW1iZGEgZW5kcG9pbnQgY2FsbHNcbiAqXG4gKiAqKlJlcXVpcmVtZW50cyoqOiBSRVEtMDYsIFJFUS0xMlxuICovXG5leHBvcnQgY2xhc3MgQnJvd3NlclBpcGVsaW5lIHtcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBsb2dnZXIoe1xuICAvLyAgIHNlcnZpY2VOYW1lOiAnQGxpYi9ydW50aW1lLXdlYi9waXBlbGluZXMvYnJvd3Nlci1waXBlbGluZScsXG4gIC8vIH0pO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGJyb3dzZXIgcGlwZWxpbmUgZm9yIGNsaWVudC1zaWRlIGh5ZHJhdGlvbi5cbiAgICpcbiAgICogSHlkcmF0ZXMgdGhlIFJlYWN0IGFwcGxpY2F0aW9uIHdpdGggcHJlLWxvYWRlZCBkYXRhIGZyb20gU1NSIGFuZCBzZXRzIHVwXG4gICAqIGNsaWVudC1zaWRlIHJvdXRpbmcuIFVzZXMgUmVhY3QgaHlkcmF0aW9uIChub3QgcmVuZGVyKSB0byBtYXRjaCB0aGVcbiAgICogc2VydmVyLXJlbmRlcmVkIEhUTUwgZXhhY3RseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIFB1cmVub3cgY29uZmlndXJhdGlvbiB3aXRoIGFwcCBmYWN0b3J5IGFuZCByb3V0ZXJcbiAgICogQHBhcmFtIGNvbnRleHQgLSBCcm93c2VyIGVudmlyb25tZW50IGNvbnRleHQgd2l0aCBtZXRhZGF0YVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBpcGVsaW5lID0gbmV3IEJyb3dzZXJQaXBlbGluZSgpO1xuICAgKiBhd2FpdCBwaXBlbGluZS5leGVjdXRlKGNvbmZpZywge1xuICAgKiAgIHR5cGU6ICdicm93c2VyJyxcbiAgICogICBtZXRhZGF0YToge1xuICAgKiAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgKiAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICogICAgIHZpZXdwb3J0OiB7IHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCwgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQgfVxuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShjb25maWc6IFJ1bnRpbWVXZWJDb25maWcsIGNvbnRleHQ6IHsgdHlwZTogJ2Jyb3dzZXInOyBtZXRhZGF0YTogQnJvd3Nlck1ldGFkYXRhIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKCdTdGFydGluZyBicm93c2VyIHBpcGVsaW5lIGV4ZWN1dGlvbicsIHtcbiAgICAgICAgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgICAgdXJsOiBjb250ZXh0Lm1ldGFkYXRhLnVybCxcbiAgICAgICAgdXNlckFnZW50OiBjb250ZXh0Lm1ldGFkYXRhLnVzZXJBZ2VudCxcbiAgICAgICAgdmlld3BvcnQ6IGNvbnRleHQubWV0YWRhdGEudmlld3BvcnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gMS4gQ3JlYXRlIGJyb3dzZXIgcm91dGVyIGZyb20gUHVyZW5vd1JvdXRlclxuICAgICAgY29uc3QgYnJvd3NlclJvdXRlciA9IHRoaXMuY3JlYXRlQnJvd3NlclJvdXRlcihjb25maWcpO1xuXG4gICAgICAvLyAyLiBHZXQgUmVhY3QgZWxlbWVudCBmcm9tIGFwcCBmYWN0b3J5XG4gICAgICBjb25zdCBhcHBFbGVtZW50ID0gdGhpcy5jcmVhdGVBcHBFbGVtZW50KGNvbmZpZyk7XG5cbiAgICAgIC8vIDMuIENyZWF0ZSByb3V0ZXIgcHJvdmlkZXIgd2l0aCB0aGUgYXBwXG4gICAgICBjb25zdCByb3V0ZXJQcm92aWRlciA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyUHJvdmlkZXIsIHtcbiAgICAgICAgcm91dGVyOiBicm93c2VyUm91dGVyLFxuICAgICAgfSwgYXBwRWxlbWVudCk7XG5cbiAgICAgIC8vIDQuIEh5ZHJhdGUgdGhlIGFwcGxpY2F0aW9uICh1c2UgaHlkcmF0aW9uLCBub3QgcmVuZGVyKVxuICAgICAgdGhpcy5oeWRyYXRlQXBwbGljYXRpb24ocm91dGVyUHJvdmlkZXIpO1xuXG4gICAgICAvLyA1LiBTZXQgdXAgSFRUUCBjbGllbnQgZm9yIHBvc3QtaHlkcmF0aW9uIEFQSSBjYWxsc1xuICAgICAgdGhpcy5zZXR1cEh0dHBDbGllbnQoY29uZmlnKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdCcm93c2VyIHBpcGVsaW5lIGV4ZWN1dGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQnJvd3NlciBwaXBlbGluZSBleGVjdXRpb24gZmFpbGVkJywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJyb3dzZXIgcm91dGVyIGZyb20gUHVyZW5vd1JvdXRlciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2VzIHRoZSBleGlzdGluZyBQdXJlbm93Um91dGVyIHRvIGdldCByb3V0ZXMgYW5kIGNyZWF0ZXMgYSBSZWFjdCBSb3V0ZXJcbiAgICogYnJvd3NlciByb3V0ZXIgZm9yIGNsaWVudC1zaWRlIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgQnJvd3NlciByb3V0ZXIgaW5zdGFuY2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQnJvd3NlclJvdXRlcihjb25maWc6IFJ1bnRpbWVXZWJDb25maWcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdDcmVhdGluZyBicm93c2VyIHJvdXRlcicsIHtcbiAgICAgIHJvdXRlQ291bnQ6IGNvbmZpZy5yb3V0ZXIuZ2V0Um91dGVzKCkubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgLy8gR2V0IHJvdXRlcyBmcm9tIFB1cmVub3dSb3V0ZXJcbiAgICBjb25zdCByb3V0ZXMgPSBjb25maWcucm91dGVyLmdldFJvdXRlcygpO1xuXG4gICAgLy8gQ3JlYXRlIGJyb3dzZXIgcm91dGVyIHdpdGggcm91dGVzIChjYXN0IHRvIFJvdXRlT2JqZWN0W10gZm9yIGNvbXBhdGliaWxpdHkpXG4gICAgY29uc3QgYnJvd3NlclJvdXRlciA9IGNyZWF0ZUJyb3dzZXJSb3V0ZXIocm91dGVzIGFzIGFueSk7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdCcm93c2VyIHJvdXRlciBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgIHJvdXRlQ291bnQ6IHJvdXRlcy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYnJvd3NlclJvdXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgUmVhY3QgZWxlbWVudCBmcm9tIGFwcCBmYWN0b3J5IGZ1bmN0aW9uLlxuICAgKlxuICAgKiBDYWxscyB0aGUgdXNlcidzIGFwcCBmYWN0b3J5IGZ1bmN0aW9uIHdpdGggdGhlIHJvdXRlciBkZXBlbmRlbmN5XG4gICAqIHRvIGdldCB0aGUgcm9vdCBSZWFjdCBlbGVtZW50IGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUm9vdCBSZWFjdCBlbGVtZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFwcEVsZW1lbnQoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnKTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgICBjb25zb2xlLmRlYnVnKCdDcmVhdGluZyBhcHAgZWxlbWVudCBmcm9tIGZhY3RvcnknKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDYWxsIGFwcCBmYWN0b3J5IHdpdGggcm91dGVyIGRlcGVuZGVuY3lcbiAgICAgIGNvbnN0IGFwcEVsZW1lbnQgPSBjb25maWcuYXBwKHsgcm91dGVyOiBjb25maWcucm91dGVyIH0pO1xuXG4gICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGFwcEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXBwIGZhY3RvcnkgbXVzdCByZXR1cm4gYSB2YWxpZCBSZWFjdCBlbGVtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoJ0FwcCBlbGVtZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICByZXR1cm4gYXBwRWxlbWVudDtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGFwcCBlbGVtZW50Jywge1xuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgYXBwIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIeWRyYXRlIHRoZSBSZWFjdCBhcHBsaWNhdGlvbiBpbiB0aGUgYnJvd3Nlci5cbiAgICpcbiAgICogVXNlcyBSZWFjdCdzIGh5ZHJhdGVSb290IHRvIGh5ZHJhdGUgdGhlIHNlcnZlci1yZW5kZXJlZCBIVE1MIHdpdGhcbiAgICogdGhlIGNsaWVudC1zaWRlIFJlYWN0IGFwcGxpY2F0aW9uLiBUaGlzIGVuc3VyZXMgdGhlIGNsaWVudCBtYXRjaGVzXG4gICAqIHRoZSBzZXJ2ZXIgZXhhY3RseSB0byBhdm9pZCBoeWRyYXRpb24gbWlzbWF0Y2hlcy5cbiAgICpcbiAgICogQHBhcmFtIHJvdXRlclByb3ZpZGVyIC0gUm91dGVyIHByb3ZpZGVyIGVsZW1lbnQgdG8gaHlkcmF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlQXBwbGljYXRpb24ocm91dGVyUHJvdmlkZXI6IFJlYWN0LlJlYWN0RWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1N0YXJ0aW5nIFJlYWN0IGh5ZHJhdGlvbicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCB0aGUgcm9vdCBjb250YWluZXIgZWxlbWVudFxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTtcbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBjb250YWluZXIgZWxlbWVudCBub3QgZm91bmQuIEV4cGVjdGVkIGVsZW1lbnQgd2l0aCBpZD1cInJvb3RcIicpO1xuICAgICAgfVxuXG4gICAgICAvLyBIeWRyYXRlIHRoZSBhcHBsaWNhdGlvbiAobm90IHJlbmRlciAtIG11c3QgbWF0Y2ggc2VydmVyIEhUTUwpXG4gICAgICBoeWRyYXRlUm9vdChjb250YWluZXIsIHJvdXRlclByb3ZpZGVyKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdSZWFjdCBoeWRyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlYWN0IGh5ZHJhdGlvbiBmYWlsZWQnLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVhY3QgaHlkcmF0aW9uIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBIVFRQIGNsaWVudCBmb3IgTGFtYmRhIGVuZHBvaW50IGNhbGxzLlxuICAgKlxuICAgKiBDb25maWd1cmVzIHRoZSBIVFRQIGNsaWVudCBmb3IgbWFraW5nIEFQSSBjYWxscyB0byBMYW1iZGEgZW5kcG9pbnRzXG4gICAqIGFmdGVyIGh5ZHJhdGlvbi4gVGhpcyBpcyB1c2VkIGZvciBwb3N0LWh5ZHJhdGlvbiBpbnRlcmFjdGlvbnMgdGhhdFxuICAgKiByZXF1aXJlIHNlcnZlci1zaWRlIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0dXBIdHRwQ2xpZW50KGNvbmZpZzogUnVudGltZVdlYkNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NldHRpbmcgdXAgSFRUUCBjbGllbnQgZm9yIExhbWJkYSBlbmRwb2ludHMnKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTZXQgdXAgYmFzZSBVUkwgZm9yIEFQSSBjYWxscyBiYXNlZCBvbiBzdGFnZVxuICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMuZ2V0QXBpQmFzZVVybChjb25maWcuc3RhZ2UpO1xuXG4gICAgICAvLyBTdG9yZSBjb25maWd1cmF0aW9uIGdsb2JhbGx5IGZvciB1c2UgYnkgZGF0YSBsb2FkZXJzXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUFVSRU5PV19DT05GSUdfXyA9IHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHN0YWdlOiBjb25maWcuc3RhZ2UsXG4gICAgICAgICAgYXBpQmFzZVVybDogYmFzZVVybCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5pbmZvKCdIVFRQIGNsaWVudCBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgIH0pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZXR1cCBIVFRQIGNsaWVudCcsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0dXAgSFRUUCBjbGllbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVBJIGJhc2UgVVJMIGJhc2VkIG9uIGRlcGxveW1lbnQgc3RhZ2UuXG4gICAqXG4gICAqIERldGVybWluZXMgdGhlIGFwcHJvcHJpYXRlIEFQSSBiYXNlIFVSTCBmb3IgbWFraW5nIEhUVFAgcmVxdWVzdHNcbiAgICogdG8gTGFtYmRhIGVuZHBvaW50cyBiYXNlZCBvbiB0aGUgZGVwbG95bWVudCBzdGFnZS5cbiAgICpcbiAgICogQHBhcmFtIHN0YWdlIC0gRGVwbG95bWVudCBzdGFnZVxuICAgKiBAcmV0dXJucyBBUEkgYmFzZSBVUkxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0QXBpQmFzZVVybChzdGFnZTogJ2RldicgfCAnc3RhZ2luZycgfCAncHJvZCcpOiBzdHJpbmcge1xuICAgIC8vIEluIGJyb3dzZXIgY29udGV4dCwgQVBJIGNhbGxzIGdvIHRocm91Z2ggdGhlIHNhbWUgb3JpZ2luXG4gICAgLy8gVGhlIGFjdHVhbCBBUEkgR2F0ZXdheSBVUkwgaXMgaGFuZGxlZCBieSBDbG91ZEZyb250IHJvdXRpbmdcbiAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJztcblxuICAgIC8vIEFQSSBlbmRwb2ludHMgYXJlIHR5cGljYWxseSB1bmRlciAvYXBpIHBhdGhcbiAgICByZXR1cm4gYCR7b3JpZ2lufS9hcGlgO1xuICB9XG59XG4iLCAiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zZWQgdW5kZXIgRWxhc3RpYyBMaWNlbnNlIDIuMC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRWxhc3RpYy0yLjBcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEluZnJhT3B0aW9ucyB9IGZyb20gJy4vaW5mcmEudHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNaWNyb3NlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSAnLi9taWNyb3NlcnZpY2UudHlwZXMnO1xuXG4vKipcbiAqIFB1cmVub3dSb3V0ZXIgaW50ZXJmYWNlIGZvciBydW50aW1lLXdlYiBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBEZWZpbmVzIHRoZSBlc3NlbnRpYWwgbWV0aG9kcyBuZWVkZWQgYnkgdGhlIHJ1bnRpbWUtd2ViIHBpcGVsaW5lcy5cbiAqIFRoaXMgaW50ZXJmYWNlIG1hdGNoZXMgdGhlIGFjdHVhbCBQdXJlbm93Um91dGVyIGNsYXNzIGZyb20gQGxpYi9yZWFjdC9wdXJlbm93LnJvdXRlci5cbiAqL1xuaW50ZXJmYWNlIFB1cmVub3dSb3V0ZXIge1xuICAvKipcbiAgICogR2V0IGFsbCByb3V0ZSBvYmplY3RzIGFzIGFuIGFycmF5LlxuICAgKiBVc2VkIGZvciBjcmVhdGluZyBicm93c2VyIHJvdXRlcnMgYW5kIFNTUiBzdGF0aWMgaGFuZGxlcnMuXG4gICAqL1xuICBnZXRSb3V0ZXMoKTogQXJyYXk8e1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgZWxlbWVudD86IHVua25vd247XG4gICAgbG9hZGVyPzogdW5rbm93bjtcbiAgICBjaGlsZHJlbj86IHVua25vd247XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgfT47XG5cbiAgLyoqXG4gICAqIEZpbmQgYSByb3V0ZSBieSBpdHMgSUQuXG4gICAqL1xuICBnZXRSb3V0ZUJ5SWQ/KGlkOiBzdHJpbmcpOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBGaW5kIGEgcm91dGUgYnkgaXRzIHBhdGguXG4gICAqL1xuICBnZXRSb3V0ZUJ5UGF0aD8ocGF0aDogc3RyaW5nKTogdW5rbm93bjtcblxuICAvKipcbiAgICogR2V0IHRoZSByb3V0ZXMgYXJyYXkgKGdldHRlcikuXG4gICAqL1xuICByb3V0ZXM/OiBBcnJheTx1bmtub3duPjtcblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBkZWZhdWx0cz86IHVua25vd247XG59XG5cbi8qKlxuICogU3RhZ2UgZW52aXJvbm1lbnQgZm9yIGRlcGxveW1lbnQuXG4gKlxuICogLSBgZGV2YDogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcbiAqIC0gYHN0YWdpbmdgOiBTdGFnaW5nL3ByZS1wcm9kdWN0aW9uIGVudmlyb25tZW50XG4gKiAtIGBwcm9kYDogUHJvZHVjdGlvbiBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgdHlwZSBTdGFnZSA9ICdkZXYnIHwgJ3N0YWdpbmcnIHwgJ3Byb2QnO1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBleHRyYWN0IHNlcnZpY2UgbmFtZXMgZnJvbSByZWdpc3RlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoaXMgZW5hYmxlcyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbiBvZiBzZXJ2aWNlIG5hbWVzIGFuZCBwcm92aWRlc1xuICogdHlwZS1zYWZlIGFjY2VzcyB0byBzZXJ2aWNlIGlkZW50aWZpZXJzIHRocm91Z2hvdXQgdGhlIGZyYW1ld29yay5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIFNlcnZpY2VOYW1lczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4+ID0ga2V5b2YgVDtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gZ2VuZXJhdGUgTGFtYmRhIElEcyBmcm9tIHNlcnZpY2UgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBDb21iaW5lcyBzZXJ2aWNlIG5hbWVzIHdpdGggTGFtYmRhIElEcyB0byBjcmVhdGUgZnVsbHkgcXVhbGlmaWVkXG4gKiBMYW1iZGEgaWRlbnRpZmllcnMgZm9yIHR5cGUtc2FmZSBMYW1iZGEgcmVzb2x1dGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIExhbWJkYUlkczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXVsnbGFtYmRhcyddW251bWJlcl0gZXh0ZW5kcyB7IGlkOiBpbmZlciBJIH1cbiAgICA/IEkgZXh0ZW5kcyBzdHJpbmdcbiAgICAgID8gYCR7SyAmIHN0cmluZ30uJHtJfWBcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuLyoqXG4gKiBUeXBlIGNvbnN0cmFpbnQgZm9yIHZhbGlkIHNlcnZpY2UgbmFtZXMuXG4gKlxuICogRW5zdXJlcyBzZXJ2aWNlIG5hbWVzIGZvbGxvdyB0aGUgdmFsaWRhdGlvbiBwYXR0ZXJuOlxuICogLSBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgKGEteiwgQS1aKVxuICogLSBDYW4gY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1xuICogLSBNYXhpbXVtIGxlbmd0aDogMTI4IGNoYXJhY3RlcnNcbiAqXG4gKiBUaGlzIGlzIGEgYnJhbmRlZCB0eXBlIHRoYXQgcHJvdmlkZXMgY29tcGlsZS10aW1lIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkU2VydmljZU5hbWUgPSBzdHJpbmcgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6ICdWYWxpZFNlcnZpY2VOYW1lJyB9O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gdmFsaWRhdGUgc2VydmljZSBuYW1lIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgLSBUaGUgc2VydmljZSBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBUeXBlIHByZWRpY2F0ZSBpbmRpY2F0aW5nIGlmIHRoZSBzZXJ2aWNlIG5hbWUgaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTZXJ2aWNlTmFtZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc2VydmljZU5hbWUgaXMgVmFsaWRTZXJ2aWNlTmFtZSB7XG4gIHJldHVybiAvXlthLXpBLVpdW2EtekEtWjAtOS1dezAsMTI3fSQvLnRlc3Qoc2VydmljZU5hbWUpO1xufVxuXG4vKipcbiAqIE1haW4gY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIFJ1bnRpbWUgVGFyZ2V0IENvcmUuXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB1bmlmaWVkIGNvbmZpZ3VyYXRpb24gdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGV4ZWN1dGlvbiBjb250ZXh0czpcbiAqIC0gQnJvd3NlcjogSHlkcmF0ZXMgUmVhY3QgYXBwbGljYXRpb24gd2l0aCBjbGllbnQtc2lkZSByb3V0aW5nXG4gKiAtIExhbWJkYTogRXhlY3V0ZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIGFuZCBidXNpbmVzcyBsb2dpY1xuICogLSBDREs6IFN5bnRoZXNpemVzIENsb3VkRm9ybWF0aW9uIGluZnJhc3RydWN0dXJlXG4gKlxuICogQHRlbXBsYXRlIFRSZWdpc3RlciAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIHR5cGUgZm9yIHR5cGUtc2FmZSBzZXJ2aWNlIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHB1cmVub3cgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93L3J1bnRpbWUtd2ViJztcbiAqIGltcG9ydCB7IFB1cmVub3dSb3V0ZXIgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcbiAqXG4gKiBjb25zdCBjb25maWcgPSB7XG4gKiAgIGFwcDogKHsgcm91dGVyIH0pID0+IDxBcHAgcm91dGVyPXtyb3V0ZXJ9IC8+LFxuICogICByb3V0ZXI6IG5ldyBQdXJlbm93Um91dGVyKHsgcm91dGVyOiByb3V0ZXMsIGRlZmF1bHRzOiB7fSB9KSxcbiAqICAgc2VydmljZU5hbWU6ICdteS1hcHAnLFxuICogICBzdGFnZTogJ2RldicsXG4gKiAgIHJlZ2lzdGVyOiB7XG4gKiAgICAgcGF5bWVudHM6IHtcbiAqICAgICAgIHRpZXM6IFtQYXltZW50c1RpZXNdLFxuICogICAgICAgbGFtYmRhczogW2NoYXJnZUhhbmRsZXIsIHJlZnVuZEhhbmRsZXJdXG4gKiAgICAgfSxcbiAqICAgICB1c2Vyczoge1xuICogICAgICAgdGllczogW1VzZXJzVGllc10sXG4gKiAgICAgICBsYW1iZGFzOiBbY3JlYXRlVXNlckhhbmRsZXIsIGdldFVzZXJIYW5kbGVyXVxuICogICAgIH1cbiAqICAgfSBhcyBjb25zdCwgIC8vIFVzZSAnYXMgY29uc3QnIGZvciBiZXR0ZXIgdHlwZSBpbmZlcmVuY2VcbiAqICAgaW5mcmE6IHtcbiAqICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAqICAgICBzdGFnZTogJ2RldicsXG4gKiAgICAgcmVhY3RFbnRyeTogJy4vc3JjL2luZGV4LnRzeCcsXG4gKiAgICAgYXBpTW9kZTogJ2FwaUdhdGV3YXknXG4gKiAgIH1cbiAqIH0gc2F0aXNmaWVzIFB1cmVub3dDb25maWc7XG4gKlxuICogcHVyZW5vdyhjb25maWcpO1xuICogYGBgXG4gKlxuICogQHRvZG86IGFmdGVyIFJ1bnRpbWVXZWIgcmVwbyB3aWxsIGJlIHJlc29sdmVkLCBSdW50aW1lV2ViQ29uZmlnIE1VU1QgZXh0ZW5kIFB1cmVub3dDb25maWcgQ29yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVXZWJDb25maWc8VFJlZ2lzdGVyIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4gPSBSZWNvcmQ8c3RyaW5nLCBNaWNyb3NlcnZpY2VEZWZpbml0aW9uPj4ge1xuICAvKipcbiAgICogUmVhY3QgYXBwbGljYXRpb24gY29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqXG4gICAqIFJlY2VpdmVzIHRoZSByb3V0ZXIgaW5zdGFuY2UgYXMgYSBkZXBlbmRlbmN5IGFuZCByZXR1cm5zIHRoZSByb290IFJlYWN0IGVsZW1lbnQuXG4gICAqIFRoaXMgcGF0dGVybiBlbmFibGVzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG9mIHRoZSByb3V0ZXIgaW50byB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyAtIERlcGVuZGVuY2llcyBvYmplY3QgY29udGFpbmluZyB0aGUgcm91dGVyXG4gICAqIEBwYXJhbSBkZXBzLnJvdXRlciAtIFB1cmVub3dSb3V0ZXIgaW5zdGFuY2UgZm9yIG5hdmlnYXRpb24gYW5kIHJvdXRpbmdcbiAgICogQHJldHVybnMgUm9vdCBSZWFjdCBlbGVtZW50IChSZWFjdC5SZWFjdEVsZW1lbnQpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXBwOiAoeyByb3V0ZXIgfSkgPT4gPEFwcCByb3V0ZXI9e3JvdXRlcn0gLz5cbiAgICogYGBgXG4gICAqL1xuICBhcHA6IChkZXBzOiB7IHJvdXRlcjogUHVyZW5vd1JvdXRlciB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFB1cmVub3dSb3V0ZXIgaW5zdGFuY2UgZm9yIGFwcGxpY2F0aW9uIHJvdXRpbmcuXG4gICAqXG4gICAqIERlZmluZXMgYWxsIHJvdXRlcywgbG9hZGVycywgYW5kIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogVGhlIHJvdXRlciBpcyB1c2VkIGluIGJvdGggc2VydmVyLXNpZGUgcmVuZGVyaW5nIChMYW1iZGEpIGFuZCBjbGllbnQtc2lkZSBoeWRyYXRpb24gKGJyb3dzZXIpLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBQdXJlbm93Um91dGVyfSBmb3Igcm91dGVyIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiByb3V0ZXI6IG5ldyBQdXJlbm93Um91dGVyKHtcbiAgICogICByb3V0ZXI6IFtcbiAgICogICAgIHsgcGF0aDogJy8nLCBlbGVtZW50OiA8SG9tZSAvPiB9LFxuICAgKiAgICAgeyBwYXRoOiAnL2Fib3V0JywgZWxlbWVudDogPEFib3V0IC8+IH1cbiAgICogICBdLFxuICAgKiAgIGRlZmF1bHRzOiB7fVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHJvdXRlcjogUHVyZW5vd1JvdXRlcjtcblxuICAvKipcbiAgICogU2VydmljZSBuYW1lIGlkZW50aWZpZXIgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogVXNlZCBhcyBhIHByZWZpeCBmb3IgYWxsIEFXUyByZXNvdXJjZXMgKExhbWJkYSBmdW5jdGlvbnMsIEFQSSBHYXRld2F5LCBTMyBidWNrZXRzLCBldGMuKS5cbiAgICogTXVzdCBiZSB1bmlxdWUgd2l0aGluIHlvdXIgQVdTIGFjY291bnQgYW5kIHJlZ2lvbi5cbiAgICpcbiAgICogKipWYWxpZGF0aW9uIFJ1bGVzKio6XG4gICAqIC0gTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIChhLXosIEEtWilcbiAgICogLSBDYW4gY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1xuICAgKiAtIE1heGltdW0gbGVuZ3RoOiAxMjggY2hhcmFjdGVyc1xuICAgKiAtIFBhdHRlcm46IGAvXlthLXpBLVpdW2EtekEtWjAtOS1dezAsMTI3fSQvYFxuICAgKlxuICAgKiAqKkV4YW1wbGVzKio6XG4gICAqIC0gVmFsaWQ6IGBteS1hcHBgLCBgTXlBcHBgLCBgYXBwMTIzYCwgYG15LWFwcC12MmBcbiAgICogLSBJbnZhbGlkOiBgMTIzYXBwYCAoc3RhcnRzIHdpdGggbnVtYmVyKSwgYG15X2FwcGAgKHVuZGVyc2NvcmUpLCBgbXkgYXBwYCAoc3BhY2UpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc2VydmljZU5hbWU6ICdteS1hcHBsaWNhdGlvbidcbiAgICogYGBgXG4gICAqL1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IHN0YWdlL2Vudmlyb25tZW50LlxuICAgKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCByZXNvdXJjZSBuYW1pbmcuXG4gICAqIFVzZWQgdG8gY3JlYXRlIHNlcGFyYXRlIGluZnJhc3RydWN0dXJlIHN0YWNrcyBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50cy5cbiAgICpcbiAgICogKipWYWx1ZXMqKjpcbiAgICogLSBgZGV2YDogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgKGxvY2FsIHRlc3RpbmcsIHJhcGlkIGl0ZXJhdGlvbilcbiAgICogLSBgc3RhZ2luZ2A6IFN0YWdpbmcvcHJlLXByb2R1Y3Rpb24gZW52aXJvbm1lbnQgKFFBLCBpbnRlZ3JhdGlvbiB0ZXN0aW5nKVxuICAgKiAtIGBwcm9kYDogUHJvZHVjdGlvbiBlbnZpcm9ubWVudCAobGl2ZSB1c2VycylcbiAgICpcbiAgICogKipJbXBhY3QqKjpcbiAgICogLSBSZXNvdXJjZSBuYW1pbmc6IGB7c2VydmljZU5hbWV9LXtyZXNvdXJjZX0te3N0YWdlfWBcbiAgICogLSBFbnZpcm9ubWVudCB2YXJpYWJsZXM6IERpZmZlcmVudCBjb25maWdzIHBlciBzdGFnZVxuICAgKiAtIENhY2hlIFRUTDogU2hvcnRlciBpbiBkZXYsIGxvbmdlciBpbiBwcm9kXG4gICAqIC0gTG9nZ2luZzogTW9yZSB2ZXJib3NlIGluIGRldiwgc3RydWN0dXJlZCBpbiBwcm9kXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc3RhZ2U6ICdkZXYnXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhZ2U6IFN0YWdlO1xuXG4gIC8qKlxuICAgKiBNaWNyb3NlcnZpY2UgcmVnaXN0cnkgKHJ1bnRpbWUtbGV2ZWwgY29uZmlndXJhdGlvbikuXG4gICAqXG4gICAqICoqUmVxdWlyZWQqKjogRGVmaW5lcyBhbGwgbWljcm9zZXJ2aWNlcywgdGhlaXIgREkgY29udGFpbmVycywgYW5kIExhbWJkYSBlbmRwb2ludHMuXG4gICAqICoqVXNlZCBpbiBhbGwgY29udGV4dHMqKjogQnJvd3NlciAoZm9yIHR5cGUgZ2VuZXJhdGlvbiksIExhbWJkYSAoZm9yIERJKSwgQ0RLIChmb3IgaW5mcmFzdHJ1Y3R1cmUpLlxuICAgKiAqKkFyY2hpdGVjdHVyZSoqOiBUaGlzIGlzIHJ1bnRpbWUgY29uZmlndXJhdGlvbiwgc2VwYXJhdGUgZnJvbSBpbmZyYXN0cnVjdHVyZSBjb25jZXJucy5cbiAgICpcbiAgICogRWFjaCBtaWNyb3NlcnZpY2UgZ2V0cyBpdHMgb3duIFB1cmVDb250YWluZXIgaW5zdGFuY2UgYnVpbHQgZnJvbSB0aGUgVGllcyBjbGFzc2VzLlxuICAgKiBMYW1iZGEgZnVuY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIHdpcmVkIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqXG4gICAqICoqVHlwZSBTYWZldHkqKjogU2VydmljZSBuYW1lcyBhcmUgZGVyaXZlZCBmcm9tIG9iamVjdCBrZXlzLCBlbnN1cmluZyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbi5cbiAgICogKipObyBNYWdpYyBTdHJpbmdzKio6IEFsbCBzZXJ2aWNlIGlkZW50aWZpZXJzIGFyZSB0eXBlLXNhZmUgYW5kIGF1dG8tZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBNaWNyb3NlcnZpY2VEZWZpbml0aW9ufSBmb3IgbWljcm9zZXJ2aWNlIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHJlZ2lzdGVyOiB7XG4gICAqICAgcGF5bWVudHM6IHtcbiAgICogICAgIHRpZXM6IFtQYXltZW50c1RpZXMsIEJpbGxpbmdUaWVzXSxcbiAgICogICAgIGxhbWJkYXM6IFtjaGFyZ2VIYW5kbGVyLCByZWZ1bmRIYW5kbGVyLCB3ZWJob29rSGFuZGxlcl1cbiAgICogICB9LFxuICAgKiAgIHVzZXJzOiB7XG4gICAqICAgICB0aWVzOiBbVXNlcnNUaWVzLCBBdXRoVGllc10sXG4gICAqICAgICBsYW1iZGFzOiBbY3JlYXRlVXNlckhhbmRsZXIsIGdldFVzZXJIYW5kbGVyLCBsb2dpbkhhbmRsZXJdXG4gICAqICAgfVxuICAgKiB9IGFzIGNvbnN0ICAvLyBVc2UgJ2FzIGNvbnN0JyBmb3IgYmV0dGVyIHR5cGUgaW5mZXJlbmNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVnaXN0ZXI6IFRSZWdpc3RlcjtcblxuICAvKipcbiAgICogSW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiBmb3IgQ0RLIGRlcGxveW1lbnQuXG4gICAqXG4gICAqICoqT3B0aW9uYWwqKjogT25seSByZXF1aXJlZCB3aGVuIHJ1bm5pbmcgaW4gQ0RLIGNvbnRleHQgKHN5bnRoZXNpemluZyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMpLlxuICAgKiAqKk5vdCB1c2VkKio6IEluIGJyb3dzZXIgYW5kIExhbWJkYSBjb250ZXh0cyAocnVudGltZSBjb25maWd1cmF0aW9uIGlzIGluIHJlZ2lzdGVyKS5cbiAgICogKipQdXJlIGluZnJhc3RydWN0dXJlKio6IENvbnRhaW5zIG9ubHkgQVdTIHJlc291cmNlIGNvbmZpZ3VyYXRpb24sIG5vIGJ1c2luZXNzIGxvZ2ljLlxuICAgKlxuICAgKiBEZWZpbmVzOlxuICAgKiAtIEFXUyBhY2NvdW50IGFuZCByZWdpb25cbiAgICogLSBMYW1iZGEgY29uZmlndXJhdGlvbiAobWVtb3J5LCB0aW1lb3V0LCBWUEMpXG4gICAqIC0gQVBJIEdhdGV3YXkgb3IgTGFtYmRhIFVSTCBtb2RlXG4gICAqIC0gQ3VzdG9tIGRvbWFpbiBjb25maWd1cmF0aW9uXG4gICAqIC0gUmVhY3QgZW50cnkgcG9pbnQgZm9yIFNTUiBMYW1iZGFcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgSW5mcmFPcHRpb25zfSBmb3IgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW5mcmE6IHtcbiAgICogICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICogICBzdGFnZTogJ2RldicsXG4gICAqICAgcmVhY3RFbnRyeTogJy4vc3JjL2luZGV4LnRzeCcsXG4gICAqICAgYXBpTW9kZTogJ2FwaUdhdGV3YXknLFxuICAgKiAgIGxhbWJkYU1lbW9yeVNpemU6IDEwMjQsXG4gICAqICAgbGFtYmRhVGltZW91dDogMzAsXG4gICAqICAgZG9tYWluOiB7XG4gICAqICAgICByb290RG9tYWluOiAnbXlhcHAuY29tJyxcbiAgICogICAgIHN1YmRvbWFpbjogJ2FwaSdcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBpbmZyYT86IEluZnJhT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUeXBlLXNhZmUgUHVyZW5vdyBjb25maWd1cmF0aW9uIHdpdGggaW5mZXJyZWQgc2VydmljZSBuYW1lcy5cbiAqXG4gKiBUaGlzIHR5cGUgcHJvdmlkZXMgUnVudGltZSBDb3JlIHR5cGUgc2FmZXR5IGJ5IGluZmVycmluZyBzZXJ2aWNlIG5hbWVzIGZyb20gdGhlIHJlZ2lzdGVyXG4gKiBjb25maWd1cmF0aW9uLCBlbmFibGluZyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbiBvZiBzZXJ2aWNlIHJlZmVyZW5jZXMuXG4gKlxuICogQHRlbXBsYXRlIFRSZWdpc3RlciAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIHR5cGVcbiAqL1xuZXhwb3J0IHR5cGUgVHlwZVNhZmVQdXJlbm93Q29uZmlnPFRSZWdpc3RlciBleHRlbmRzIFJlY29yZDxzdHJpbmcsIE1pY3Jvc2VydmljZURlZmluaXRpb24+PiA9XG4gIFJ1bnRpbWVXZWJDb25maWc8VFJlZ2lzdGVyPiAmIHtcbiAgLyoqXG4gICAqIFR5cGUtc2FmZSBzZXJ2aWNlIG5hbWVzIGRlcml2ZWQgZnJvbSByZWdpc3RlciBrZXlzLlxuICAgKiBBdmFpbGFibGUgYXQgY29tcGlsZS10aW1lIGZvciB0eXBlIGNoZWNraW5nIGFuZCBJREUgYXV0b2NvbXBsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWVzPzogU2VydmljZU5hbWVzPFRSZWdpc3Rlcj47XG5cbiAgLyoqXG4gICAqIFR5cGUtc2FmZSBMYW1iZGEgSURzIGRlcml2ZWQgZnJvbSByZWdpc3RlciBjb25maWd1cmF0aW9uLlxuICAgKiBBdmFpbGFibGUgYXQgY29tcGlsZS10aW1lIGZvciB0eXBlIGNoZWNraW5nIGFuZCBJREUgYXV0b2NvbXBsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhSWRzPzogTGFtYmRhSWRzPFRSZWdpc3Rlcj47XG59O1xuIiwgIi8qXG4gKiBFbGFzdGljIExpY2Vuc2UgMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiB3b3JrdGlmLnB1cmVub3cuY2RrIDx3b3JrdGlmX3B1cmVub3dfY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9saWNlbnNpbmcvZWxhc3RpYy1saWNlbnNlIGZvciBkZXRhaWxzLlxuICpcbiAqIFJlLWxpY2Vuc2luZyBub3RpY2U6XG4gKiAgIFRoaXMgZmlsZSB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQnVzaW5lc3MgU291cmNlIExpY2Vuc2UgMS4xIChCVVNMLTEuMSkuXG4gKiAgIEFzIG9mIDIwMjUtMDktMjIsIGl0IGlzIHJlLWxpY2Vuc2VkIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0IHsgcHVyZW5vdywgUHVyZW5vd1JvdXRlLCBwdXJlbm93Um91dGVyLCBQdXJlbm93Um91dGVyRGVmYXVsdHMgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcbmltcG9ydCB7IFJ1bnRpbWVXZWJDb25maWcgfSBmcm9tICdAbGliL3J1bnRpbWUtd2ViL3R5cGVzJztcblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbHMuXG4gKiBGb2xsb3dzIHB1cmVub3cgZXJyb3IgcGF0dGVybnMgd2l0aG91dCBlbW9qaS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMgKi9cbiAgcmVhZG9ubHkgZXJyb3JzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihlcnJvcnM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQ6XFxuJHtlcnJvcnMubWFwKGUgPT4gYCAgLSAke2V9YCkuam9pbignXFxuJyl9YCk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ1ZhbGlkYXRpb25FcnJvcic7XG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBlbnZpcm9ubWVudCBkZXRlY3Rpb24gZmFpbHMuXG4gKiBGb2xsb3dzIHB1cmVub3cgZXJyb3IgcGF0dGVybnMgd2l0aG91dCBlbW9qaS5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50RGV0ZWN0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdFbnZpcm9ubWVudERldGVjdGlvbkVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG4vKipcbiAqIERldGVjdCB0aGUgY3VycmVudCBydW50aW1lIGVudmlyb25tZW50LlxuICogVGhpcyBpcyBhIGxpZ2h0d2VpZ2h0IGRldGVjdGlvbiB0aGF0IHdvcmtzIGluIGFsbCBlbnZpcm9ubWVudHMuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdEVudmlyb25tZW50KCk6ICdicm93c2VyJyB8ICdsYW1iZGEnIHwgJ2Nkaycge1xuICAvLyBCcm93c2VyIGRldGVjdGlvblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ2Jyb3dzZXInO1xuICB9XG5cbiAgLy8gTGFtYmRhIGRldGVjdGlvblxuICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52Py5BV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUUpIHtcbiAgICByZXR1cm4gJ2xhbWJkYSc7XG4gIH1cblxuICAvLyBDREsgZGV0ZWN0aW9uXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnY/LlBVUkVOT1dfTU9ERSA9PT0gJ2NkaycpIHtcbiAgICAgIHJldHVybiAnY2RrJztcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Py5DREtfREVGQVVMVF9BQ0NPVU5UIHx8IHByb2Nlc3MuZW52Py5DREtfREVGQVVMVF9SRUdJT04pIHtcbiAgICAgIHJldHVybiAnY2RrJztcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuYXJndj8uc29tZShhcmcgPT4gYXJnLmluY2x1ZGVzKCdjZGsnKSB8fCBhcmcuaW5jbHVkZXMoJ3N5bnRoJykpKSB7XG4gICAgICByZXR1cm4gJ2Nkayc7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdCB0byBDREsgZm9yIE5vZGUuanMgZW52aXJvbm1lbnRzIChidWlsZCB0aW1lKVxuICByZXR1cm4gJ2Nkayc7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdpdmVuIGVudmlyb25tZW50LlxuICogTGlnaHR3ZWlnaHQgdmFsaWRhdGlvbiB0aGF0IHdvcmtzIGluIGFsbCBlbnZpcm9ubWVudHMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29uZmlnKGNvbmZpZzogUnVudGltZVdlYkNvbmZpZywgaXNDREtDb250ZXh0OiBib29sZWFuKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFNlcnZpY2UgbmFtZSB2YWxpZGF0aW9uXG4gIGlmICghY29uZmlnLnNlcnZpY2VOYW1lIHx8ICEvXlthLXpBLVpdW2EtekEtWjAtOS1dezAsMTI3fSQvLnRlc3QoY29uZmlnLnNlcnZpY2VOYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKCdzZXJ2aWNlTmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucywgYW5kIGJlIG1heCAxMjggY2hhcmFjdGVycycpO1xuICB9XG5cbiAgLy8gU3RhZ2UgdmFsaWRhdGlvblxuICBpZiAoIVsnZGV2JywgJ3N0YWdpbmcnLCAncHJvZCddLmluY2x1ZGVzKGNvbmZpZy5zdGFnZSkpIHtcbiAgICBlcnJvcnMucHVzaCgnc3RhZ2UgbXVzdCBiZSBvbmUgb2Y6IGRldiwgc3RhZ2luZywgcHJvZCcpO1xuICB9XG5cbiAgLy8gSW5mcmEgdmFsaWRhdGlvbiBmb3IgQ0RLIGNvbnRleHRcbiAgaWYgKGlzQ0RLQ29udGV4dCAmJiAhY29uZmlnLmluZnJhKSB7XG4gICAgZXJyb3JzLnB1c2goJ2luZnJhIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQgaW4gQ0RLIGNvbnRleHQnKTtcbiAgfVxuXG4gIHJldHVybiB7IHZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLCBlcnJvcnMgfTtcbn1cblxuLyoqXG4gKiBVbmlmaWVkIGVudHJ5IHBvaW50IGZvciBSdW50aW1lIFRhcmdldCBDb3JlLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBzaW5nbGUgQVBJIHRoYXQgd29ya3MgYWNyb3NzIGFsbCBleGVjdXRpb24gY29udGV4dHM6XG4gKiAtICoqQnJvd3NlcioqOiBIeWRyYXRlcyBSZWFjdCBhcHBsaWNhdGlvbiB3aXRoIGNsaWVudC1zaWRlIHJvdXRpbmdcbiAqIC0gKipMYW1iZGEqKjogRXhlY3V0ZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIGFuZCBidXNpbmVzcyBsb2dpYyB3aXRoIERJXG4gKiAtICoqQ0RLKio6IFN5bnRoZXNpemVzIENsb3VkRm9ybWF0aW9uIGluZnJhc3RydWN0dXJlIHRlbXBsYXRlc1xuICpcbiAqIFRoZSBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgYW5kIHJvdXRlc1xuICogZXhlY3V0aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBwaXBlbGluZSB3aXRob3V0IHVzZXIgaW50ZXJ2ZW50aW9uLlxuICpcbiAqICoqTm90ZSoqOiBGb3IgTGFtYmRhIGFuZCBDREsgY29udGV4dHMsIHVzZSB0aGUgc2VydmVyLXNpZGUgZW50cnkgcG9pbnRcbiAqIGZyb20gYEBjb3JlL3J1bnRpbWUtd2ViYCBpbnN0ZWFkLiBUaGlzIGJyb3dzZXItY29tcGF0aWJsZSB2ZXJzaW9uXG4gKiBvbmx5IHN1cHBvcnRzIGJyb3dzZXIgaHlkcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBVbmlmaWVkIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBjb250ZXh0c1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZXhlY3V0aW9uIGNvbXBsZXRlc1xuICogQHRocm93cyBDb25maWdWYWxpZGF0aW9uRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkXG4gKiBAdGhyb3dzIEVudmlyb25tZW50RGV0ZWN0aW9uRXJyb3IgaWYgZW52aXJvbm1lbnQgY2Fubm90IGJlIGRldGVjdGVkXG4gKiBAdGhyb3dzIEVycm9yIGlmIGV4ZWN1dGlvbiBmYWlsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBwdXJlbm93IH0gZnJvbSAnQHdvcmt0aWYvcHVyZW5vdy9ydW50aW1lLXdlYic7XG4gKiBpbXBvcnQgeyBQdXJlbm93Um91dGVyIH0gZnJvbSAnQHdvcmt0aWYvcHVyZW5vdyc7XG4gKlxuICogcHVyZW5vdyh7XG4gKiAgIGFwcDogKHsgcm91dGVyIH0pID0+IDxBcHAgcm91dGVyPXtyb3V0ZXJ9IC8+LFxuICogICByb3V0ZXI6IG5ldyBQdXJlbm93Um91dGVyKHsgcm91dGVzLCBkZWZhdWx0czoge30gfSksXG4gKiAgIHNlcnZpY2VOYW1lOiAnbXktYXBwJyxcbiAqICAgc3RhZ2U6ICdkZXYnLFxuICogICByZWdpc3Rlcjoge1xuICogICAgIHBheW1lbnRzOiB7XG4gKiAgICAgICB0aWVzOiBbUGF5bWVudHNUaWVzXSxcbiAqICAgICAgIGxhbWJkYXM6IFtjaGFyZ2VIYW5kbGVyLCByZWZ1bmRIYW5kbGVyXVxuICogICAgIH1cbiAqICAgfSxcbiAqICAgaW5mcmE6IHtcbiAqICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAqICAgICBzdGFnZTogJ2RldicsXG4gKiAgICAgcmVhY3RFbnRyeTogJy4vc3JjL2luZGV4LnRzeCcsXG4gKiAgICAgYXBpTW9kZTogJ2FwaUdhdGV3YXknXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXJld2ViKGNvbmZpZzogUnVudGltZVdlYkNvbmZpZyk6IHZvaWQge1xuICAvLyAxLiBEZXRlY3QgcnVudGltZSBlbnZpcm9ubWVudCB1c2luZyBsaWdodHdlaWdodCBkZXRlY3Rpb25cbiAgY29uc3QgZW52VHlwZSA9IGRldGVjdEVudmlyb25tZW50KCk7XG4gIGNvbnN0IGlzQ0RLQ29udGV4dCA9IGVudlR5cGUgPT09ICdjZGsnO1xuXG4gIC8vIDIuIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlQ29uZmlnKGNvbmZpZywgaXNDREtDb250ZXh0KTtcblxuICBpZiAoIXZhbGlkYXRpb25SZXN1bHQudmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzKTtcbiAgfVxuXG4gIC8vIDMuIFJvdXRlIHRvIGFwcHJvcHJpYXRlIHBpcGVsaW5lIGJhc2VkIG9uIGVudmlyb25tZW50XG4gIHN3aXRjaCAoZW52VHlwZSkge1xuICAgIGNhc2UgJ2Jyb3dzZXInOiB7XG4gICAgICAvLyBCcm93c2VyIHBpcGVsaW5lIC0gaHlkcmF0ZSBSZWFjdCBhcHBcbiAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgcGF0aCB0aGF0IHJ1bnMgaW4gdGhlIGJyb3dzZXJcbiAgICAgIHB1cmVub3coe1xuICAgICAgICBhcHA6ICh7IHJvdXRlciB9KSA9PiBjb25maWcuYXBwKHsgcm91dGVyIH0pLFxuICAgICAgICByb3V0ZXI6IHB1cmVub3dSb3V0ZXIoe1xuICAgICAgICAgIHJvdXRlcjogY29uZmlnLnJvdXRlci5nZXRSb3V0ZXMoKSBhcyBQdXJlbm93Um91dGVbXSxcbiAgICAgICAgICBkZWZhdWx0czogY29uZmlnLnJvdXRlci5kZWZhdWx0cyBhcyBQdXJlbm93Um91dGVyRGVmYXVsdHMsXG4gICAgICAgIH0pLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHN0YWdlOiBjb25maWcuc3RhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgJ2xhbWJkYSc6XG4gICAgY2FzZSAnY2RrJzoge1xuICAgICAgLy8gTGFtYmRhIGFuZCBDREsgcGlwZWxpbmVzIHJlcXVpcmUgc2VydmVyLXNpZGUgY29kZVxuICAgICAgLy8gVGhlc2Ugc2hvdWxkIHVzZSB0aGUgc2VydmVyLXNpZGUgZW50cnkgcG9pbnQgZnJvbSBAY29yZS9ydW50aW1lLXdlYlxuICAgICAgY29uc29sZS5sb2coJ1tSdW50aW1lXSBTZXJ2ZXItc2lkZSBwaXBlbGluZSBkZXRlY3RlZCAoJXMpJywgZW52VHlwZSk7XG4gICAgICBwdXJlbm93KHtcbiAgICAgICAgYXBwOiAoeyByb3V0ZXIgfSkgPT4gY29uZmlnLmFwcCh7IHJvdXRlciB9KSxcbiAgICAgICAgcm91dGVyOiBwdXJlbm93Um91dGVyKHtcbiAgICAgICAgICByb3V0ZXI6IGNvbmZpZy5yb3V0ZXIuZ2V0Um91dGVzKCkgYXMgUHVyZW5vd1JvdXRlW10sXG4gICAgICAgICAgZGVmYXVsdHM6IGNvbmZpZy5yb3V0ZXIuZGVmYXVsdHMgYXMgUHVyZW5vd1JvdXRlckRlZmF1bHRzLFxuICAgICAgICB9KSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdbUnVudGltZSBXZWJdIExhbWJkYSBydW50aW1lIGRldGVjdGVkLCBza2lwcGluZyBicm93c2VyIHJlbmRlcmluZyBwaXBlbGluZScpO1xuICAgICAgLy8gdGhyb3cgbmV3IEVudmlyb25tZW50RGV0ZWN0aW9uRXJyb3IoXG4gICAgICAvLyAgIGBTZXJ2ZXItc2lkZSBlbnZpcm9ubWVudCBkZXRlY3RlZCAoJHtlbnZUeXBlfSkuIGAgK1xuICAgICAgLy8gICBgVXNlIHRoZSBzZXJ2ZXItc2lkZSBlbnRyeSBwb2ludCBmcm9tICdAY29yZS9ydW50aW1lLXdlYicgZm9yIExhbWJkYSBhbmQgQ0RLIGNvbnRleHRzLmAsXG4gICAgICAvLyApO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLmxvZygnW1J1bnRpbWUgV2ViXSBVbmtub3duIGVudmlyb25tZW50IHR5cGU6ICVzJywgZW52VHlwZSk7XG4gICAgICBicmVhaztcbiAgICAvLyB0aHJvdyBuZXcgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvcihcbiAgICAvLyAgIGBVbmtub3duIGVudmlyb25tZW50IHR5cGU6ICR7ZW52VHlwZX1gLFxuICAgIC8vICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBicm93c2VyIHBpcGVsaW5lIGZvciBSZWFjdCBoeWRyYXRpb24uXG4gKiBUaGlzIGlzIGJyb3dzZXItc2FmZSBjb2RlIHRoYXQgZG9lc24ndCBpbXBvcnQgZnJvbSBAY29yZS8uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVCcm93c2VyUGlwZWxpbmUoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEVuc3VyZSB3ZSdyZSBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVudmlyb25tZW50RGV0ZWN0aW9uRXJyb3IoJ0Jyb3dzZXIgZW52aXJvbm1lbnQgcmVxdWlyZWQgZm9yIGJyb3dzZXIgcGlwZWxpbmUnKTtcbiAgfVxuXG4gIC8vIEltcG9ydCBSZWFjdCBET00gZm9yIGh5ZHJhdGlvblxuICBjb25zdCB7IGh5ZHJhdGVSb290LCBjcmVhdGVSb290IH0gPSBhd2FpdCBpbXBvcnQoJ3JlYWN0LWRvbS9jbGllbnQnKTtcbiAgY29uc3QgeyBjcmVhdGVCcm93c2VyUm91dGVyIH0gPSBhd2FpdCBpbXBvcnQoJ3JlYWN0LXJvdXRlcicpO1xuICBjb25zdCBSZWFjdCA9IGF3YWl0IGltcG9ydCgncmVhY3QnKTtcblxuICAvLyBHZXQgRE9NIGVsZW1lbnRzXG4gIGNvbnN0IHJvb3RQdXJlbm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QtcHVyZW5vdycpO1xuICBjb25zdCByb290SW50ZXJuYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdC1pbnRlcm5hbCcpO1xuXG4gIC8vIERldGVybWluZSB3aGljaCByb290IGVsZW1lbnQgdG8gdXNlXG4gIGNvbnN0IHJvb3RFbGVtZW50ID0gcm9vdFB1cmVub3cgfHwgcm9vdEludGVybmFsO1xuXG4gIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnW1J1bnRpbWVdIFJvb3QgZWxlbWVudCBub3QgZm91bmQuICcgK1xuICAgICAgJ0Vuc3VyZSB5b3VyIEhUTUwgaW5jbHVkZXMgPGRpdiBpZD1cInJvb3QtcHVyZW5vd1wiPjwvZGl2PiBvciA8ZGl2IGlkPVwicm9vdC1pbnRlcm5hbFwiPjwvZGl2PicsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEdldCByb3V0ZXMgZnJvbSB0aGUgcm91dGVyIC0gdXNlIHJvdXRlcyBwcm9wZXJ0eSBvciBnZXRSb3V0ZXMgbWV0aG9kXG4gIGNvbnN0IHJvdXRlcyA9IGNvbmZpZy5yb3V0ZXIucm91dGVzIHx8IChjb25maWcucm91dGVyIGFzIGFueSkuZ2V0Um91dGVzPy4oKSB8fCBbXTtcblxuICAvLyBDcmVhdGUgYnJvd3NlciByb3V0ZXIgLSBjYXN0IHJvdXRlcyB0byBhbnkgdG8gYXZvaWQgdHlwZSBpc3N1ZXMgd2l0aCBkaWZmZXJlbnQgcmVhY3Qtcm91dGVyIHZlcnNpb25zXG4gIGNvbnN0IGJyb3dzZXJSb3V0ZXIgPSBjcmVhdGVCcm93c2VyUm91dGVyKHJvdXRlcyBhcyBhbnkpO1xuXG4gIC8vIENyZWF0ZSB0aGUgYXBwIGVsZW1lbnQgLSBwYXNzIHRoZSBicm93c2VyIHJvdXRlclxuICBjb25zdCBBcHBFbGVtZW50ID0gY29uZmlnLmFwcCh7IHJvdXRlcjogYnJvd3NlclJvdXRlciBhcyBhbnkgfSk7XG5cbiAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGh5ZHJhdGUgKFNTUiBIVE1MIGV4aXN0cykgb3IgcmVuZGVyIGZyZXNoXG4gIGlmIChyb290UHVyZW5vdz8uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgLy8gSHlkcmF0ZSBTU1IgSFRNTFxuICAgIGNvbnNvbGUubG9nKCdbUnVudGltZV0gSHlkcmF0aW5nIFNTUiBIVE1MLi4uJyk7XG4gICAgaHlkcmF0ZVJvb3Qocm9vdEVsZW1lbnQsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuU3RyaWN0TW9kZSwgbnVsbCwgQXBwRWxlbWVudCkpO1xuICAgIGNvbnNvbGUubG9nKCdbUnVudGltZV0gSHlkcmF0aW9uIGNvbXBsZXRlJyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRnJlc2ggcmVuZGVyXG4gICAgY29uc29sZS5sb2coJ1tSdW50aW1lXSBDcmVhdGluZyBmcmVzaCBSZWFjdCByb290Li4uJyk7XG4gICAgY29uc3Qgcm9vdCA9IGNyZWF0ZVJvb3Qocm9vdEVsZW1lbnQpO1xuICAgIHJvb3QucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuU3RyaWN0TW9kZSwgbnVsbCwgQXBwRWxlbWVudCkpO1xuICAgIGNvbnNvbGUubG9nKCdbUnVudGltZV0gUmVuZGVyIGNvbXBsZXRlJyk7XG4gIH1cbn1cbiIsICIvKlxuICogRWxhc3RpYyBMaWNlbnNlIDIuMFxuICogQ29weXJpZ2h0IChDKSAyMDI1XHUyMDEzcHJlc2VudCBSYW1hbiBNYXJvemF1LCBXb3JrIFRhcmdldCBJbnNpZ2h0IEZ1bmN0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQ29udGFjdDogcmFtYW5Ad29ya3RpZi5jb21cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yazogd29ya3RpZi5wdXJlbm93LmNkayA8d29ya3RpZl9wdXJlbm93X2Nkaz4uXG4gKiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMDsgc2VlIHRoZSBMSUNFTlNFIGZpbGVcbiAqIG9yIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vbGljZW5zaW5nL2VsYXN0aWMtbGljZW5zZSBmb3IgZGV0YWlscy5cbiAqXG4gKiBSZS1saWNlbnNpbmcgbm90aWNlOlxuICogICBUaGlzIGZpbGUgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJ1c2luZXNzIFNvdXJjZSBMaWNlbnNlIDEuMSAoQlVTTC0xLjEpLlxuICogICBBcyBvZiAyMDI1LTA5LTIyLCBpdCBpcyByZS1saWNlbnNlZCB1bmRlciBFbGFzdGljIExpY2Vuc2UgMi4wLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFbGFzdGljLTIuMFxuICovXG5cblxuaW1wb3J0IHR5cGUgeyBQdXJlbm93Q29uZmlnIH0gZnJvbSAnQHdvcmt0aWYvcHVyZW5vdyc7XG5cbi8qKlxuICogUnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHRoYXQgZXh0ZW5kcyBQdXJlbm93Q29uZmlnLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIGFkZHMgcnVudGltZSB3b3Jrc3BhY2UgZnVuY3Rpb25hbGl0eSB3aGlsZSBwcmVzZXJ2aW5nXG4gKiBhbGwgZXhpc3RpbmcgcHVyZW5vdyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb25cbiAqIGlzIG1lcmdlZCB3aXRoIHB1cmVub3cgY29uZmlndXJhdGlvbiByYXRoZXIgdGhhbiByZXBsYWNpbmcgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZUNvbmZpZyBleHRlbmRzIFB1cmVub3dDb25maWcge1xuICAvKipcbiAgICogUnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAqIFRoZXNlIHNldHRpbmdzIGV4dGVuZCBwdXJlbm93IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCByZXBsYWNpbmcgaXQuXG4gICAqL1xuICBydW50aW1lPzoge1xuICAgIC8qKiBFbmFibGUgUnVudGltZSBDb3JlIHN0YWNrIGRlcGxveW1lbnQgKGV4dGVuZHMgcHVyZW5vdydzIHR3by1zdGFjayBhcmNoaXRlY3R1cmUpICovXG4gICAgZW5hYmxlVGhpcmRTdGFjaz86IGJvb2xlYW47XG5cbiAgICAvKiogUnVudGltZSB3ZWIgbW9kZSBjb25maWd1cmF0aW9uICovXG4gICAgcnVudGltZVdlYk1vZGU/OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG4gICAgLyoqIEFkZGl0aW9uYWwgcnVudGltZSBmZWF0dXJlcyB0byBlbmFibGUgKi9cbiAgICBhZGRpdGlvbmFsRmVhdHVyZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKiBEZXZlbG9wbWVudCBzZXJ2ZXIgZW5oYW5jZW1lbnRzICovXG4gICAgZGV2U2VydmVyRW5oYW5jZW1lbnRzPzoge1xuICAgICAgLyoqIEVuYWJsZSBob3QgbW9kdWxlIHJlcGxhY2VtZW50ICovXG4gICAgICBob3RSZWxvYWQ/OiBib29sZWFuO1xuICAgICAgLyoqIEVuYWJsZSBkZWJ1ZyBtb2RlIHdpdGggYWRkaXRpb25hbCBsb2dnaW5nICovXG4gICAgICBkZWJ1Z01vZGU/OiBib29sZWFuO1xuICAgICAgLyoqIEVuYWJsZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nICovXG4gICAgICBwZXJmb3JtYW5jZU1vbml0b3Jpbmc/OiBib29sZWFuO1xuICAgIH07XG5cbiAgICAvKiogQnVpbGQgb3B0aW1pemF0aW9ucyAqL1xuICAgIGJ1aWxkT3B0aW1pemF0aW9ucz86IHtcbiAgICAgIC8qKiBFbmFibGUgYnVuZGxlIGFuYWx5c2lzICovXG4gICAgICBidW5kbGVBbmFseXNpcz86IGJvb2xlYW47XG4gICAgICAvKiogRW5hYmxlIHRyZWUgc2hha2luZyAqL1xuICAgICAgdHJlZXNoYWtpbmc/OiBib29sZWFuO1xuICAgICAgLyoqIEVuYWJsZSBjb2RlIG1pbmlmaWNhdGlvbiAqL1xuICAgICAgY29kZU1pbmlmaWNhdGlvbj86IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG1lcmdpbmcgdXRpbGl0eSB0aGF0IHByZXNlcnZlcyBhbGwgcHVyZW5vdyBzZXR0aW5nc1xuICogd2hpbGUgYWRkaW5nIHJ1bnRpbWUtc3BlY2lmaWMgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0gcHVyZW5vd0NvbmZpZyAtIEJhc2UgcHVyZW5vdyBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gcnVudGltZUNvbmZpZyAtIFJ1bnRpbWUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0byBtZXJnZVxuICogQHJldHVybnMgTWVyZ2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBhbGwgcHVyZW5vdyBzZXR0aW5ncyBwcmVzZXJ2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlUnVudGltZUNvbmZpZyhcbiAgcHVyZW5vd0NvbmZpZzogUHVyZW5vd0NvbmZpZyxcbiAgcnVudGltZUNvbmZpZz86IFBhcnRpYWw8UnVudGltZUNvbmZpZ1sncnVudGltZSddPixcbik6IFJ1bnRpbWVDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLnB1cmVub3dDb25maWcsXG4gICAgcnVudGltZToge1xuICAgICAgZW5hYmxlVGhpcmRTdGFjazogZmFsc2UsXG4gICAgICBydW50aW1lV2ViTW9kZTogJ2RldmVsb3BtZW50JyxcbiAgICAgIGFkZGl0aW9uYWxGZWF0dXJlczogW10sXG5cbiAgICAgIC8vIEB0b2RvOiBjcml0aWFsIHRvIGltcHJvdmUgdGhpcyBzb2x1dGlvbi4gT3RoZXJ3aXNlIFx1MjAxMz4gVU5ORUNFU1NBUlkgT1BUSU9OUyBUT1RBTExZXG4gICAgICBkZXZTZXJ2ZXJFbmhhbmNlbWVudHM6IHtcbiAgICAgICAgaG90UmVsb2FkOiB0cnVlLFxuICAgICAgICBkZWJ1Z01vZGU6IGZhbHNlLFxuICAgICAgICBwZXJmb3JtYW5jZU1vbml0b3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGJ1aWxkT3B0aW1pemF0aW9uczoge1xuICAgICAgICBidW5kbGVBbmFseXNpczogZmFsc2UsXG4gICAgICAgIHRyZWVzaGFraW5nOiB0cnVlLFxuICAgICAgICBjb2RlTWluaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIC4uLnJ1bnRpbWVDb25maWcsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgY29uZmlndXJhdGlvbiBpcyBhIFJ1bnRpbWVDb25maWcuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIHJ1bnRpbWUtc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSdW50aW1lQ29uZmlnKGNvbmZpZzogYW55KTogY29uZmlnIGlzIFJ1bnRpbWVDb25maWcge1xuICByZXR1cm4gISEoY29uZmlnICYmIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmICdydW50aW1lJyBpbiBjb25maWcpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZyb20gYSBSdW50aW1lQ29uZmlnLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBSdW50aW1lQ29uZmlnIHRvIGV4dHJhY3QgZnJvbVxuICogQHJldHVybnMgUnVudGltZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJ1bnRpbWVDb25maWcoY29uZmlnOiBSdW50aW1lQ29uZmlnKTogUnVudGltZUNvbmZpZ1sncnVudGltZSddIHtcbiAgcmV0dXJuIGNvbmZpZy5ydW50aW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIFJ1bnRpbWVDb25maWcgZnJvbSBhIGJhc2UgUHVyZW5vd0NvbmZpZyB3aXRoIGRlZmF1bHQgcnVudGltZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gcHVyZW5vd0NvbmZpZyAtIEJhc2UgcHVyZW5vdyBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSdW50aW1lQ29uZmlnIHdpdGggZGVmYXVsdCBydW50aW1lIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW50aW1lQ29uZmlnKHB1cmVub3dDb25maWc6IFB1cmVub3dDb25maWcpOiBSdW50aW1lQ29uZmlnIHtcbiAgcmV0dXJuIG1lcmdlUnVudGltZUNvbmZpZyhwdXJlbm93Q29uZmlnKTtcbn1cbiJdLAog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LFFBQVEsSUFBSSwrQ0FBZ0RHLENBQU8sS0FDbkUsV0FBUSxDQUNOLElBQUssQ0FBQyxDQUFFLE9BQUFFLENBQU8sSUFBTUwsRUFBTyxJQUFJLENBQUUsT0FBQUssQ0FBTyxDQUFDLEVBQzFDLFVBQVEsaUJBQWMsQ0FDcEIsT0FBUUwsRUFBTyxPQUFPLFVBQVUsRUFDaEMsU0FBVUEsRUFBTyxPQUFPLFFBQzFCLENBQUMsRUFDRCxPQUFRLENBQ04sWUFBYUEsRUFBTyxZQUNwQixNQUFPQSxFQUFPLEtBQ2hCLENBQ0YsQ0FBQyxFQUNELEtBTUYsQ0FFQSxRQUNFLFFBQVEsSUFBSSw2Q0FBOENHLENBQU8sRUFDakUsS0FJSixDQUNGLENDN0lPLFNBQVNHLEVBQ2RDLEVBQ0FDLEVBQ2UsQ0FDZixNQUFPLENBQ0wsR0FBR0QsRUFDSCxRQUFTLENBQ1AsaUJBQWtCLEdBQ2xCLGVBQWdCLGNBQ2hCLG1CQUFvQixDQUFDLEVBR3JCLHNCQUF1QixDQUNyQixVQUFXLEdBQ1gsVUFBVyxHQUNYLHNCQUF1QixFQUN6QixFQUNBLG1CQUFvQixDQUNsQixlQUFnQixHQUNoQixZQUFhLEdBQ2IsaUJBQWtCLEVBQ3BCLEVBQ0EsR0FBR0MsQ0FDTCxDQUNGLENBQ0YsQ0FRTyxTQUFTQyxFQUFnQkMsRUFBc0MsQ0FDcEUsTUFBTyxDQUFDLEVBQUVBLEdBQVUsT0FBT0EsR0FBVyxVQUFZLFlBQWFBLEVBQ2pFLENBUU8sU0FBU0MsRUFBcUJELEVBQWlELENBQ3BGLE9BQU9BLEVBQU8sT0FDaEIsQ0FRTyxTQUFTRSxFQUFvQkwsRUFBNkMsQ0FDL0UsT0FBT0QsRUFBbUJDLENBQWEsQ0FDekMiLAogICJuYW1lcyI6IFsiaW5kZXhfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJCcm93c2VyUGlwZWxpbmUiLCAiQ29uZmlnVmFsaWRhdGlvbkVycm9yIiwgIkVudmlyb25tZW50RGV0ZWN0aW9uRXJyb3IiLCAiY3JlYXRlUnVudGltZUNvbmZpZyIsICJleHRyYWN0UnVudGltZUNvbmZpZyIsICJpc1J1bnRpbWVDb25maWciLCAiaXNWYWxpZFNlcnZpY2VOYW1lIiwgIm1lcmdlUnVudGltZUNvbmZpZyIsICJwdXJld2ViIiwgIl9fdG9Db21tb25KUyIsICJfX3JlRXhwb3J0IiwgIlJlYWN0IiwgImltcG9ydF9jbGllbnQiLCAiaW1wb3J0X3JlYWN0X3JvdXRlciIsICJCcm93c2VyUGlwZWxpbmUiLCAiY29uZmlnIiwgImNvbnRleHQiLCAiYnJvd3NlclJvdXRlciIsICJhcHBFbGVtZW50IiwgInJvdXRlclByb3ZpZGVyIiwgImVycm9yIiwgInJvdXRlcyIsICJjb250YWluZXIiLCAiYmFzZVVybCIsICJzdGFnZSIsICJpc1ZhbGlkU2VydmljZU5hbWUiLCAic2VydmljZU5hbWUiLCAiaW1wb3J0X3B1cmVub3ciLCAiQ29uZmlnVmFsaWRhdGlvbkVycm9yIiwgImVycm9ycyIsICJFbnZpcm9ubWVudERldGVjdGlvbkVycm9yIiwgIm1lc3NhZ2UiLCAiZGV0ZWN0RW52aXJvbm1lbnQiLCAiYXJnIiwgInZhbGlkYXRlQ29uZmlnIiwgImNvbmZpZyIsICJpc0NES0NvbnRleHQiLCAicHVyZXdlYiIsICJlbnZUeXBlIiwgInZhbGlkYXRpb25SZXN1bHQiLCAicm91dGVyIiwgIm1lcmdlUnVudGltZUNvbmZpZyIsICJwdXJlbm93Q29uZmlnIiwgInJ1bnRpbWVDb25maWciLCAiaXNSdW50aW1lQ29uZmlnIiwgImNvbmZpZyIsICJleHRyYWN0UnVudGltZUNvbmZpZyIsICJjcmVhdGVSdW50aW1lQ29uZmlnIl0KfQo=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import { BeforeInstance,
|
|
2
|
+
import { BeforeInstance, Maybe } from '@worktif/utils';
|
|
3
3
|
import type { RuntimeConfig, RuntimeStackConfig } from './runtime-extensions.types';
|
|
4
4
|
/**
|
|
5
5
|
* RuntimeExtensions service provides runtime-specific functionality that extends
|
|
@@ -12,12 +12,7 @@ import type { RuntimeConfig, RuntimeStackConfig } from './runtime-extensions.typ
|
|
|
12
12
|
* - Configure Runtime Core stack deployment
|
|
13
13
|
* - Extend purenow functionality without replacing it
|
|
14
14
|
*/
|
|
15
|
-
export declare class RuntimeExtensions
|
|
16
|
-
/**
|
|
17
|
-
* Logger instance for RuntimeExtensions service.
|
|
18
|
-
* Uses purenow's logging patterns with AWS provider.
|
|
19
|
-
*/
|
|
20
|
-
loggerInstance: import("@aws-lambda-powertools/logger").Logger;
|
|
15
|
+
export declare class RuntimeExtensions {
|
|
21
16
|
/**
|
|
22
17
|
* Runtime configuration with default values.
|
|
23
18
|
* Extends purenow configuration rather than replacing it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-extensions.service.d.ts","sourceRoot":"","sources":["../../../../../../src/core/services/runtime-extensions/runtime-extensions.service.ts"],"names":[],"mappings":"AAgBA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime-extensions.service.d.ts","sourceRoot":"","sources":["../../../../../../src/core/services/runtime-extensions/runtime-extensions.service.ts"],"names":[],"mappings":"AAgBA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EAKd,KAAK,EAEN,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEpF;;;;;;;;;;GAUG;AACH,qBACa,iBAAiB;IAY5B;;;OAGG;IACH,OAAO,CAAC,aAAa,CAcnB;IAEF;;;OAGG;;IAMH;;;OAGG;YAKW,2BAA2B;IAazC;;;;;;;OAOG;IAKU,gBAAgB,CAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA0B/B;;;;;;;OAOG;IAKU,aAAa,CACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA0B/B;;;;;;;OAOG;IAKU,yBAAyB,CACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IA6CrC;;;;;;OAMG;IAKU,mBAAmB,CAC9B,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,EAC9B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,IAAI,CAAC;IA0BhB;;;;;OAKG;IACI,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC;IAIlD;;;;;;OAMG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD;;;;;;OAMG;IAKU,aAAa,CACxB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;;;OAMG;IAKU,cAAc,CACzB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,IAAI,CAAC;CAgBjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@worktif/runtime",
|
|
3
|
-
"version": "0.3.0-edge.
|
|
3
|
+
"version": "0.3.0-edge.8",
|
|
4
4
|
"description": "Serverless web framework running on AWS Lambda with support for server-side rendering, caching, and CI/CD.",
|
|
5
5
|
"repository": "git@bitbucket.org:worktif/runtime-target.git",
|
|
6
6
|
"author": "Raman Marozau <raman@worktif.com>",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"migrate:seo:dry-run": "ts-node scripts/migrate-seo-metadata.ts --dry-run"
|
|
102
102
|
},
|
|
103
103
|
"dependencies": {
|
|
104
|
-
"@worktif/purenow": "^0.3.0-rc.
|
|
104
|
+
"@worktif/purenow": "^0.3.0-rc.23",
|
|
105
105
|
"@worktif/utils": "^0.2.32"
|
|
106
106
|
},
|
|
107
107
|
"devDependencies": {
|