forked from lispc/covid19-citymap-china
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bundle.js
2 lines (2 loc) · 168 KB
/
bundle.js
1
2
(()=>{var e={669:(e,t,r)=>{e.exports=r(609)},448:(e,t,r)=>{"use strict";var n=r(867),o=r(26),i=r(372),s=r(327),a=r(97),c=r(109),u=r(985),f=r(61),l=r(874),d=r(263);e.exports=function(e){return new Promise((function(t,r){var p,h=e.data,m=e.headers,v=e.responseType;function y(){e.cancelToken&&e.cancelToken.unsubscribe(p),e.signal&&e.signal.removeEventListener("abort",p)}n.isFormData(h)&&delete m["Content-Type"];var g=new XMLHttpRequest;if(e.auth){var b=e.auth.username||"",w=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";m.Authorization="Basic "+btoa(b+":"+w)}var x=a(e.baseURL,e.url);function E(){if(g){var n="getAllResponseHeaders"in g?c(g.getAllResponseHeaders()):null,i={data:v&&"text"!==v&&"json"!==v?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:n,config:e,request:g};o((function(e){t(e),y()}),(function(e){r(e),y()}),i),g=null}}if(g.open(e.method.toUpperCase(),s(x,e.params,e.paramsSerializer),!0),g.timeout=e.timeout,"onloadend"in g?g.onloadend=E:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(E)},g.onabort=function(){g&&(r(f("Request aborted",e,"ECONNABORTED",g)),g=null)},g.onerror=function(){r(f("Network Error",e,null,g)),g=null},g.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||l;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(f(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",g)),g=null},n.isStandardBrowserEnv()){var S=(e.withCredentials||u(x))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;S&&(m[e.xsrfHeaderName]=S)}"setRequestHeader"in g&&n.forEach(m,(function(e,t){void 0===h&&"content-type"===t.toLowerCase()?delete m[t]:g.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),v&&"json"!==v&&(g.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&g.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(p=function(e){g&&(r(!e||e&&e.type?new d("canceled"):e),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(p),e.signal&&(e.signal.aborted?p():e.signal.addEventListener("abort",p))),h||(h=null),g.send(h)}))}},609:(e,t,r)=>{"use strict";var n=r(867),o=r(849),i=r(321),s=r(185),a=function e(t){var r=new i(t),a=o(i.prototype.request,r);return n.extend(a,i.prototype,r),n.extend(a,r),a.create=function(r){return e(s(t,r))},a}(r(546));a.Axios=i,a.Cancel=r(263),a.CancelToken=r(972),a.isCancel=r(502),a.VERSION=r(288).version,a.all=function(e){return Promise.all(e)},a.spread=r(713),a.isAxiosError=r(268),e.exports=a,e.exports.default=a},263:e=>{"use strict";function t(e){this.message=e}t.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},t.prototype.__CANCEL__=!0,e.exports=t},972:(e,t,r)=>{"use strict";var n=r(263);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){var t,n=r._listeners.length;for(t=0;t<n;t++)r._listeners[t](e);r._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e){r.reason||(r.reason=new n(e),t(r.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},o.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,r)=>{"use strict";var n=r(867),o=r(327),i=r(782),s=r(572),a=r(185),c=r(875),u=c.validators;function f(e){this.defaults=e,this.interceptors={request:new i,response:new i}}f.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;void 0!==r&&c.assertOptions(r,{silentJSONParsing:u.transitional(u.boolean),forcedJSONParsing:u.transitional(u.boolean),clarifyTimeoutError:u.transitional(u.boolean)},!1);var n=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var i,f=[];if(this.interceptors.response.forEach((function(e){f.push(e.fulfilled,e.rejected)})),!o){var l=[s,void 0];for(Array.prototype.unshift.apply(l,n),l=l.concat(f),i=Promise.resolve(t);l.length;)i=i.then(l.shift(),l.shift());return i}for(var d=t;n.length;){var p=n.shift(),h=n.shift();try{d=p(d)}catch(e){h(e);break}}try{i=s(d)}catch(e){return Promise.reject(e)}for(;f.length;)i=i.then(f.shift(),f.shift());return i},f.prototype.getUri=function(e){return e=a(this.defaults,e),o(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},n.forEach(["delete","get","head","options"],(function(e){f.prototype[e]=function(t,r){return this.request(a(r||{},{method:e,url:t,data:(r||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){f.prototype[e]=function(t,r,n){return this.request(a(n||{},{method:e,url:t,data:r}))}})),e.exports=f},782:(e,t,r)=>{"use strict";var n=r(867);function o(){this.handlers=[]}o.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},97:(e,t,r)=>{"use strict";var n=r(793),o=r(303);e.exports=function(e,t){return e&&!n(t)?o(e,t):t}},61:(e,t,r)=>{"use strict";var n=r(481);e.exports=function(e,t,r,o,i){var s=new Error(e);return n(s,t,r,o,i)}},572:(e,t,r)=>{"use strict";var n=r(867),o=r(527),i=r(502),s=r(546),a=r(263);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new a("canceled")}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||s.adapter)(e).then((function(t){return c(e),t.data=o.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return i(t)||(c(e),t&&t.response&&(t.response.data=o.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},481:e=>{"use strict";e.exports=function(e,t,r,n,o){return e.config=t,r&&(e.code=r),e.request=n,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e}},185:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e,t){t=t||{};var r={};function o(e,t){return n.isPlainObject(e)&&n.isPlainObject(t)?n.merge(e,t):n.isPlainObject(t)?n.merge({},t):n.isArray(t)?t.slice():t}function i(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:o(void 0,e[r]):o(e[r],t[r])}function s(e){if(!n.isUndefined(t[e]))return o(void 0,t[e])}function a(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:o(void 0,e[r]):o(void 0,t[r])}function c(r){return r in t?o(e[r],t[r]):r in e?o(void 0,e[r]):void 0}var u={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c};return n.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=u[e]||i,o=t(e);n.isUndefined(o)&&t!==c||(r[e]=o)})),r}},26:(e,t,r)=>{"use strict";var n=r(61);e.exports=function(e,t,r){var o=r.config.validateStatus;r.status&&o&&!o(r.status)?t(n("Request failed with status code "+r.status,r.config,null,r.request,r)):e(r)}},527:(e,t,r)=>{"use strict";var n=r(867),o=r(546);e.exports=function(e,t,r){var i=this||o;return n.forEach(r,(function(r){e=r.call(i,e,t)})),e}},546:(e,t,r)=>{"use strict";var n=r(867),o=r(16),i=r(481),s=r(874),a={"Content-Type":"application/x-www-form-urlencoded"};function c(e,t){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var u,f={transitional:s,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(u=r(448)),u),transformRequest:[function(e,t){return o(t,"Accept"),o(t,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e)?e:n.isArrayBufferView(e)?e.buffer:n.isURLSearchParams(e)?(c(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):n.isObject(e)||t&&"application/json"===t["Content-Type"]?(c(t,"application/json"),function(e,t,r){if(n.isString(e))try{return(0,JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||f.transitional,r=t&&t.silentJSONParsing,o=t&&t.forcedJSONParsing,s=!r&&"json"===this.responseType;if(s||o&&n.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(s){if("SyntaxError"===e.name)throw i(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){f.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){f.headers[e]=n.merge(a)})),e.exports=f},874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},288:e=>{e.exports={version:"0.26.1"}},849:e=>{"use strict";e.exports=function(e,t){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;n++)r[n]=arguments[n];return e.apply(t,r)}}},327:(e,t,r)=>{"use strict";var n=r(867);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,r){if(!t)return e;var i;if(r)i=r(t);else if(n.isURLSearchParams(t))i=t.toString();else{var s=[];n.forEach(t,(function(e,t){null!=e&&(n.isArray(e)?t+="[]":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),s.push(o(t)+"="+o(e))})))})),i=s.join("&")}if(i){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}},303:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},372:(e,t,r)=>{"use strict";var n=r(867);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),n.isString(o)&&a.push("path="+o),n.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},268:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},985:(e,t,r)=>{"use strict";var n=r(867);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");function o(e){var n=e;return t&&(r.setAttribute("href",n),n=r.href),r.setAttribute("href",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}return e=o(window.location.href),function(t){var r=n.isString(t)?o(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},16:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},109:(e,t,r)=>{"use strict";var n=r(867),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,r,i,s={};return e?(n.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=n.trim(e.substr(0,i)).toLowerCase(),r=n.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([r]):s[t]?s[t]+", "+r:r}})),s):s}},713:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},875:(e,t,r)=>{"use strict";var n=r(288).version,o={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){o[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var i={};o.transitional=function(e,t,r){function o(e,t){return"[Axios v"+n+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,n,s){if(!1===e)throw new Error(o(n," has been removed"+(t?" in "+t:"")));return t&&!i[n]&&(i[n]=!0,console.warn(o(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,s)}},e.exports={assertOptions:function(e,t,r){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),o=n.length;o-- >0;){var i=n[o],s=t[i];if(s){var a=e[i],c=void 0===a||s(a,i,e);if(!0!==c)throw new TypeError("option "+i+" must be "+c)}else if(!0!==r)throw Error("Unknown option "+i)}},validators:o}},867:(e,t,r)=>{"use strict";var n=r(849),o=Object.prototype.toString;function i(e){return Array.isArray(e)}function s(e){return void 0===e}function a(e){return"[object ArrayBuffer]"===o.call(e)}function c(e){return null!==e&&"object"==typeof e}function u(e){if("[object Object]"!==o.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function f(e){return"[object Function]"===o.call(e)}function l(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),i(e))for(var r=0,n=e.length;r<n;r++)t.call(null,e[r],r,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}e.exports={isArray:i,isArrayBuffer:a,isBuffer:function(e){return null!==e&&!s(e)&&null!==e.constructor&&!s(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===o.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&a(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:c,isPlainObject:u,isUndefined:s,isDate:function(e){return"[object Date]"===o.call(e)},isFile:function(e){return"[object File]"===o.call(e)},isBlob:function(e){return"[object Blob]"===o.call(e)},isFunction:f,isStream:function(e){return c(e)&&f(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===o.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:l,merge:function e(){var t={};function r(r,n){u(t[n])&&u(r)?t[n]=e(t[n],r):u(r)?t[n]=e({},r):i(r)?t[n]=r.slice():t[n]=r}for(var n=0,o=arguments.length;n<o;n++)l(arguments[n],r);return t},extend:function(e,t,r){return l(t,(function(t,o){e[o]=r&&"function"==typeof t?n(t,r):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}}},144:function(e,t){var r,n;r=function(e,t){"use strict";var r=5e3,n="callback";function o(){return"jsonp_"+Date.now()+"_"+Math.ceil(1e5*Math.random())}function i(e){try{delete window[e]}catch(t){window[e]=void 0}}function s(e){var t=document.getElementById(e);t&&document.getElementsByTagName("head")[0].removeChild(t)}t.exports=function(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],a=e,c=t.timeout||r,u=t.jsonpCallback||n,f=void 0;return new Promise((function(r,n){var l=t.jsonpCallbackFunction||o(),d=u+"_"+l;window[l]=function(e){r({ok:!0,json:function(){return Promise.resolve(e)}}),f&&clearTimeout(f),s(d),i(l)},a+=-1===a.indexOf("?")?"?":"&";var p=document.createElement("script");p.setAttribute("src",""+a+u+"="+l),t.charset&&p.setAttribute("charset",t.charset),t.nonce&&p.setAttribute("nonce",t.nonce),t.referrerPolicy&&p.setAttribute("referrerPolicy",t.referrerPolicy),p.id=d,document.getElementsByTagName("head")[0].appendChild(p),f=setTimeout((function(){n(new Error("JSONP request to "+e+" timed out")),i(l),s(d),window[l]=function(){i(l)}}),c),p.onerror=function(){n(new Error("JSONP request to "+e+" failed")),i(l),s(d),f&&clearTimeout(f)}}))}},void 0===(n=r.apply(t,[t,e]))||(e.exports=n)},182:function(e,t,r){"use strict";e=r.nmd(e);var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function s(e){try{c(n.next(e))}catch(e){i(e)}}function a(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,n=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}},i=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)s.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return s};t.__esModule=!0,t.getColor=t.getConfirmedCount=t.loadData=void 0;var a=r(856),c=r(669),u=r(144),f=new Set(a),l=new Map;f.forEach((function(e){l.set(e.substr(0,2),e)}));var d=[[0,"#FFDFDF"],[10,"#FFBFBF"],[20,"#FF9F9F"],[30,"#FF7F7F"],[40,"#FF5F5F"],[50,"#FF3F3F"],[60,"#FF1F1F"],[70,"#FF0000"],[80,"#E70000"],[90,"#CF0000"],[100,"#B80000"],[200,"#A00000"],[500,"#880000"],[1e3,"#710000"],[2e3,"#590000"],[5e3,"#420000"]],p=new Set(["外地来京人员","未知","未明确地区","所属地待确认","待确认","地区待确认","境外输入","境外输入人员","外省输入","省十里丰监狱","雄安新区"]),h=new Map([["北京","北京市"],["天津","天津市"],["上海","上海市"],["香港","香港特别行政区"],["澳门","澳门特别行政区"],["台湾","台湾省"]]),m=new Map([["巩义","郑州市"],["固始","信阳市"],["滑县","安阳市"],["长垣","新乡市"],["永城","商丘市"],["邓州","南阳市"],["韩城","渭南市"],["杨凌示范区","咸阳市"],["宁东","银川市"],["满洲里","呼伦贝尔市"],["阿拉善盟","阿拉善盟"],["大兴安岭","大兴安岭地区"],["宿松","安庆市"],["赣江新区","南昌市"],["公主岭","四平市"],["梅河口","通化市"],["两江新区","渝北区"],["万盛","綦江区"],["第四师","可克达拉市"],["第六师","五家渠市"],["第七师","塔城地区"],["第八师","石河子市"],["第九师","塔城地区"],["第十二师","乌鲁木齐市"]]),v=new Map([["重庆-高新区","九龙坡区"]]);function y(){return n(this,void 0,void 0,(function(){var e,t;return o(this,(function(r){switch(r.label){case 0:return e="https://news.sina.com.cn/project/fymap/ncp2020_full_data.json","undefined"==typeof document?[3,3]:[4,u(e,{jsonpCallbackFunction:"jsoncallback"})];case 1:return[4,r.sent().json()];case 2:return[2,r.sent().data.list];case 3:return[4,c.default.get(e)];case 4:return t=r.sent(),[2,JSON.parse(t.data.replace(/^jsoncallback\(|\)\;/g,"")).data.list]}}))}))}function g(e,t){if(v.has(e+"-"+t))return v.get(e+"-"+t);if(m.has(t))return m.get(t);var r=t.substr(0,2);if(l.has(r)){var n=l.get(r);return console.log(e,t,"=>",n),n}return console.log("!!!Cannot match, discard:",e,t),""}function b(e){var t,r,n,o,s=new Map;try{for(var a=i(e),c=a.next();!c.done;c=a.next()){var u=c.value;if(h.has(u.name))s.set(h.get(u.name),Number(u.econNum));else try{for(var l=(n=void 0,i(u.city)),d=l.next();!d.done;d=l.next()){var m=d.value,v=u.name,y=m.name,b=Number(m.econNum);if(0!=b&&!p.has(y)){var w=m.mapName;(f.has(w)||""!=(w=g(v,y)))&&(s.has(w)?s.set(w,s.get(w)+b):s.set(w,b))}}}catch(e){n={error:e}}finally{try{d&&!d.done&&(o=l.return)&&o.call(l)}finally{if(n)throw n.error}}}}catch(e){t={error:e}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return console.log("confirmedCount",s),s}t.loadData=y,t.getConfirmedCount=b,t.getColor=function(e){var t,r;if(0==e)return"#FFFFFF";try{for(var n=i(d.entries()),o=n.next();!o.done;o=n.next()){var a=s(o.value,2),c=a[0],u=s(a[1],1)[0];if(0!=c&&e<u)return d[c-1][1]}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return"#420000"},r.c[r.s]===e&&y().then((function(e){b(e)}))},138:(e,t,r)=>{"use strict";var n=r(182);let o,i,s,a;const c={backgroundColor:"#FFFFFF"};let u=new Map;const f=new Map;function l(e){let t=0;return u.has(e)&&(t=u.get(e)),t}function d(e){return(0,n.getColor)(l(e))}function p(e){const t=e.pixel;let r=i.getDistrictByContainerPos(t);if(r||(r=s.getDistrictByContainerPos(t)),r){const e=":";if(["110000","120000","310000","710000","810000","820000"].includes(r.adcode_pro.toString())){const t=r.NAME_CHN.replace("市","")+e+l(r.NAME_CHN),n=new AMap.LabelMarker({position:[r.x,r.y],text:{content:t,style:c},rank:2});a.add(n)}else AMap.plugin("AMap.DistrictSearch",(function(){const t="500000"==r.adcode_pro.toString(),n=t?2:1;function o(n){if(t){for(const t of n.districtList[0].districtList[0].districtList){let n=l(t.name);if(0==n)continue;const o={position:t.center,text:{content:t.name+e+n,style:c},rank:t.adcode==r.adcode.toString()?2:1},i=new AMap.LabelMarker(o);a.add(i)}let t=0;const o=n.districtList[0].districtList[1];for(const e of o.districtList)t+=l(e.name);if(t>0){const n={position:o.center,text:{content:o.name+e+t,style:c},rank:"500100"==r.adcode_cit.toString()?2:1},i=new AMap.LabelMarker(n);a.add(i)}}else for(const t of n.districtList[0].districtList){let n=l(t.name);if(0==n)continue;const o=t.name.replace("市","")+e+n,i={position:t.center,text:{content:o,style:c},rank:t.adcode==r.adcode.toString()?2:1},s=new AMap.LabelMarker(i);a.add(s)}}const i=new AMap.DistrictSearch({level:"district",subdistrict:n}),s=r.adcode_pro.toString();f.get(s)?o(f.get(s)):i.search(s,(function(e,t){"complete"==e&&(f.set(s,t),o(t))}))}))}}document.addEventListener("DOMContentLoaded",(function(){(0,n.loadData)().then((e=>{u=(0,n.getConfirmedCount)(e),u.get("徐州市")&&u.set("邳州市",u.get("徐州市")),u.get("济南市")&&u.set("莱芜市",u.get("济南市")),o=new AMap.Map("container",{zoom:window.screen.width<=600?3:4,center:[104.5,38.5],pitch:0,viewMode:"3D"}),i=new AMap.DistrictLayer.Province({zIndex:12,adcode:["110000","120000","130000","140000","150000","210000","220000","230000","310000","320000","330000","340000","350000","360000","370000","410000","420000","430000","440000","450000","460000","510000","520000","530000","540000","610000","620000","630000","640000","650000","710000","810000","820000"],depth:1,styles:{fill:function(e){return d(e.NAME_CHN)},"province-stroke":"black","city-stroke":"cornflowerblue","county-stroke":"rgba(255,255,255,0.5)"}}),i.setMap(o),s=new AMap.DistrictLayer.Province({zIndex:12,adcode:["500000"],depth:2,styles:{fill:function(e){return d(e.NAME_CHN)},"province-stroke":"black","city-stroke":"cornflowerblue","county-stroke":"rgba(255,255,255,0.5)"}}),s.setMap(o),o.on("complete",(function(){a=new AMap.LabelsLayer({fitView:!0}),o.add(a),o.on("click",p)}))}))}))},856:e=>{"use strict";e.exports=JSON.parse('["北京市","天津市","石家庄市","唐山市","秦皇岛市","邯郸市","邢台市","保定市","张家口市","承德市","沧州市","廊坊市","衡水市","太原市","大同市","阳泉市","长治市","晋城市","朔州市","晋中市","运城市","忻州市","临汾市","吕梁市","呼和浩特市","包头市","乌海市","赤峰市","通辽市","鄂尔多斯市","呼伦贝尔市","巴彦淖尔市","乌兰察布市","兴安盟","锡林郭勒盟","阿拉善盟","沈阳市","大连市","鞍山市","抚顺市","本溪市","丹东市","锦州市","营口市","阜新市","辽阳市","盘锦市","铁岭市","朝阳市","葫芦岛市","长春市","吉林市","四平市","辽源市","通化市","白山市","松原市","白城市","延边朝鲜族自治州","哈尔滨市","齐齐哈尔市","鸡西市","鹤岗市","双鸭山市","大庆市","伊春市","佳木斯市","七台河市","牡丹江市","黑河市","绥化市","大兴安岭地区","上海市","南京市","无锡市","徐州市","常州市","苏州市","南通市","连云港市","淮安市","盐城市","扬州市","镇江市","泰州市","宿迁市","杭州市","宁波市","温州市","嘉兴市","湖州市","绍兴市","金华市","衢州市","舟山市","台州市","丽水市","合肥市","芜湖市","蚌埠市","淮南市","马鞍山市","淮北市","铜陵市","安庆市","黄山市","滁州市","阜阳市","宿州市","六安市","亳州市","池州市","宣城市","福州市","厦门市","莆田市","三明市","泉州市","漳州市","南平市","龙岩市","宁德市","南昌市","景德镇市","萍乡市","九江市","新余市","鹰潭市","赣州市","吉安市","宜春市","抚州市","上饶市","济南市","青岛市","淄博市","枣庄市","东营市","烟台市","潍坊市","济宁市","泰安市","威海市","日照市","莱芜市","临沂市","德州市","聊城市","滨州市","菏泽市","郑州市","开封市","洛阳市","平顶山市","安阳市","鹤壁市","新乡市","焦作市","濮阳市","许昌市","漯河市","三门峡市","南阳市","商丘市","信阳市","周口市","驻马店市","济源市","武汉市","黄石市","十堰市","宜昌市","襄阳市","鄂州市","荆门市","孝感市","荆州市","黄冈市","咸宁市","随州市","恩施土家族苗族自治州","仙桃市","潜江市","天门市","神农架林区","长沙市","株洲市","湘潭市","衡阳市","邵阳市","岳阳市","常德市","张家界市","益阳市","郴州市","永州市","怀化市","娄底市","湘西土家族苗族自治州","广州市","韶关市","深圳市","珠海市","汕头市","佛山市","江门市","湛江市","茂名市","肇庆市","惠州市","梅州市","汕尾市","河源市","阳江市","清远市","东莞市","中山市","东沙群岛","潮州市","揭阳市","云浮市","南宁市","柳州市","桂林市","梧州市","北海市","防城港市","钦州市","贵港市","玉林市","百色市","贺州市","河池市","来宾市","崇左市","海口市","三亚市","三沙市","儋州市","五指山市","琼海市","文昌市","万宁市","东方市","定安县","屯昌县","澄迈县","临高县","白沙黎族自治县","昌江黎族自治县","乐东黎族自治县","陵水黎族自治县","保亭黎族苗族自治县","琼中黎族苗族自治县","重庆市","万州区","涪陵区","渝中区","大渡口区","江北区","沙坪坝区","九龙坡区","南岸区","北碚区","綦江区","大足区","渝北区","巴南区","黔江区","长寿区","江津区","合川区","永川区","南川区","璧山区","铜梁区","潼南区","荣昌区","开州区","梁平区","武隆区","城口县","丰都县","垫江县","忠县","云阳县","奉节县","巫山县","巫溪县","石柱土家族自治县","秀山土家族苗族自治县","酉阳土家族苗族自治县","彭水苗族土家族自治县","成都市","自贡市","攀枝花市","泸州市","德阳市","绵阳市","广元市","遂宁市","内江市","乐山市","南充市","眉山市","宜宾市","广安市","达州市","雅安市","巴中市","资阳市","阿坝藏族羌族自治州","甘孜藏族自治州","凉山彝族自治州","贵阳市","六盘水市","遵义市","安顺市","毕节市","铜仁市","黔西南布依族苗族自治州","黔东南苗族侗族自治州","黔南布依族苗族自治州","昆明市","曲靖市","玉溪市","保山市","昭通市","丽江市","普洱市","临沧市","楚雄彝族自治州","红河哈尼族彝族自治州","文山壮族苗族自治州","西双版纳傣族自治州","大理白族自治州","德宏傣族景颇族自治州","怒江傈僳族自治州","迪庆藏族自治州","拉萨市","日喀则市","昌都市","林芝市","山南市","那曲市","阿里地区","西安市","铜川市","宝鸡市","咸阳市","渭南市","延安市","汉中市","榆林市","安康市","商洛市","兰州市","嘉峪关市","金昌市","白银市","天水市","武威市","张掖市","平凉市","酒泉市","庆阳市","定西市","陇南市","临夏回族自治州","甘南藏族自治州","西宁市","海东市","海北藏族自治州","黄南藏族自治州","海南藏族自治州","果洛藏族自治州","玉树藏族自治州","海西蒙古族藏族自治州","银川市","石嘴山市","吴忠市","固原市","中卫市","乌鲁木齐市","克拉玛依市","吐鲁番市","哈密市","昌吉回族自治州","博尔塔拉蒙古自治州","巴音郭楞蒙古自治州","阿克苏地区","克孜勒苏柯尔克孜自治州","喀什地区","和田地区","伊犁哈萨克自治州","塔城地区","阿勒泰地区","石河子市","阿拉尔市","图木舒克市","五家渠市","北屯市","铁门关市","双河市","可克达拉市","昆玉市","台湾","香港","澳门"]')}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.c=t,r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r(r.s=138)})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b0JVLEVBQUksQ0FBQ2xKLEVBQUszRyxJQUFVSyxPQUFPNUcsVUFBVW1OLGVBQWVsSSxLQUFLaUksRUFBSzNHLEdDQWxGbVAsRUFBb0JhLElBQU94YyxJQUMxQkEsRUFBT3ljLE1BQVEsR0FDVnpjLEVBQU8wYyxXQUFVMWMsRUFBTzBjLFNBQVcsSUFDakMxYyxHQ0FrQjJiLEVBQW9CQSxFQUFvQmdCLEVBQUksTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mZXRjaC1qc29ucC9idWlsZC9mZXRjaC1qc29ucC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9hZF9kYXRhLnRzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwnKTtcbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb25maWcuYXV0aC5wYXNzd29yZCkpIDogJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uID0gJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdOZXR3b3JrIEVycm9yJywgY29uZmlnLCBudWxsLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gJ0VUSU1FRE9VVCcgOiAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWwoJ2NhbmNlbGVkJykgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcblxuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihjYW5jZWwpIHtcbiAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgIHZhciBpO1xuICAgIHZhciBsID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgfVxuICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbiA9IGZ1bmN0aW9uKG9uZnVsZmlsbGVkKSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vaGVscGVycy92YWxpZGF0b3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICBpZiAoY29uZmlnLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gdGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcubWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbDtcblxuICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICB2YXIgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdmFyIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcHJvbWlzZTtcblxuICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG5cbiAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgIGNoYWluID0gY2hhaW4uY29uY2F0KHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG5cbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgdmFyIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgd2hpbGUgKHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHZhciBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdmFyIG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHRyeSB7XG4gICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvblJlamVjdGVkKGVycm9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdChuZXdDb25maWcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cblxuICB3aGlsZSAocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCksIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbCcpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbCgnY2FuY2VsZWQnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzXG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH07XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNwb3J0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cEFnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cHNBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2NhbmNlbFRva2VuJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnc29ja2V0UGF0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlRW5jb2RpbmcnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd2YWxpZGF0ZVN0YXR1cyc6IG1lcmdlRGlyZWN0S2V5c1xuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoY29uZmlnMSkuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICB2YXIgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIHZhciBjb25maWdWYWx1ZSA9IG1lcmdlKHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb250ZXh0LCBkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2VuaGFuY2VFcnJvcicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi90cmFuc2l0aW9uYWwnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpIHx8IChoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID09PSAnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgZW5oYW5jZUVycm9yKGUsIHRoaXMsICdFX0pTT05fUEFSU0UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwidmVyc2lvblwiOiBcIjAuMjYuMVwiXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdJztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTVxufTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoWydleHBvcnRzJywgJ21vZHVsZSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmYWN0b3J5KGV4cG9ydHMsIG1vZHVsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1vZCA9IHtcbiAgICAgIGV4cG9ydHM6IHt9XG4gICAgfTtcbiAgICBmYWN0b3J5KG1vZC5leHBvcnRzLCBtb2QpO1xuICAgIGdsb2JhbC5mZXRjaEpzb25wID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzLCBtb2R1bGUpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICB0aW1lb3V0OiA1MDAwLFxuICAgIGpzb25wQ2FsbGJhY2s6ICdjYWxsYmFjaycsXG4gICAganNvbnBDYWxsYmFja0Z1bmN0aW9uOiBudWxsXG4gIH07XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVDYWxsYmFja0Z1bmN0aW9uKCkge1xuICAgIHJldHVybiAnanNvbnBfJyArIERhdGUubm93KCkgKyAnXycgKyBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDEwMDAwMCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSkge1xuICAgIC8vIElFOCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4geW91IHRyeSB0byBkZWxldGUgYSBwcm9wZXJ0eSBvbiB3aW5kb3dcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xODI0MjI4Lzc1MTA4OVxuICAgIHRyeSB7XG4gICAgICBkZWxldGUgd2luZG93W2Z1bmN0aW9uTmFtZV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgd2luZG93W2Z1bmN0aW9uTmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KHNjcmlwdElkKSB7XG4gICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdElkKTtcbiAgICBpZiAoc2NyaXB0KSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2hKc29ucChfdXJsKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sxXTtcblxuICAgIC8vIHRvIGF2b2lkIHBhcmFtIHJlYXNzaWduXG4gICAgdmFyIHVybCA9IF91cmw7XG4gICAgdmFyIHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgfHwgZGVmYXVsdE9wdGlvbnMudGltZW91dDtcbiAgICB2YXIganNvbnBDYWxsYmFjayA9IG9wdGlvbnMuanNvbnBDYWxsYmFjayB8fCBkZWZhdWx0T3B0aW9ucy5qc29ucENhbGxiYWNrO1xuXG4gICAgdmFyIHRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgY2FsbGJhY2tGdW5jdGlvbiA9IG9wdGlvbnMuanNvbnBDYWxsYmFja0Z1bmN0aW9uIHx8IGdlbmVyYXRlQ2FsbGJhY2tGdW5jdGlvbigpO1xuICAgICAgdmFyIHNjcmlwdElkID0ganNvbnBDYWxsYmFjayArICdfJyArIGNhbGxiYWNrRnVuY3Rpb247XG5cbiAgICAgIHdpbmRvd1tjYWxsYmFja0Z1bmN0aW9uXSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgICAvLyBrZWVwIGNvbnNpc3RlbnQgd2l0aCBmZXRjaCBBUElcbiAgICAgICAgICBqc29uOiBmdW5jdGlvbiBqc29uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGltZW91dElkKSBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICByZW1vdmVTY3JpcHQoc2NyaXB0SWQpO1xuXG4gICAgICAgIGNsZWFyRnVuY3Rpb24oY2FsbGJhY2tGdW5jdGlvbik7XG4gICAgICB9O1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBzZXQgdGhlaXIgb3duIHBhcmFtcywgYW5kIGlmIG5vdCBhZGQgYSA/IHRvIHN0YXJ0IGEgbGlzdCBvZiBwYXJhbXNcbiAgICAgIHVybCArPSB1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJztcblxuICAgICAgdmFyIGpzb25wU2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBqc29ucFNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsICcnICsgdXJsICsganNvbnBDYWxsYmFjayArICc9JyArIGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgaWYgKG9wdGlvbnMuY2hhcnNldCkge1xuICAgICAgICBqc29ucFNjcmlwdC5zZXRBdHRyaWJ1dGUoJ2NoYXJzZXQnLCBvcHRpb25zLmNoYXJzZXQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubm9uY2UpIHtcbiAgICAgICAganNvbnBTY3JpcHQuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgICAganNvbnBTY3JpcHQuc2V0QXR0cmlidXRlKCdyZWZlcnJlclBvbGljeScsIG9wdGlvbnMucmVmZXJyZXJQb2xpY3kpO1xuICAgICAgfVxuICAgICAganNvbnBTY3JpcHQuaWQgPSBzY3JpcHRJZDtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoanNvbnBTY3JpcHQpO1xuXG4gICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSlNPTlAgcmVxdWVzdCB0byAnICsgX3VybCArICcgdGltZWQgb3V0JykpO1xuXG4gICAgICAgIGNsZWFyRnVuY3Rpb24oY2FsbGJhY2tGdW5jdGlvbik7XG4gICAgICAgIHJlbW92ZVNjcmlwdChzY3JpcHRJZCk7XG4gICAgICAgIHdpbmRvd1tjYWxsYmFja0Z1bmN0aW9uXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjbGVhckZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgIC8vIENhdWdodCBpZiBnb3QgNDA0LzUwMFxuICAgICAganNvbnBTY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSlNPTlAgcmVxdWVzdCB0byAnICsgX3VybCArICcgZmFpbGVkJykpO1xuXG4gICAgICAgIGNsZWFyRnVuY3Rpb24oY2FsbGJhY2tGdW5jdGlvbik7XG4gICAgICAgIHJlbW92ZVNjcmlwdChzY3JpcHRJZCk7XG4gICAgICAgIGlmICh0aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV4cG9ydCBhcyBnbG9iYWwgZnVuY3Rpb25cbiAgLypcbiAgbGV0IGxvY2FsO1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsb2NhbCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsb2NhbCA9IHNlbGY7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgIH1cbiAgfVxuICBsb2NhbC5mZXRjaEpzb25wID0gZmV0Y2hKc29ucDtcbiAgKi9cblxuICBtb2R1bGUuZXhwb3J0cyA9IGZldGNoSnNvbnA7XG59KTsiLCJpbXBvcnQgKiBhcyBjaXRpZXMgZnJvbSAnLi92YWxpZF9jaXR5X25hbWVzLmpzb24nO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCAqIGFzIGZldGNoSnNvbnAgZnJvbSAnZmV0Y2gtanNvbnAnO1xuXG5jb25zdCBjaXR5TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oY2l0aWVzKTtcbmNvbnN0IGNpdHlOYW1lU2hvcnRUb0Z1bGwgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuY2l0eU5hbWVzLmZvckVhY2goKGNpdHlOYW1lKSA9PiB7XG4gIGNpdHlOYW1lU2hvcnRUb0Z1bGwuc2V0KGNpdHlOYW1lLnN1YnN0cigwLCAyKSwgY2l0eU5hbWUpO1xufSk7XG5jb25zdCBjb2xvcnM6IEFycmF5PFtudW1iZXIsIHN0cmluZ10+ID0gW1xuICBbMCwgJyNGRkRGREYnXSxcbiAgWzEwLCAnI0ZGQkZCRiddLFxuICBbMjAsICcjRkY5RjlGJ10sXG4gIFszMCwgJyNGRjdGN0YnXSxcbiAgWzQwLCAnI0ZGNUY1RiddLFxuICBbNTAsICcjRkYzRjNGJ10sXG4gIFs2MCwgJyNGRjFGMUYnXSxcbiAgWzcwLCAnI0ZGMDAwMCddLFxuICBbODAsICcjRTcwMDAwJ10sXG4gIFs5MCwgJyNDRjAwMDAnXSxcbiAgWzEwMCwgJyNCODAwMDAnXSxcbiAgWzIwMCwgJyNBMDAwMDAnXSxcbiAgWzUwMCwgJyM4ODAwMDAnXSxcbiAgWzEwMDAsICcjNzEwMDAwJ10sXG4gIFsyMDAwLCAnIzU5MDAwMCddLFxuICBbNTAwMCwgJyM0MjAwMDAnXSxcbl07XG5cbi8vIOW/veeVpemDqOWIhuWGheWuuVxuY29uc3QgaWdub3JlTGlzdCA9IG5ldyBTZXQoW1xuICAn5aSW5Zyw5p2l5Lqs5Lq65ZGYJyxcbiAgJ+acquefpScsXG4gICfmnKrmmI7noa7lnLDljLonLFxuICAn5omA5bGe5Zyw5b6F56Gu6K6kJyxcbiAgJ+W+heehruiupCcsXG4gICflnLDljLrlvoXnoa7orqQnLFxuICAn5aKD5aSW6L6T5YWlJyxcbiAgJ+Wig+Wklui+k+WFpeS6uuWRmCcsXG4gICflpJbnnIHovpPlhaUnLFxuICAn55yB5Y2B6YeM5Liw55uR54uxJyxcbiAgJ+mbhOWuieaWsOWMuicsXG5dKTtcblxuY29uc3QgbXVuaWNpcGFsaXR5TGlzdCA9IG5ldyBNYXAoW1xuICBbJ+WMl+S6rCcsICfljJfkuqzluIInXSxcbiAgWyflpKnmtKUnLCAn5aSp5rSl5biCJ10sXG4gIFsn5LiK5rW3JywgJ+S4iua1t+W4giddLFxuICAvLyDph43luobpnaLnp6/lpKrlpKfvvIzkuI3pgILlkIjkvZzkuLrljZXkuIDlnLDljLrlpITnkIZcbiAgWyfpppnmuK8nLCAn6aaZ5riv54m55Yir6KGM5pS/5Yy6J10sXG4gIFsn5r6z6ZeoJywgJ+a+s+mXqOeJueWIq+ihjOaUv+WMuiddLFxuICBbJ+WPsOa5vicsICflj7Dmub7nnIEnXSxcbl0pO1xuXG4vLyDmiYvliqjmmKDlsIRcbi8vIOmrmOW+t+WcsOWbvumHjOayoeacieS4pOaxn+aWsOWMuu+8jOWnkeS4lOeul+WFpea4neWMl1xuY29uc3QgbWFudWFsTWFwcGluZyA9IG5ldyBNYXAoW1xuICBbJ+W3qeS5iScsICfpg5Hlt57luIInXSxcbiAgWyflm7rlp4snLCAn5L+h6Ziz5biCJ10sXG4gIFsn5ruR5Y6/JywgJ+WuiemYs+W4giddLFxuICBbJ+mVv+WeoycsICfmlrDkuaHluIInXSxcbiAgWyfmsLjln44nLCAn5ZWG5LiY5biCJ10sXG4gIFsn6YKT5beeJywgJ+WNl+mYs+W4giddLFxuICBbJ+mfqeWfjicsICfmuK3ljZfluIInXSxcbiAgWyfmnajlh4znpLrojIPljLonLCAn5ZK46Ziz5biCJ10sXG4gIFsn5a6B5LicJywgJ+mTtuW3neW4giddLFxuICBbJ+a7oea0sumHjCcsICflkbzkvKbotJ3lsJTluIInXSxcbiAgWyfpmL/mi4nlloTnm58nLCAn6Zi/5ouJ5ZaE55ufJ10sXG4gIFsn5aSn5YW05a6J5bKtJywgJ+Wkp+WFtOWuieWyreWcsOWMuiddLFxuICBbJ+Wuv+advicsICflronluobluIInXSxcbiAgWyfotaPmsZ/mlrDljLonLCAn5Y2X5piM5biCJ10sXG4gIFsn5YWs5Li75bKtJywgJ+Wbm+W5s+W4giddLFxuICBbJ+aiheays+WPoycsICfpgJrljJbluIInXSxcbiAgWyfkuKTmsZ/mlrDljLonLCAn5rid5YyX5Yy6J10sXG4gIFsn5LiH55ubJywgJ+e2puaxn+WMuiddLFxuICBbJ+esrOWbm+W4iCcsICflj6/lhYvovr7mi4nluIInXSxcbiAgWyfnrKzlha3luIgnLCAn5LqU5a625rig5biCJ10sXG4gIFsn56ys5LiD5biIJywgJ+WhlOWfjuWcsOWMuiddLFxuICBbJ+esrOWFq+W4iCcsICfnn7PmsrPlrZDluIInXSxcbiAgWyfnrKzkuZ3luIgnLCAn5aGU5Z+O5Zyw5Yy6J10sXG4gIFsn56ys5Y2B5LqM5biIJywgJ+S5jOmygeacqOm9kOW4giddLFxuXSk7XG5cbmNvbnN0IG1hbnVhbE1hcHBpbmdXaXRoUHJvdmluY2UgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWyfph43luoYt6auY5paw5Yy6JywgJ+S5nem+meWdoeWMuiddXSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkRGF0YSgpOiBQcm9taXNlPEFycmF5PGFueT4+IHtcbiAgY29uc3QgdXJsID0gJ2h0dHBzOi8vbmV3cy5zaW5hLmNvbS5jbi9wcm9qZWN0L2Z5bWFwL25jcDIwMjBfZnVsbF9kYXRhLmpzb24nO1xuICBpZiAodHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEpzb25wKHVybCwge1xuICAgICAganNvbnBDYWxsYmFja0Z1bmN0aW9uOiAnanNvbmNhbGxiYWNrJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGogPSBhd2FpdCByZXN1bHQuanNvbigpO1xuICAgIGNvbnN0IGRhdGEgPSBqLmRhdGEubGlzdDtcbiAgICByZXR1cm4gZGF0YTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldCh1cmwpO1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmRhdGEucmVwbGFjZSgvXmpzb25jYWxsYmFja1xcKHxcXClcXDsvZywgJycpKS5kYXRhLmxpc3Q7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ2l0eU5hbWUocHJvdmluY2VOYW1lOiBzdHJpbmcsIGNpdHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyDmiYvliqjop4TliJlcbiAgaWYgKG1hbnVhbE1hcHBpbmdXaXRoUHJvdmluY2UuaGFzKHByb3ZpbmNlTmFtZSArICctJyArIGNpdHlOYW1lKSkge1xuICAgIHJldHVybiBtYW51YWxNYXBwaW5nV2l0aFByb3ZpbmNlLmdldChwcm92aW5jZU5hbWUgKyAnLScgKyBjaXR5TmFtZSk7XG4gIH1cbiAgaWYgKG1hbnVhbE1hcHBpbmcuaGFzKGNpdHlOYW1lKSkge1xuICAgIHJldHVybiBtYW51YWxNYXBwaW5nLmdldChjaXR5TmFtZSk7XG4gIH1cbiAgLy8g5YmN57yA5Yy56YWNXG4gIC8vIOinhOiMg+W4guWQje+8jOmZpOS6hiDlvKDlrrblj6PluIIv5byg5a6255WM5biC77yM6Zi/5ouJ5ZaE55ufL+mYv+aLieWwlOW4giDlpJbvvIzliY3kuKTkuKrlrZfpg73mmK/llK/kuIDnmoRcbiAgLy8g5omA5Lul5Y+v5Lul55So5YmN5Lik5Liq5a2XXG4gIGNvbnN0IHNob3J0TmFtZSA9IGNpdHlOYW1lLnN1YnN0cigwLCAyKTtcbiAgaWYgKGNpdHlOYW1lU2hvcnRUb0Z1bGwuaGFzKHNob3J0TmFtZSkpIHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IGNpdHlOYW1lU2hvcnRUb0Z1bGwuZ2V0KHNob3J0TmFtZSk7XG4gICAgY29uc29sZS5sb2cocHJvdmluY2VOYW1lLCBjaXR5TmFtZSwgJz0+Jywgbm9ybWFsaXplZE5hbWUpO1xuICAgIHJldHVybiBub3JtYWxpemVkTmFtZTtcbiAgfVxuICBjb25zb2xlLmxvZygnISEhQ2Fubm90IG1hdGNoLCBkaXNjYXJkOicsIHByb3ZpbmNlTmFtZSwgY2l0eU5hbWUpO1xuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtZWRDb3VudChkYXRhKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gIGNvbnN0IGNvbmZpcm1lZENvdW50ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBwcm92aW5jZURhdGEgb2YgZGF0YSkge1xuICAgIGlmIChtdW5pY2lwYWxpdHlMaXN0Lmhhcyhwcm92aW5jZURhdGEubmFtZSkpIHtcbiAgICAgIGNvbmZpcm1lZENvdW50LnNldChtdW5pY2lwYWxpdHlMaXN0LmdldChwcm92aW5jZURhdGEubmFtZSksIE51bWJlcihwcm92aW5jZURhdGEuZWNvbk51bSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgY2l0eURhdGEgb2YgcHJvdmluY2VEYXRhLmNpdHkpIHtcbiAgICAgIGNvbnN0IHByb3ZpbmNlTmFtZSA9IHByb3ZpbmNlRGF0YS5uYW1lO1xuICAgICAgY29uc3QgY2l0eU5hbWUgPSBjaXR5RGF0YS5uYW1lO1xuICAgICAgY29uc3Qgbm93Q29uZmlybSA9IE51bWJlcihjaXR5RGF0YS5lY29uTnVtKTtcbiAgICAgIGlmIChub3dDb25maXJtID09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaWdub3JlTGlzdC5oYXMoY2l0eU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IG5vcm1hbGl6ZWROYW1lID0gY2l0eURhdGEubWFwTmFtZTtcbiAgICAgIGlmICghY2l0eU5hbWVzLmhhcyhub3JtYWxpemVkTmFtZSkpIHtcbiAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVDaXR5TmFtZShwcm92aW5jZU5hbWUsIGNpdHlOYW1lKTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWROYW1lID09ICcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb25maXJtZWRDb3VudC5oYXMobm9ybWFsaXplZE5hbWUpKSB7XG4gICAgICAgIGNvbmZpcm1lZENvdW50LnNldChub3JtYWxpemVkTmFtZSwgY29uZmlybWVkQ291bnQuZ2V0KG5vcm1hbGl6ZWROYW1lKSArIG5vd0NvbmZpcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uZmlybWVkQ291bnQuc2V0KG5vcm1hbGl6ZWROYW1lLCBub3dDb25maXJtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc29sZS5sb2coJ2NvbmZpcm1lZENvdW50JywgY29uZmlybWVkQ291bnQpO1xuICByZXR1cm4gY29uZmlybWVkQ291bnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcihjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGNvdW50ID09IDApIHtcbiAgICByZXR1cm4gJyNGRkZGRkYnO1xuICB9XG4gIGZvciAoY29uc3QgW2lkeCwgW3RocmVzaG9sZF1dIG9mIGNvbG9ycy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoaWR4ID09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoY291bnQgPCB0aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybiBjb2xvcnNbaWR4IC0gMV1bMV07XG4gICAgfVxuICB9XG4gIHJldHVybiAnIzQyMDAwMCc7XG59XG5cbmZ1bmN0aW9uIHByaW50Q29uZmlybWVkQ291bnQoKTogdm9pZCB7XG4gIGxvYWREYXRhKCkudGhlbigoZGF0YSkgPT4ge1xuICAgIGdldENvbmZpcm1lZENvdW50KGRhdGEpO1xuICB9KTtcbn1cblxuaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiByZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBwcmludENvbmZpcm1lZENvdW50KCk7XG59XG4iLCJpbXBvcnQgeyBsb2FkRGF0YSwgZ2V0Q29uZmlybWVkQ291bnQsIGdldENvbG9yIH0gZnJvbSAnLi9sb2FkX2RhdGEnO1xubGV0IG1hcDtcbmxldCBkaXNQcm92aW5jZTtcbmxldCBkaXNDaG9uZ3Fpbmc7XG5sZXQgbGF5ZXI7XG5jb25zdCB2ZXJib3NlID0gZmFsc2U7XG5cbmNvbnN0IHRleHRTdHlsZSA9IHsgYmFja2dyb3VuZENvbG9yOiAnI0ZGRkZGRicgfTtcblxubGV0IGNvbmZpcm1lZENvdW50ID0gbmV3IE1hcCgpO1xuY29uc3QgY2FjaGUgPSBuZXcgTWFwKCk7XG5cbmZ1bmN0aW9uIGdldENvdW50QnlOYW1lKG5hbWUpIHtcbiAgbGV0IGNvdW50ID0gMDtcbiAgaWYgKGNvbmZpcm1lZENvdW50LmhhcyhuYW1lKSkge1xuICAgIGNvdW50ID0gY29uZmlybWVkQ291bnQuZ2V0KG5hbWUpO1xuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sb3JCeU5hbWUobmFtZSkge1xuICBjb25zdCBjb2xvciA9IGdldENvbG9yKGdldENvdW50QnlOYW1lKG5hbWUpKTtcbiAgcmV0dXJuIGNvbG9yO1xufVxuXG5mdW5jdGlvbiBpbml0Q292aWRNYXAoKSB7XG4gIG1hcCA9IG5ldyBBTWFwLk1hcCgnY29udGFpbmVyJywge1xuICAgIHpvb206IHdpbmRvdy5zY3JlZW4ud2lkdGggPD0gNjAwID8gMyA6IDQsXG4gICAgY2VudGVyOiBbMTA0LjUsIDM4LjVdLFxuICAgIHBpdGNoOiAwLFxuICAgIHZpZXdNb2RlOiAnM0QnLFxuICB9KTtcblxuICAvLyDliJvlu7rnnIHku73lm77lsYJcbiAgLy8g5o6S6Zmk6YeN5bqGKDUwMDAwMClcbiAgY29uc3QgYWxsUHJvdmluY2VzID0gW1xuICAgICcxMTAwMDAnLFxuICAgICcxMjAwMDAnLFxuICAgICcxMzAwMDAnLFxuICAgICcxNDAwMDAnLFxuICAgICcxNTAwMDAnLFxuICAgICcyMTAwMDAnLFxuICAgICcyMjAwMDAnLFxuICAgICcyMzAwMDAnLFxuICAgICczMTAwMDAnLFxuICAgICczMjAwMDAnLFxuICAgICczMzAwMDAnLFxuICAgICczNDAwMDAnLFxuICAgICczNTAwMDAnLFxuICAgICczNjAwMDAnLFxuICAgICczNzAwMDAnLFxuICAgICc0MTAwMDAnLFxuICAgICc0MjAwMDAnLFxuICAgICc0MzAwMDAnLFxuICAgICc0NDAwMDAnLFxuICAgICc0NTAwMDAnLFxuICAgICc0NjAwMDAnLFxuICAgICc1MTAwMDAnLFxuICAgICc1MjAwMDAnLFxuICAgICc1MzAwMDAnLFxuICAgICc1NDAwMDAnLFxuICAgICc2MTAwMDAnLFxuICAgICc2MjAwMDAnLFxuICAgICc2MzAwMDAnLFxuICAgICc2NDAwMDAnLFxuICAgICc2NTAwMDAnLFxuICAgICc3MTAwMDAnLFxuICAgICc4MTAwMDAnLFxuICAgICc4MjAwMDAnLFxuICBdO1xuICBkaXNQcm92aW5jZSA9IG5ldyBBTWFwLkRpc3RyaWN0TGF5ZXIuUHJvdmluY2Uoe1xuICAgIHpJbmRleDogMTIsXG4gICAgYWRjb2RlOiBhbGxQcm92aW5jZXMsXG4gICAgZGVwdGg6IDEsXG4gICAgc3R5bGVzOiB7XG4gICAgICBmaWxsOiBmdW5jdGlvbiAocHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gZ2V0Q29sb3JCeU5hbWUocHJvcGVydGllcy5OQU1FX0NITik7XG4gICAgICB9LFxuICAgICAgJ3Byb3ZpbmNlLXN0cm9rZSc6ICdibGFjaycsXG4gICAgICAnY2l0eS1zdHJva2UnOiAnY29ybmZsb3dlcmJsdWUnLCAvLyDkuK3lm73lnLDnuqfluILovrnnlYxcbiAgICAgICdjb3VudHktc3Ryb2tlJzogJ3JnYmEoMjU1LDI1NSwyNTUsMC41KScsIC8vIOS4reWbveWMuuWOv+i+ueeVjFxuICAgIH0sXG4gIH0pO1xuXG4gIGRpc1Byb3ZpbmNlLnNldE1hcChtYXApO1xuXG4gIGRpc0Nob25ncWluZyA9IG5ldyBBTWFwLkRpc3RyaWN0TGF5ZXIuUHJvdmluY2Uoe1xuICAgIHpJbmRleDogMTIsXG4gICAgYWRjb2RlOiBbJzUwMDAwMCddLFxuICAgIGRlcHRoOiAyLFxuICAgIHN0eWxlczoge1xuICAgICAgZmlsbDogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yQnlOYW1lKHByb3BlcnRpZXMuTkFNRV9DSE4pO1xuICAgICAgfSxcbiAgICAgICdwcm92aW5jZS1zdHJva2UnOiAnYmxhY2snLFxuICAgICAgJ2NpdHktc3Ryb2tlJzogJ2Nvcm5mbG93ZXJibHVlJywgLy8g5Lit5Zu95Zyw57qn5biC6L6555WMXG4gICAgICAnY291bnR5LXN0cm9rZSc6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNSknLCAvLyDkuK3lm73ljLrljr/ovrnnlYxcbiAgICB9LFxuICB9KTtcblxuICBkaXNDaG9uZ3Fpbmcuc2V0TWFwKG1hcCk7XG4gIG1hcC5vbignY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGF5ZXIgPSBuZXcgQU1hcC5MYWJlbHNMYXllcih7XG4gICAgICBmaXRWaWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIG1hcC5hZGQobGF5ZXIpO1xuICAgIG1hcC5vbignY2xpY2snLCBjbGlja0hhbmRsZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xpY2tIYW5kbGVyKGV2KSB7XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coJ2V2JywgZXYpO1xuICB9XG4gIGNvbnN0IHB4ID0gZXYucGl4ZWw7XG4gIGxldCBwcm9wcyA9IGRpc1Byb3ZpbmNlLmdldERpc3RyaWN0QnlDb250YWluZXJQb3MocHgpO1xuICBpZiAodmVyYm9zZSkge1xuICAgIGNvbnNvbGUubG9nKCdwcm9wczEnLCBwcm9wcyk7XG4gIH1cbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gZGlzQ2hvbmdxaW5nLmdldERpc3RyaWN0QnlDb250YWluZXJQb3MocHgpO1xuICB9XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coJ3Byb3BzMScsIHByb3BzKTtcbiAgfVxuICBpZiAocHJvcHMpIHtcbiAgICBjb25zdCBzZXBlcmF0b3IgPSAnOic7XG4gICAgLy8g5Lqs5rSl5rKq5riv5r6z5Y+wXG4gICAgaWYgKFsnMTEwMDAwJywgJzEyMDAwMCcsICczMTAwMDAnLCAnNzEwMDAwJywgJzgxMDAwMCcsICc4MjAwMDAnXS5pbmNsdWRlcyhwcm9wcy5hZGNvZGVfcHJvLnRvU3RyaW5nKCkpKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gcHJvcHMuTkFNRV9DSE4ucmVwbGFjZSgn5biCJywgJycpICsgc2VwZXJhdG9yICsgZ2V0Q291bnRCeU5hbWUocHJvcHMuTkFNRV9DSE4pO1xuICAgICAgLy9jb25zb2xlLmxvZygndGV4dCcsIHRleHQpO1xuICAgICAgY29uc3QgbGFiZWxNYXJrZXIgPSBuZXcgQU1hcC5MYWJlbE1hcmtlcih7XG4gICAgICAgIHBvc2l0aW9uOiBbcHJvcHMueCwgcHJvcHMueV0sXG4gICAgICAgIHRleHQ6IHsgY29udGVudDogdGV4dCwgc3R5bGU6IHRleHRTdHlsZSB9LFxuICAgICAgICByYW5rOiAyLFxuICAgICAgfSk7XG4gICAgICBsYXllci5hZGQobGFiZWxNYXJrZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDlsZXnpLrngrnlh7vljLrln5/miYDlnKjnnIHku73mr4/kuKrluILnmoTnl4XkvovmlbDlrZdcbiAgICAgIEFNYXAucGx1Z2luKCdBTWFwLkRpc3RyaWN0U2VhcmNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpc0Nob25ncWluZyA9IHByb3BzLmFkY29kZV9wcm8udG9TdHJpbmcoKSA9PSAnNTAwMDAwJztcbiAgICAgICAgY29uc3Qgc3ViZGlzdHJpY3QgPSBpc0Nob25ncWluZyA/IDIgOiAxO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdzdWJkaXN0cmljdCcsIHN1YmRpc3RyaWN0KVxuICAgICAgICBmdW5jdGlvbiBkaXN0cmljdHNIYW5kbGVyKHJlc3VsdCkge1xuICAgICAgICAgIGlmICghaXNDaG9uZ3FpbmcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVzdWx0LmRpc3RyaWN0TGlzdFswXS5kaXN0cmljdExpc3QpIHtcbiAgICAgICAgICAgICAgbGV0IGNvdW50ID0gZ2V0Q291bnRCeU5hbWUoZW50cnkubmFtZSk7XG4gICAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGVudHJ5Lm5hbWUucmVwbGFjZSgn5biCJywgJycpICsgc2VwZXJhdG9yICsgY291bnQ7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0ZXh0XCIsIHRleHQpO1xuICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGVudHJ5LmNlbnRlcixcbiAgICAgICAgICAgICAgICB0ZXh0OiB7IGNvbnRlbnQ6IHRleHQsIHN0eWxlOiB0ZXh0U3R5bGUgfSxcbiAgICAgICAgICAgICAgICByYW5rOiBlbnRyeS5hZGNvZGUgPT0gcHJvcHMuYWRjb2RlLnRvU3RyaW5nKCkgPyAyIDogMSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb3B0aW9uJywgb3B0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBsYWJlbE1hcmtlciA9IG5ldyBBTWFwLkxhYmVsTWFya2VyKG9wdGlvbik7XG4gICAgICAgICAgICAgIGxheWVyLmFkZChsYWJlbE1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOmHjeW6humDiuWOv1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZXN1bHQuZGlzdHJpY3RMaXN0WzBdLmRpc3RyaWN0TGlzdFswXS5kaXN0cmljdExpc3QpIHtcbiAgICAgICAgICAgICAgbGV0IGNvdW50ID0gZ2V0Q291bnRCeU5hbWUoZW50cnkubmFtZSk7XG4gICAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBlbnRyeS5jZW50ZXIsXG4gICAgICAgICAgICAgICAgdGV4dDoge1xuICAgICAgICAgICAgICAgICAgY29udGVudDogZW50cnkubmFtZSArIHNlcGVyYXRvciArIGNvdW50LFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHRleHRTdHlsZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJhbms6IGVudHJ5LmFkY29kZSA9PSBwcm9wcy5hZGNvZGUudG9TdHJpbmcoKSA/IDIgOiAxLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvcHRpb24sIOmHjeW6humDiuWOvycsIG9wdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbGFiZWxNYXJrZXIgPSBuZXcgQU1hcC5MYWJlbE1hcmtlcihvcHRpb24pO1xuICAgICAgICAgICAgICBsYXllci5hZGQobGFiZWxNYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g6YeN5bqG5Z+O5Yy6XG4gICAgICAgICAgICBsZXQgY29uZmlybWVkQ291bnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgY2hvbmdxaW5nRG93bnRvd24gPSByZXN1bHQuZGlzdHJpY3RMaXN0WzBdLmRpc3RyaWN0TGlzdFsxXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgY2hvbmdxaW5nRG93bnRvd24uZGlzdHJpY3RMaXN0KSB7XG4gICAgICAgICAgICAgIGNvbmZpcm1lZENvdW50ICs9IGdldENvdW50QnlOYW1lKGVudHJ5Lm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmZpcm1lZENvdW50ID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGNob25ncWluZ0Rvd250b3duLmNlbnRlcixcbiAgICAgICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBjaG9uZ3FpbmdEb3dudG93bi5uYW1lICsgc2VwZXJhdG9yICsgY29uZmlybWVkQ291bnQsXG4gICAgICAgICAgICAgICAgICBzdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmFuazogcHJvcHMuYWRjb2RlX2NpdC50b1N0cmluZygpID09ICc1MDAxMDAnID8gMiA6IDEsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29wdGlvbiwg6YeN5bqG5Z+O5Yy6Jywgb3B0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBsYWJlbE1hcmtlciA9IG5ldyBBTWFwLkxhYmVsTWFya2VyKG9wdGlvbik7XG4gICAgICAgICAgICAgIGxheWVyLmFkZChsYWJlbE1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpc3RyaWN0U2VhcmNoID0gbmV3IEFNYXAuRGlzdHJpY3RTZWFyY2goe1xuICAgICAgICAgIGxldmVsOiAnZGlzdHJpY3QnLFxuICAgICAgICAgIHN1YmRpc3RyaWN0OiBzdWJkaXN0cmljdCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGsgPSBwcm9wcy5hZGNvZGVfcHJvLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChjYWNoZS5nZXQoaykpIHtcbiAgICAgICAgICBkaXN0cmljdHNIYW5kbGVyKGNhY2hlLmdldChrKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzdHJpY3RTZWFyY2guc2VhcmNoKGssIGZ1bmN0aW9uIChzdGF0dXMsIHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N0YXR1cycsIHN0YXR1cyk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHQnLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAnY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgIGNhY2hlLnNldChrLCByZXN1bHQpO1xuICAgICAgICAgICAgICBkaXN0cmljdHNIYW5kbGVyKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xuICBsb2FkRGF0YSgpLnRoZW4oKGRhdGEpID0+IHtcbiAgICBjb25maXJtZWRDb3VudCA9IGdldENvbmZpcm1lZENvdW50KGRhdGEpO1xuICAgIC8vIGZpeCBzb21lIGJ1Z3Mgb2YgQU1hcFxuICAgIGlmIChjb25maXJtZWRDb3VudC5nZXQoJ+W+kOW3nuW4gicpKSB7XG4gICAgICBjb25maXJtZWRDb3VudC5zZXQoJ+mCs+W3nuW4gicsIGNvbmZpcm1lZENvdW50LmdldCgn5b6Q5bee5biCJykpO1xuICAgIH1cbiAgICBpZiAoY29uZmlybWVkQ291bnQuZ2V0KCfmtY7ljZfluIInKSkge1xuICAgICAgY29uZmlybWVkQ291bnQuc2V0KCfojrHoipzluIInLCBjb25maXJtZWRDb3VudC5nZXQoJ+a1juWNl+W4gicpKTtcbiAgICB9XG4gICAgaW5pdENvdmlkTWFwKCk7XG4gIH0pO1xufSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiLy8gbW9kdWxlIGNhY2hlIGFyZSB1c2VkIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMzgpO1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJ1dGlscyIsInNldHRsZSIsImNvb2tpZXMiLCJidWlsZFVSTCIsImJ1aWxkRnVsbFBhdGgiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJjcmVhdGVFcnJvciIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwiQ2FuY2VsIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbkNhbmNlbGVkIiwicmVxdWVzdERhdGEiLCJkYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJoZWFkZXJzIiwicmVzcG9uc2VUeXBlIiwiZG9uZSIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaXNGb3JtRGF0YSIsInJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsImZ1bGxQYXRoIiwiYmFzZVVSTCIsInVybCIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInZhbHVlIiwiZXJyIiwib3BlbiIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJpbmRleE9mIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJvbmVycm9yIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsInRyYW5zaXRpb25hbCIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsInhzcmZWYWx1ZSIsIndpdGhDcmVkZW50aWFscyIsInhzcmZDb29raWVOYW1lIiwicmVhZCIsInVuZGVmaW5lZCIsInhzcmZIZWFkZXJOYW1lIiwiZm9yRWFjaCIsInZhbCIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0UmVxdWVzdEhlYWRlciIsImlzVW5kZWZpbmVkIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJ0eXBlIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwic2VuZCIsImJpbmQiLCJBeGlvcyIsIm1lcmdlQ29uZmlnIiwiYXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJjb250ZXh0IiwiaW5zdGFuY2UiLCJwcm90b3R5cGUiLCJleHRlbmQiLCJjcmVhdGUiLCJpbnN0YW5jZUNvbmZpZyIsIkNhbmNlbFRva2VuIiwiaXNDYW5jZWwiLCJWRVJTSU9OIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJpc0F4aW9zRXJyb3IiLCJtZXNzYWdlIiwidGhpcyIsInRvU3RyaW5nIiwiX19DQU5DRUxfXyIsImV4ZWN1dG9yIiwiVHlwZUVycm9yIiwicmVzb2x2ZVByb21pc2UiLCJwcm9taXNlIiwidG9rZW4iLCJ0aGVuIiwiX2xpc3RlbmVycyIsImkiLCJsIiwibGVuZ3RoIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsInJlYXNvbiIsInRocm93SWZSZXF1ZXN0ZWQiLCJsaXN0ZW5lciIsInB1c2giLCJpbmRleCIsInNwbGljZSIsInNvdXJjZSIsImMiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0b3JzIiwiZGVmYXVsdHMiLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsImFzc2VydE9wdGlvbnMiLCJzaWxlbnRKU09OUGFyc2luZyIsImJvb2xlYW4iLCJmb3JjZWRKU09OUGFyc2luZyIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJydW5XaGVuIiwic3luY2hyb25vdXMiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJjaGFpbiIsIkFycmF5IiwiYXBwbHkiLCJjb25jYXQiLCJzaGlmdCIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImVycm9yIiwiZ2V0VXJpIiwicmVwbGFjZSIsImhhbmRsZXJzIiwidXNlIiwib3B0aW9ucyIsImVqZWN0IiwiaWQiLCJmbiIsImgiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJyZXF1ZXN0ZWRVUkwiLCJlbmhhbmNlRXJyb3IiLCJjb2RlIiwiRXJyb3IiLCJ0cmFuc2Zvcm1EYXRhIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsImNhbGwiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwibWVyZ2UiLCJjb21tb24iLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJ0b0pTT04iLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGFjayIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJ0YXJnZXQiLCJpc1BsYWluT2JqZWN0IiwiaXNBcnJheSIsInNsaWNlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInByb3AiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwiT2JqZWN0Iiwia2V5cyIsImNvbmZpZ1ZhbHVlIiwidmFsaWRhdGVTdGF0dXMiLCJmbnMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJwcm9jZXNzIiwiaXNBcnJheUJ1ZmZlciIsImlzQnVmZmVyIiwiaXNTdHJlYW0iLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyVmlldyIsImJ1ZmZlciIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNPYmplY3QiLCJyYXdWYWx1ZSIsInBhcnNlciIsImVuY29kZXIiLCJpc1N0cmluZyIsIkpTT04iLCJwYXJzZSIsInRyaW0iLCJlIiwic3RyaW5naWZ5Iiwic3RyaW5naWZ5U2FmZWx5Iiwic3RyaWN0SlNPTlBhcnNpbmciLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInRoaXNBcmciLCJhcmdzIiwiYXJndW1lbnRzIiwiZW5jb2RlIiwic2VyaWFsaXplZFBhcmFtcyIsInBhcnRzIiwidiIsImlzRGF0ZSIsInRvSVNPU3RyaW5nIiwiam9pbiIsImhhc2htYXJrSW5kZXgiLCJyZWxhdGl2ZVVSTCIsIndyaXRlIiwiZXhwaXJlcyIsInBhdGgiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJpc051bWJlciIsIkRhdGUiLCJ0b0dNVFN0cmluZyIsImRvY3VtZW50IiwibWF0Y2giLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJub3ciLCJ0ZXN0IiwicGF5bG9hZCIsIm9yaWdpblVSTCIsIm1zaWUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsInByb3RvY29sIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImNoYXJBdCIsIndpbmRvdyIsImxvY2F0aW9uIiwicmVxdWVzdFVSTCIsInBhcnNlZCIsIm5vcm1hbGl6ZWROYW1lIiwiaWdub3JlRHVwbGljYXRlT2YiLCJzcGxpdCIsImxpbmUiLCJzdWJzdHIiLCJjYWxsYmFjayIsImFyciIsInRoaW5nIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmVyc2lvbiIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsImNvbnNvbGUiLCJ3YXJuIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwicmVzdWx0IiwiZ2V0UHJvdG90eXBlT2YiLCJpc0Z1bmN0aW9uIiwib2JqIiwiaGFzT3duUHJvcGVydHkiLCJjb25zdHJ1Y3RvciIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicGlwZSIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsImEiLCJiIiwic3RyIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImRlZmF1bHRPcHRpb25zIiwiZ2VuZXJhdGVDYWxsYmFja0Z1bmN0aW9uIiwiTWF0aCIsImNlaWwiLCJyYW5kb20iLCJjbGVhckZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lIiwicmVtb3ZlU2NyaXB0Iiwic2NyaXB0SWQiLCJzY3JpcHQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwicmVtb3ZlQ2hpbGQiLCJfdXJsIiwianNvbnBDYWxsYmFjayIsInRpbWVvdXRJZCIsImNhbGxiYWNrRnVuY3Rpb24iLCJqc29ucENhbGxiYWNrRnVuY3Rpb24iLCJvayIsImpzb24iLCJjbGVhclRpbWVvdXQiLCJqc29ucFNjcmlwdCIsImNoYXJzZXQiLCJub25jZSIsInJlZmVycmVyUG9saWN5IiwiYXBwZW5kQ2hpbGQiLCJjaXR5TmFtZXMiLCJTZXQiLCJjaXRpZXMiLCJjaXR5TmFtZVNob3J0VG9GdWxsIiwiTWFwIiwiY2l0eU5hbWUiLCJzZXQiLCJjb2xvcnMiLCJpZ25vcmVMaXN0IiwibXVuaWNpcGFsaXR5TGlzdCIsIm1hbnVhbE1hcHBpbmciLCJtYW51YWxNYXBwaW5nV2l0aFByb3ZpbmNlIiwibG9hZERhdGEiLCJmZXRjaEpzb25wIiwibGlzdCIsImdldCIsIm5vcm1hbGl6ZUNpdHlOYW1lIiwicHJvdmluY2VOYW1lIiwiaGFzIiwic2hvcnROYW1lIiwibG9nIiwiZ2V0Q29uZmlybWVkQ291bnQiLCJjb25maXJtZWRDb3VudCIsInByb3ZpbmNlRGF0YSIsIk51bWJlciIsImVjb25OdW0iLCJjaXR5IiwiY2l0eURhdGEiLCJub3dDb25maXJtIiwibWFwTmFtZSIsImNvdW50IiwiZW50cmllcyIsImlkeCIsInRocmVzaG9sZCIsIm1hcCIsImRpc1Byb3ZpbmNlIiwiZGlzQ2hvbmdxaW5nIiwibGF5ZXIiLCJ0ZXh0U3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjYWNoZSIsImdldENvdW50QnlOYW1lIiwiZ2V0Q29sb3JCeU5hbWUiLCJnZXRDb2xvciIsImNsaWNrSGFuZGxlciIsImV2IiwicHgiLCJwaXhlbCIsInByb3BzIiwiZ2V0RGlzdHJpY3RCeUNvbnRhaW5lclBvcyIsInNlcGVyYXRvciIsImluY2x1ZGVzIiwiYWRjb2RlX3BybyIsInRleHQiLCJOQU1FX0NITiIsImxhYmVsTWFya2VyIiwiQU1hcCIsIkxhYmVsTWFya2VyIiwicG9zaXRpb24iLCJ4IiwieSIsInN0eWxlIiwicmFuayIsImFkZCIsInBsdWdpbiIsImlzQ2hvbmdxaW5nIiwic3ViZGlzdHJpY3QiLCJkaXN0cmljdHNIYW5kbGVyIiwiZW50cnkiLCJkaXN0cmljdExpc3QiLCJvcHRpb24iLCJjZW50ZXIiLCJhZGNvZGUiLCJjaG9uZ3FpbmdEb3dudG93biIsImFkY29kZV9jaXQiLCJkaXN0cmljdFNlYXJjaCIsIkRpc3RyaWN0U2VhcmNoIiwibGV2ZWwiLCJrIiwiem9vbSIsInNjcmVlbiIsIndpZHRoIiwicGl0Y2giLCJ2aWV3TW9kZSIsIkRpc3RyaWN0TGF5ZXIiLCJQcm92aW5jZSIsInpJbmRleCIsImRlcHRoIiwic3R5bGVzIiwiZmlsbCIsInByb3BlcnRpZXMiLCJzZXRNYXAiLCJvbiIsIkxhYmVsc0xheWVyIiwiZml0VmlldyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJuIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIm5tZCIsInBhdGhzIiwiY2hpbGRyZW4iLCJzIl0sInNvdXJjZVJvb3QiOiIifQ==