var koalafiSdk;koalafiSdk=(()=>{var e={16:(e,t,n)=>{var r=n(15),i=n(645)(r);i.push([e.id,"#koalafi-modal {\n  position: fixed;\n  z-index: 2000;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n}\n\n#koalafi-iframe,\n#koalafi-iframe-wrapper,\n#koalafi-modal-content {\n  align-items: center;\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  height: 100%;\n  left: 0;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 2000;\n}\n\n#koalafi-loader {\n  background-color: white;\n  border-radius: 0.3rem;\n  display: flex;\n  margin: 0 auto;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n}\n\n@media only screen and (min-width: 768px) {\n  #koalafi-loader {\n    width: 540px;\n    height: 600px;\n  }\n}\n","",{version:3,sources:["webpack://./src/features/modal/modal.css"],names:[],mappings:"AAAA;EACE,eAAe;EACf,aAAa;EACb,OAAO;EACP,MAAM;EACN,WAAW;EACX,YAAY;EACZ,cAAc;EACd,oCAAoC;EACpC,aAAa;AACf;;AAEA;;;EAGE,mBAAmB;EACnB,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,YAAY;EACZ,OAAO;EACP,gBAAgB;EAChB,eAAe;EACf,MAAM;EACN,WAAW;EACX,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,qBAAqB;EACrB,aAAa;EACb,cAAc;EACd,WAAW;EACX,YAAY;EACZ,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE;IACE,YAAY;IACZ,aAAa;EACf;AACF",sourcesContent:["#koalafi-modal {\n  position: fixed;\n  z-index: 2000;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n}\n\n#koalafi-iframe,\n#koalafi-iframe-wrapper,\n#koalafi-modal-content {\n  align-items: center;\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  height: 100%;\n  left: 0;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 2000;\n}\n\n#koalafi-loader {\n  background-color: white;\n  border-radius: 0.3rem;\n  display: flex;\n  margin: 0 auto;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n}\n\n@media only screen and (min-width: 768px) {\n  #koalafi-loader {\n    width: 540px;\n    height: 600px;\n  }\n}\n"],sourceRoot:""}]),e.exports=i},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var a=this[o][0];null!=a&&(i[a]=!0)}for(var s=0;s<e.length;s++){var u=[].concat(e[s]);r&&i[u[0]]||(n&&(u[2]?u[2]="".concat(n," and ").concat(u[2]):u[2]=n),t.push(u))}},t}},15:e=>{"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.exports=function(e){var n,r,i=(r=4,function(e){if(Array.isArray(e))return e}(n=e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}}(n,r)||function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=i[1],a=i[3];if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),u="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),c="/*# ".concat(u," */"),l=a.sources.map((function(e){return"/*# sourceURL=".concat(a.sourceRoot||"").concat(e," */")}));return[o].concat(l).concat([c]).join("\n")}return[o].join("\n")}},445:e=>{"use strict";e.exports=function(e){var t=e.uri,n=e.name,r=e.type;this.uri=t,this.name=n,this.type=r}},804:(e,t,n)=>{"use strict";var r=n(268);e.exports=function e(t,n,i){var o;void 0===n&&(n=""),void 0===i&&(i=r);var a=new Map;function s(e,t){var n=a.get(t);n?n.push.apply(n,e):a.set(t,e)}if(i(t))o=null,s([n],t);else{var u=n?n+".":"";if("undefined"!=typeof FileList&&t instanceof FileList)o=Array.prototype.map.call(t,(function(e,t){return s([""+u+t],e),null}));else if(Array.isArray(t))o=t.map((function(t,n){var r=e(t,""+u+n,i);return r.files.forEach(s),r.clone}));else if(t&&t.constructor===Object)for(var c in o={},t){var l=e(t[c],""+u+c,i);l.files.forEach(s),o[c]=l.clone}else o=t}return{clone:o,files:a}}},823:(e,t,n)=>{"use strict";t.ReactNativeFile=n(445),t.extractFiles=n(804),t.isExtractableFile=n(268)},268:(e,t,n)=>{"use strict";var r=n(445);e.exports=function(e){return"undefined"!=typeof File&&e instanceof File||"undefined"!=typeof Blob&&e instanceof Blob||e instanceof r}},458:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=n(823),o=r(n(45)),a=function(e){return i.isExtractableFile(e)||null!==e&&"object"==typeof e&&"function"==typeof e.pipe};t.default=function(e,t){var n=i.extractFiles({query:e,variables:t},"",a),r=n.clone,s=n.files;if(0===s.size)return JSON.stringify(r);var u=new("undefined"==typeof FormData?o.default:FormData);u.append("operations",JSON.stringify(r));var c={},l=0;return s.forEach((function(e){c[++l]=e})),u.append("map",JSON.stringify(c)),l=0,s.forEach((function(e,t){u.append(""+ ++l,t)})),u}},687:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&i(t,e,n);return o(t,e),t},s=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},u=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}},c=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.gql=t.request=t.rawRequest=t.GraphQLClient=t.ClientError=void 0;var f=a(n(581)),d=f,p=n(33),h=l(n(458)),y=n(308),v=n(308);Object.defineProperty(t,"ClientError",{enumerable:!0,get:function(){return v.ClientError}});var m=function(e){var t={};return e&&("undefined"!=typeof Headers&&e instanceof Headers||e instanceof d.Headers?t=function(e){var t={};return e.forEach((function(e,n){t[n]=e})),t}(e):Array.isArray(e)?e.forEach((function(e){var n=e[0],r=e[1];t[n]=r})):t=e),t},b=function(){function e(e,t){this.url=e,this.options=t||{}}return e.prototype.rawRequest=function(e,t,n){return s(this,void 0,void 0,(function(){var i,o,a,s,l,d,p,v,b,g,w;return u(this,(function(u){switch(u.label){case 0:return i=this.options,o=i.headers,a=i.fetch,s=void 0===a?f.default:a,l=c(i,["headers","fetch"]),d=h.default(e,t),[4,s(this.url,r({method:"POST",headers:r(r(r({},"string"==typeof d?{"Content-Type":"application/json"}:{}),m(o)),m(n)),body:d},l))];case 1:return[4,A(p=u.sent())];case 2:if(v=u.sent(),p.ok&&!v.errors&&v.data)return b=p.headers,g=p.status,[2,r(r({},v),{headers:b,status:g})];throw w="string"==typeof v?{error:v}:v,new y.ClientError(r(r({},w),{status:p.status,headers:p.headers}),{query:e,variables:t})}}))}))},e.prototype.request=function(e,t,n){return s(this,void 0,void 0,(function(){var i,o,a,s,l,d,v,b,g,w;return u(this,(function(u){switch(u.label){case 0:return i=this.options,o=i.headers,a=i.fetch,s=void 0===a?f.default:a,l=c(i,["headers","fetch"]),d=function(e){return"string"==typeof e?e:p.print(e)}(e),v=h.default(d,t),[4,s(this.url,r({method:"POST",headers:r(r(r({},"string"==typeof v?{"Content-Type":"application/json"}:{}),m(o)),m(n)),body:v},l))];case 1:return[4,A(b=u.sent())];case 2:if(g=u.sent(),b.ok&&!g.errors&&g.data)return[2,g.data];throw w="string"==typeof g?{error:g}:g,new y.ClientError(r(r({},w),{status:b.status}),{query:d,variables:t})}}))}))},e.prototype.setHeaders=function(e){return this.options.headers=e,this},e.prototype.setHeader=function(e,t){var n,r=this.options.headers;return r?r[e]=t:this.options.headers=((n={})[e]=t,n),this},e}();function g(e,t,n){return s(this,void 0,void 0,(function(){return u(this,(function(r){return[2,new b(e).request(t,n)]}))}))}function A(e){var t=e.headers.get("Content-Type");return t&&t.startsWith("application/json")?e.json():e.text()}t.GraphQLClient=b,t.rawRequest=function(e,t,n){return s(this,void 0,void 0,(function(){return u(this,(function(r){return[2,new b(e).rawRequest(t,n)]}))}))},t.request=g,t.default=g,t.gql=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return e.reduce((function(e,n,r){return""+e+n+(r in t?t[r]:"")}),"")}},308:function(e,t){"use strict";var n,r=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.ClientError=void 0;var i=function(e){function t(n,r){var i=this,o=t.extractMessage(n)+": "+JSON.stringify({response:n,request:r});return i=e.call(this,o)||this,Object.setPrototypeOf(i,t.prototype),i.response=n,i.request=r,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(i,t),i}return r(t,e),t.extractMessage=function(e){try{return e.errors[0].message}catch(t){return"GraphQL Error (Code: "+e.status+")"}},t}(Error);t.ClientError=i},581:function(e,t){var n=function(e){function t(){this.fetch=!1,this.DOMException=e.DOMException}return t.prototype=e,new t}("undefined"!=typeof self?self:this);!function(e){!function(t){var n="URLSearchParams"in e,r="Symbol"in e&&"iterator"in Symbol,i="FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),o="FormData"in e,a="ArrayBuffer"in e;if(a)var s=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(e){return e&&s.indexOf(Object.prototype.toString.call(e))>-1};function c(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function l(e){return"string"!=typeof e&&(e=String(e)),e}function f(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function d(e){this.map={},e instanceof d?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function p(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function h(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function y(e){var t=new FileReader,n=h(t);return t.readAsArrayBuffer(e),n}function v(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:i&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:o&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&i&&(t=e)&&DataView.prototype.isPrototypeOf(t)?(this._bodyArrayBuffer=v(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||u(e))?this._bodyArrayBuffer=v(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},i&&(this.blob=function(){var e=p(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?p(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(y)}),this.text=function(){var e,t,n,r=p(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,n=h(t=new FileReader),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},o&&(this.formData=function(){return this.text().then(A)}),this.json=function(){return this.text().then(JSON.parse)},this}d.prototype.append=function(e,t){e=c(e),t=l(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},d.prototype.delete=function(e){delete this.map[c(e)]},d.prototype.get=function(e){return e=c(e),this.has(e)?this.map[e]:null},d.prototype.has=function(e){return this.map.hasOwnProperty(c(e))},d.prototype.set=function(e,t){this.map[c(e)]=l(t)},d.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},d.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),f(e)},d.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),f(e)},d.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),f(e)},r&&(d.prototype[Symbol.iterator]=d.prototype.entries);var b=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function g(e,t){var n,r,i=(t=t||{}).body;if(e instanceof g){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new d(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,i||null==e._bodyInit||(i=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new d(t.headers)),this.method=(r=(n=t.method||this.method||"GET").toUpperCase(),b.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function A(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),i=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(i))}})),t}function w(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new d(t.headers),this.url=t.url||"",this._initBody(e)}g.prototype.clone=function(){return new g(this,{body:this._bodyInit})},m.call(g.prototype),m.call(w.prototype),w.prototype.clone=function(){return new w(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},w.error=function(){var e=new w(null,{status:0,statusText:""});return e.type="error",e};var E=[301,302,303,307,308];w.redirect=function(e,t){if(-1===E.indexOf(t))throw new RangeError("Invalid status code");return new w(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function x(e,n){return new Promise((function(r,o){var a=new g(e,n);if(a.signal&&a.signal.aborted)return o(new t.DOMException("Aborted","AbortError"));var s=new XMLHttpRequest;function u(){s.abort()}s.onload=function(){var e,t,n={status:s.status,statusText:s.statusText,headers:(e=s.getAllResponseHeaders()||"",t=new d,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var i=n.join(":").trim();t.append(r,i)}})),t)};n.url="responseURL"in s?s.responseURL:n.headers.get("X-Request-URL");var i="response"in s?s.response:s.responseText;r(new w(i,n))},s.onerror=function(){o(new TypeError("Network request failed"))},s.ontimeout=function(){o(new TypeError("Network request failed"))},s.onabort=function(){o(new t.DOMException("Aborted","AbortError"))},s.open(a.method,a.url,!0),"include"===a.credentials?s.withCredentials=!0:"omit"===a.credentials&&(s.withCredentials=!1),"responseType"in s&&i&&(s.responseType="blob"),a.headers.forEach((function(e,t){s.setRequestHeader(t,e)})),a.signal&&(a.signal.addEventListener("abort",u),s.onreadystatechange=function(){4===s.readyState&&a.signal.removeEventListener("abort",u)}),s.send(void 0===a._bodyInit?null:a._bodyInit)}))}x.polyfill=!0,e.fetch||(e.fetch=x,e.Headers=d,e.Request=g,e.Response=w),t.Headers=d,t.Request=g,t.Response=w,t.fetch=x}({})}(n),delete n.fetch.polyfill,(t=n.fetch).default=n.fetch,t.fetch=n.fetch,t.Headers=n.Headers,t.Request=n.Request,t.Response=n.Response,e.exports=t},45:e=>{e.exports="object"==typeof self?self.FormData:window.FormData},972:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.prototype.toJSON;"function"==typeof t||(0,r.default)(0),e.prototype.inspect=t,i.default&&(e.prototype[i.default]=t)};var r=o(n(706)),i=o(n(554));function o(e){return e&&e.__esModule?e:{default:e}}},2:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return a(e,[])};var r,i=(r=n(554))&&r.__esModule?r:{default:r};function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){switch(o(e)){case"string":return JSON.stringify(e);case"function":return e.name?"[function ".concat(e.name,"]"):"[function]";case"object":return null===e?"null":function(e,t){if(-1!==t.indexOf(e))return"[Circular]";var n=[].concat(t,[e]),r=function(e){var t=e[String(i.default)];return"function"==typeof t?t:"function"==typeof e.inspect?e.inspect:void 0}(e);if(void 0!==r){var o=r.call(e);if(o!==e)return"string"==typeof o?o:a(o,n)}else if(Array.isArray(e))return function(e,t){if(0===e.length)return"[]";if(t.length>2)return"[Array]";for(var n=Math.min(10,e.length),r=e.length-n,i=[],o=0;o<n;++o)i.push(a(e[o],t));return 1===r?i.push("... 1 more item"):r>1&&i.push("... ".concat(r," more items")),"["+i.join(", ")+"]"}(e,n);return function(e,t){var n=Object.keys(e);return 0===n.length?"{}":t.length>2?"["+function(e){var t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if("Object"===t&&"function"==typeof e.constructor){var n=e.constructor.name;if("string"==typeof n&&""!==n)return n}return t}(e)+"]":"{ "+n.map((function(n){return n+": "+a(e[n],t)})).join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}},706:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}},554:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):void 0;t.default=n},807:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isNode=function(e){return null!=e&&"string"==typeof e.kind},t.Token=t.Location=void 0;var r,i=(r=n(972))&&r.__esModule?r:{default:r},o=function(){function e(e,t,n){this.start=e.start,this.end=t.end,this.startToken=e,this.endToken=t,this.source=n}return e.prototype.toJSON=function(){return{start:this.start,end:this.end}},e}();t.Location=o,(0,i.default)(o);var a=function(){function e(e,t,n,r,i,o,a){this.kind=e,this.start=t,this.end=n,this.line=r,this.column=i,this.value=a,this.prev=o,this.next=null}return e.prototype.toJSON=function(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}},e}();t.Token=a,(0,i.default)(a)},849:(e,t)=>{"use strict";function n(e){for(var t=0;t<e.length;++t)if(" "!==e[t]&&"\t"!==e[t])return!1;return!0}function r(e){for(var t,n=!0,r=!0,i=0,o=null,a=0;a<e.length;++a)switch(e.charCodeAt(a)){case 13:10===e.charCodeAt(a+1)&&++a;case 10:n=!1,r=!0,i=0;break;case 9:case 32:++i;break;default:r&&!n&&(null===o||i<o)&&(o=i),r=!1}return null!==(t=o)&&void 0!==t?t:0}Object.defineProperty(t,"__esModule",{value:!0}),t.dedentBlockStringValue=function(e){var t=e.split(/\r\n|[\n\r]/g),i=r(e);if(0!==i)for(var o=1;o<t.length;o++)t[o]=t[o].slice(i);for(var a=0;a<t.length&&n(t[a]);)++a;for(var s=t.length;s>a&&n(t[s-1]);)--s;return t.slice(a,s).join("\n")},t.getBlockStringIndentation=r,t.printBlockString=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=-1===e.indexOf("\n"),i=" "===e[0]||"\t"===e[0],o='"'===e[e.length-1],a="\\"===e[e.length-1],s=!r||o||a||n,u="";return!s||r&&i||(u+="\n"+t),u+=t?e.replace(/\n/g,"\n"+t):e,s&&(u+="\n"),'"""'+u.replace(/"""/g,'\\"""')+'"""'}},33:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.print=function(e){return(0,r.visit)(e,{leave:o})};var r=n(285),i=n(849),o={Name:function(e){return e.value},Variable:function(e){return"$"+e.name},Document:function(e){return s(e.definitions,"\n\n")+"\n"},OperationDefinition:function(e){var t=e.operation,n=e.name,r=c("(",s(e.variableDefinitions,", "),")"),i=s(e.directives," "),o=e.selectionSet;return n||i||r||"query"!==t?s([t,s([n,r]),i,o]," "):o},VariableDefinition:function(e){var t=e.variable,n=e.type,r=e.defaultValue,i=e.directives;return t+": "+n+c(" = ",r)+c(" ",s(i," "))},SelectionSet:function(e){return u(e.selections)},Field:function(e){var t=e.alias,n=e.name,r=e.arguments,i=e.directives,o=e.selectionSet,a=c("",t,": ")+n,u=a+c("(",s(r,", "),")");return u.length>80&&(u=a+c("(\n",l(s(r,"\n")),"\n)")),s([u,s(i," "),o]," ")},Argument:function(e){return e.name+": "+e.value},FragmentSpread:function(e){return"..."+e.name+c(" ",s(e.directives," "))},InlineFragment:function(e){var t=e.typeCondition,n=e.directives,r=e.selectionSet;return s(["...",c("on ",t),s(n," "),r]," ")},FragmentDefinition:function(e){var t=e.name,n=e.typeCondition,r=e.variableDefinitions,i=e.directives,o=e.selectionSet;return"fragment ".concat(t).concat(c("(",s(r,", "),")")," ")+"on ".concat(n," ").concat(c("",s(i," ")," "))+o},IntValue:function(e){return e.value},FloatValue:function(e){return e.value},StringValue:function(e,t){var n=e.value;return e.block?(0,i.printBlockString)(n,"description"===t?"":"  "):JSON.stringify(n)},BooleanValue:function(e){return e.value?"true":"false"},NullValue:function(){return"null"},EnumValue:function(e){return e.value},ListValue:function(e){return"["+s(e.values,", ")+"]"},ObjectValue:function(e){return"{"+s(e.fields,", ")+"}"},ObjectField:function(e){return e.name+": "+e.value},Directive:function(e){return"@"+e.name+c("(",s(e.arguments,", "),")")},NamedType:function(e){return e.name},ListType:function(e){return"["+e.type+"]"},NonNullType:function(e){return e.type+"!"},SchemaDefinition:a((function(e){var t=e.directives,n=e.operationTypes;return s(["schema",s(t," "),u(n)]," ")})),OperationTypeDefinition:function(e){return e.operation+": "+e.type},ScalarTypeDefinition:a((function(e){return s(["scalar",e.name,s(e.directives," ")]," ")})),ObjectTypeDefinition:a((function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["type",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")})),FieldDefinition:a((function(e){var t=e.name,n=e.arguments,r=e.type,i=e.directives;return t+(d(n)?c("(\n",l(s(n,"\n")),"\n)"):c("(",s(n,", "),")"))+": "+r+c(" ",s(i," "))})),InputValueDefinition:a((function(e){var t=e.name,n=e.type,r=e.defaultValue,i=e.directives;return s([t+": "+n,c("= ",r),s(i," ")]," ")})),InterfaceTypeDefinition:a((function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["interface",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")})),UnionTypeDefinition:a((function(e){var t=e.name,n=e.directives,r=e.types;return s(["union",t,s(n," "),r&&0!==r.length?"= "+s(r," | "):""]," ")})),EnumTypeDefinition:a((function(e){var t=e.name,n=e.directives,r=e.values;return s(["enum",t,s(n," "),u(r)]," ")})),EnumValueDefinition:a((function(e){return s([e.name,s(e.directives," ")]," ")})),InputObjectTypeDefinition:a((function(e){var t=e.name,n=e.directives,r=e.fields;return s(["input",t,s(n," "),u(r)]," ")})),DirectiveDefinition:a((function(e){var t=e.name,n=e.arguments,r=e.repeatable,i=e.locations;return"directive @"+t+(d(n)?c("(\n",l(s(n,"\n")),"\n)"):c("(",s(n,", "),")"))+(r?" repeatable":"")+" on "+s(i," | ")})),SchemaExtension:function(e){var t=e.directives,n=e.operationTypes;return s(["extend schema",s(t," "),u(n)]," ")},ScalarTypeExtension:function(e){return s(["extend scalar",e.name,s(e.directives," ")]," ")},ObjectTypeExtension:function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["extend type",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")},InterfaceTypeExtension:function(e){var t=e.name,n=e.interfaces,r=e.directives,i=e.fields;return s(["extend interface",t,c("implements ",s(n," & ")),s(r," "),u(i)]," ")},UnionTypeExtension:function(e){var t=e.name,n=e.directives,r=e.types;return s(["extend union",t,s(n," "),r&&0!==r.length?"= "+s(r," | "):""]," ")},EnumTypeExtension:function(e){var t=e.name,n=e.directives,r=e.values;return s(["extend enum",t,s(n," "),u(r)]," ")},InputObjectTypeExtension:function(e){var t=e.name,n=e.directives,r=e.fields;return s(["extend input",t,s(n," "),u(r)]," ")}};function a(e){return function(t){return s([t.description,e(t)],"\n")}}function s(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return null!==(t=null==e?void 0:e.filter((function(e){return e})).join(n))&&void 0!==t?t:""}function u(e){return c("{\n",l(s(e,"\n")),"\n}")}function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return null!=t&&""!==t?e+t+n:""}function l(e){return c("  ",e.replace(/\n/g,"\n  "))}function f(e){return-1!==e.indexOf("\n")}function d(e){return null!=e&&e.some(f)}},285:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.visit=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a,r=void 0,c=Array.isArray(e),l=[e],f=-1,d=[],p=void 0,h=void 0,y=void 0,v=[],m=[],b=e;do{var g=++f===l.length,A=g&&0!==d.length;if(g){if(h=0===m.length?void 0:v[v.length-1],p=y,y=m.pop(),A){if(c)p=p.slice();else{for(var w={},E=0,x=Object.keys(p);E<x.length;E++){var O=x[E];w[O]=p[O]}p=w}for(var _=0,S=0;S<d.length;S++){var j=d[S][0],T=d[S][1];c&&(j-=_),c&&null===T?(p.splice(j,1),_++):p[j]=T}}f=r.index,l=r.keys,d=r.edits,c=r.inArray,r=r.prev}else{if(h=y?c?f:l[f]:void 0,null==(p=y?y[h]:b))continue;y&&v.push(h)}var k,B=void 0;if(!Array.isArray(p)){if(!(0,o.isNode)(p))throw new Error("Invalid AST Node: ".concat((0,i.default)(p),"."));var C=u(t,p.kind,g);if(C){if((B=C.call(t,p,h,y,v,m))===s)break;if(!1===B){if(!g){v.pop();continue}}else if(void 0!==B&&(d.push([h,B]),!g)){if(!(0,o.isNode)(B)){v.pop();continue}p=B}}}void 0===B&&A&&d.push([h,p]),g?v.pop():(r={inArray:c,index:f,keys:l,edits:d,prev:r},l=(c=Array.isArray(p))?p:null!==(k=n[p.kind])&&void 0!==k?k:[],f=-1,d=[],y&&m.push(y),y=p)}while(void 0!==r);return 0!==d.length&&(b=d[d.length-1][1]),b},t.visitInParallel=function(e){var t=new Array(e.length);return{enter:function(n){for(var r=0;r<e.length;r++)if(null==t[r]){var i=u(e[r],n.kind,!1);if(i){var o=i.apply(e[r],arguments);if(!1===o)t[r]=n;else if(o===s)t[r]=s;else if(void 0!==o)return o}}},leave:function(n){for(var r=0;r<e.length;r++)if(null==t[r]){var i=u(e[r],n.kind,!0);if(i){var o=i.apply(e[r],arguments);if(o===s)t[r]=s;else if(void 0!==o&&!1!==o)return o}}else t[r]===n&&(t[r]=null)}}},t.getVisitFn=u,t.BREAK=t.QueryDocumentKeys=void 0;var r,i=(r=n(2))&&r.__esModule?r:{default:r},o=n(807),a={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};t.QueryDocumentKeys=a;var s=Object.freeze({});function u(e,t,n){var r=e[t];if(r){if(!n&&"function"==typeof r)return r;var i=n?r.leave:r.enter;if("function"==typeof i)return i}else{var o=n?e.leave:e.enter;if(o){if("function"==typeof o)return o;var a=o[t];if("function"==typeof a)return a}}}t.BREAK=s},387:(e,t,n)=>{var r='<div id="koalafi-modal"> <div id="koalafi-modal-content"> <div id="koalafi-loader"> <img src="'+n(91)(n(206))+'"/> </div> <div id="koalafi-iframe-wrapper"> <iframe id="koalafi-iframe" frameborder="0" src="${kfiUrl}${queryParams}"></iframe> </div> </div> </div> ';e.exports=r},91:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(t.hash&&(e+=t.hash),t.maybeNeedQuotes&&/[\t\n\f\r "'=<>`]/.test(e)?'"'.concat(e,'"'):e)}},397:(e,t,n)=>{var r=n(16);e.exports="string"==typeof r?r:r.toString()},68:(e,t,n)=>{var r=n(387);e.exports="string"==typeof r?r:r.toString()},449:(e,t,n)=>{"use strict";n.r(t),n.d(t,{edgeService:()=>u,openModal:()=>d});var r=n(687),i=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))};let o;const a=r.gql`
  mutation createOrder($orderInput: NewOrder!) {
    createOrder(input: $orderInput) {
      orderId
      orderErrors {
        __typename
        ... on FatalError {
          message
        }
        ... on BadRequest {
          message
        }
      }
    }
  }
`,s=r.gql`
  query order($id: ID!) {
    order(id: $id) {
      metadata {
        formType
      }
    }
  }
`,u={fetchOrder:e=>i(void 0,void 0,void 0,(function*(){return o||(o=new r.GraphQLClient("https://application-edge-service.sandbox.koalafi.com/query")),o.request(s,{id:e})})),createOrder:(e,t)=>i(void 0,void 0,void 0,(function*(){return o||(o=new r.GraphQLClient("https://application-edge-service.sandbox.koalafi.com/query")),o.setHeader("public-dealer-id",e),o.request(a,{orderInput:t})}))};const c=n(68),l=n(397),f=(e,t)=>{document.getElementById(t).classList.remove("show"),setTimeout((function(){e.style.display="none"}),200),document.body.style.overflow="visible";const n=new CustomEvent("closeModal",{detail:{isModalClosed:!0}});window.dispatchEvent(n)},d=e=>{return t=void 0,n=void 0,i=function*(){let t,n,r;if("object"==typeof e?({orderId:t,pdi:n,useStage:r}=e):"string"==typeof e&&(t=e),!t&&!n)throw new Error("openModal(): arguments not passed in correctly.");const i="https://epply.sandbox.koalafi.com",o="koalafi-modal-content",a=((e,t,n)=>{let r;switch(!0){case!!n.orderId&&n.useStage:r=`?orderId=${n.orderId}&stage`;break;case!!n.orderId&&!!n.pdi:r=`?orderId=${n.orderId}&pdi=${n.pdi}`;break;case!!n.orderId&&!n.pdi:r=`?orderId=${n.orderId}`;break;case!!n.pdi&&!n.orderId:r=`?pdi=${n.pdi}`;break;default:throw new Error("openModal(): invalid args")}return e.replace("${kfiUrl}","https://epply.sandbox.koalafi.com").replace("${queryParams}",r)})(c,0,{orderId:t,pdi:n,useStage:r});try{((e,t)=>{if(!document.getElementById(e)){const n=document.createElement("style");n.id=e,n.innerHTML=t,document.getElementsByTagName("head")[0].appendChild(n)}})("koalafi-css",l),((e,t,n)=>{if(!document.getElementById(t)){const e=document.createElement("div");e.id=t,document.body.appendChild(e)}document.body.style.overflow="hidden",document.getElementById(t).insertAdjacentHTML("afterend",e),setTimeout((function(){console.log(n,"modalcontentid"),document.getElementById(n).classList.add("show")}),4)})(a,"koalafi-div",o)}catch(e){console.error("Inserting CSS/HTML: ",e)}const s=document.getElementById("koalafi-modal"),u=document.getElementById("koalafi-modal-close-button");let d,p;return document.onclick=function(e){var n;if(e.target==u){const e=document.getElementById("koalafi-iframe");null===(n=null==e?void 0:e.contentWindow)||void 0===n||n.postMessage("Closed modal with X button",i),f(s,o),p({orderId:t,reason:"closed modal with X button"})}},window.addEventListener("message",(function(e){if(e.origin!==i)return;const t=JSON.parse(e.data);if(t.stopSpinner){const e=document.getElementById("koalafi-loader");e&&e.remove()}t.wcfSuccess?d(t.payload):!1===t.wcfSuccess&&p(t.payload),t.closeModal&&f(s,o)}),!1),new Promise(((e,t)=>{d=e,p=t}))},new((r=void 0)||(r=Promise))((function(e,o){function a(e){try{u(i.next(e))}catch(e){o(e)}}function s(e){try{u(i.throw(e))}catch(e){o(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(a,s)}u((i=i.apply(t,n||[])).next())}));var t,n,r,i}},206:(e,t,n)=>{"use strict";e.exports=n.p+"254cc7c28b470b33b135.svg"}},t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={id:r,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}return n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var t=n.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");r.length&&(e=r[r.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),n(449)})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vc3JjL2ZlYXR1cmVzL21vZGFsL21vZGFsLmNzcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9leHRyYWN0LWZpbGVzL3B1YmxpYy9SZWFjdE5hdGl2ZUZpbGUuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9leHRyYWN0LWZpbGVzL3B1YmxpYy9leHRyYWN0RmlsZXMuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9leHRyYWN0LWZpbGVzL3B1YmxpYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2V4dHJhY3QtZmlsZXMvcHVibGljL2lzRXh0cmFjdGFibGVGaWxlLmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC1yZXF1ZXN0L2Rpc3QvY3JlYXRlUmVxdWVzdEJvZHkuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsLXJlcXVlc3QvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2dyYXBocWwtcmVxdWVzdC9kaXN0L3R5cGVzLmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC1yZXF1ZXN0L25vZGVfbW9kdWxlcy9jcm9zcy1mZXRjaC9kaXN0L2Jyb3dzZXItcG9ueWZpbGwuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsLXJlcXVlc3Qvbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2dyYXBocWwvanN1dGlscy9kZWZpbmVJbnNwZWN0LmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC9qc3V0aWxzL2luc3BlY3QuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvaW52YXJpYW50LmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9ub2RlX21vZHVsZXMvZ3JhcGhxbC9qc3V0aWxzL25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2xhbmd1YWdlL2FzdC5qcyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vbm9kZV9tb2R1bGVzL2dyYXBocWwvbGFuZ3VhZ2UvYmxvY2tTdHJpbmcuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2xhbmd1YWdlL3ByaW50ZXIuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9ncmFwaHFsL2xhbmd1YWdlL3Zpc2l0b3IuanMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL3NyYy9mZWF0dXJlcy9tb2RhbC9tb2RhbC1zaG9ydC1mb3JtLmh0bWwiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL25vZGVfbW9kdWxlcy9odG1sLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzIiwid2VicGFjazovL2tvYWxhZmlTZGsvLi9zcmMvZmVhdHVyZXMvbW9kYWwvbW9kYWwuY3NzP2QzYzEiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay8uL3NyYy9mZWF0dXJlcy9tb2RhbC9tb2RhbC1zaG9ydC1mb3JtLmh0bWw/OTUyMSIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vc3JjL3NlcnZpY2VzL2VkZ2Uuc2VydmljZS50cyIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrLy4vc3JjL2ZlYXR1cmVzL21vZGFsL21vZGFsLnRzIiwid2VicGFjazovL2tvYWxhZmlTZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2tvYWxhZmlTZGsvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9rb2FsYWZpU2RrL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8va29hbGFmaVNkay93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCJdLCJuYW1lcyI6WyJfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIiwiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsImNvbmNhdCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhUXVlcnkiLCJkZWR1cGUiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwibGVuZ3RoIiwiX2kiLCJfYXJyYXlMaWtlVG9BcnJheSIsImFyciIsImxlbiIsImFycjIiLCJBcnJheSIsIl9pdGVtIiwiaXNBcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiT2JqZWN0IiwiX2FyciIsIl9uIiwiX2QiLCJfZSIsInVuZGVmaW5lZCIsIl9zIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsImVyciIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm8iLCJtaW5MZW4iLCJuIiwicHJvdG90eXBlIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJUeXBlRXJyb3IiLCJfbm9uSXRlcmFibGVSZXN0IiwiY3NzTWFwcGluZyIsImJ0b2EiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlIiwic291cmNlUm9vdCIsIl9yZWYiLCJ1cmkiLCJ0eXBlIiwiZGVmYXVsdElzRXh0cmFjdGFibGVGaWxlIiwiZXh0cmFjdEZpbGVzIiwicGF0aCIsImlzRXh0cmFjdGFibGVGaWxlIiwiY2xvbmUiLCJmaWxlcyIsIk1hcCIsImFkZEZpbGUiLCJwYXRocyIsImZpbGUiLCJzdG9yZWRQYXRocyIsImdldCIsImFwcGx5Iiwic2V0IiwicHJlZml4IiwiRmlsZUxpc3QiLCJjaGlsZCIsInJlc3VsdCIsImZvckVhY2giLCJSZWFjdE5hdGl2ZUZpbGUiLCJGaWxlIiwiQmxvYiIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJkZWZpbmVQcm9wZXJ0eSIsImV4dHJhY3RfZmlsZXNfMSIsImZvcm1fZGF0YV8xIiwiaXNFeHRyYWN0YWJsZUZpbGVFbmhhbmNlZCIsInBpcGUiLCJkZWZhdWx0IiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJfYSIsInNpemUiLCJmb3JtIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJzIiwiYXJndW1lbnRzIiwicCIsImhhc093blByb3BlcnR5IiwiX19jcmVhdGVCaW5kaW5nIiwiY3JlYXRlIiwibSIsImsiLCJrMiIsImVudW1lcmFibGUiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJ2IiwiX19pbXBvcnRTdGFyIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwiZSIsInJlamVjdGVkIiwidGhlbiIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwiZyIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIm9wIiwicG9wIiwiX19yZXN0IiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ3FsIiwicmVxdWVzdCIsInJhd1JlcXVlc3QiLCJHcmFwaFFMQ2xpZW50IiwiQ2xpZW50RXJyb3IiLCJjcm9zc19mZXRjaF8xIiwiQ3Jvc3NGZXRjaCIsInByaW50ZXJfMSIsImNyZWF0ZVJlcXVlc3RCb2R5XzEiLCJ0eXBlc18xIiwidHlwZXNfMiIsInJlc29sdmVIZWFkZXJzIiwiaGVhZGVycyIsIm9IZWFkZXJzIiwiSGVhZGVycyIsIkhlYWRlcnNJbnN0YW5jZVRvUGxhaW5PYmplY3QiLCJ1cmwiLCJvcHRpb25zIiwicmVxdWVzdEhlYWRlcnMiLCJfYiIsImxvY2FsRmV0Y2giLCJvdGhlcnMiLCJyZXNwb25zZSIsImhlYWRlcnNfMSIsInN0YXR1c18xIiwiZXJyb3JSZXN1bHQiLCJfYyIsImZldGNoIiwibWV0aG9kIiwiZ2V0UmVzdWx0Iiwib2siLCJlcnJvcnMiLCJzdGF0dXMiLCJlcnJvciIsImRvY3VtZW50IiwicmVzb2x2ZWREb2MiLCJwcmludCIsInJlc29sdmVSZXF1ZXN0RG9jdW1lbnQiLCJzZXRIZWFkZXJzIiwic2V0SGVhZGVyIiwia2V5IiwiY29udGVudFR5cGUiLCJzdGFydHNXaXRoIiwianNvbiIsInRleHQiLCJjaHVua3MiLCJyZWR1Y2UiLCJhY2N1bXVsYXRvciIsImNodW5rIiwiaW5kZXgiLCJleHRlbmRTdGF0aWNzIiwiX19leHRlbmRzIiwiZCIsImIiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9fIiwiX3N1cGVyIiwiX3RoaXMiLCJtZXNzYWdlIiwiZXh0cmFjdE1lc3NhZ2UiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiX19zZWxmX18iLCJyb290IiwiRiIsIkRPTUV4Y2VwdGlvbiIsInNlbGYiLCJzdXBwb3J0Iiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3Iiwib2JqIiwibm9ybWFsaXplTmFtZSIsIlN0cmluZyIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwic2hpZnQiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiY29uc3VtZWQiLCJib2R5VXNlZCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsIm9ubG9hZCIsIm9uZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsImJ1ZmZlckNsb25lIiwiYnVmIiwidmlldyIsIlVpbnQ4QXJyYXkiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsImlzUHJvdG90eXBlT2YiLCJfYm9keUJsb2IiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiYXJyYXlCdWZmZXIiLCJyZWFkQXNUZXh0IiwiY2hhcnMiLCJmcm9tQ2hhckNvZGUiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsInBhcnNlIiwib2xkVmFsdWUiLCJoYXMiLCJjYWxsYmFjayIsImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIiwibWV0aG9kcyIsIlJlcXVlc3QiLCJpbnB1dCIsInVwY2FzZWQiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJ0b1VwcGVyQ2FzZSIsInJlZmVycmVyIiwidHJpbSIsInNwbGl0IiwiYnl0ZXMiLCJyZXBsYWNlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiUmVzcG9uc2UiLCJib2R5SW5pdCIsInN0YXR1c1RleHQiLCJyZWRpcmVjdFN0YXR1c2VzIiwicmVkaXJlY3QiLCJSYW5nZUVycm9yIiwibG9jYXRpb24iLCJzdGFjayIsImluaXQiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwicmF3SGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJwYXJ0cyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwid2luZG93IiwiY2xhc3NPYmplY3QiLCJmbiIsInRvSlNPTiIsIl9pbnZhcmlhbnQiLCJpbnNwZWN0IiwiX25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZm9ybWF0VmFsdWUiLCJfdHlwZW9mIiwic2VlblZhbHVlcyIsInByZXZpb3VzbHlTZWVuVmFsdWVzIiwiY3VzdG9tSW5zcGVjdEZuIiwib2JqZWN0IiwiZ2V0Q3VzdG9tRm4iLCJjdXN0b21WYWx1ZSIsImFycmF5IiwiTWF0aCIsIm1pbiIsInJlbWFpbmluZyIsImZvcm1hdEFycmF5IiwidGFnIiwiZ2V0T2JqZWN0VGFnIiwiZm9ybWF0T2JqZWN0IiwiZm9ybWF0T2JqZWN0VmFsdWUiLCJjb25kaXRpb24iLCJCb29sZWFuIiwiX2RlZmF1bHQiLCJmb3IiLCJpc05vZGUiLCJtYXliZU5vZGUiLCJraW5kIiwiVG9rZW4iLCJMb2NhdGlvbiIsIl9kZWZpbmVJbnNwZWN0Iiwic3RhcnRUb2tlbiIsImVuZFRva2VuIiwic3RhcnQiLCJlbmQiLCJjb2x1bW4iLCJwcmV2IiwiaXNCbGFuayIsInN0ciIsImdldEJsb2NrU3RyaW5nSW5kZW50YXRpb24iLCJfY29tbW9uSW5kZW50IiwiaXNGaXJzdExpbmUiLCJpc0VtcHR5TGluZSIsImluZGVudCIsImNvbW1vbkluZGVudCIsImNoYXJDb2RlQXQiLCJkZWRlbnRCbG9ja1N0cmluZ1ZhbHVlIiwicmF3U3RyaW5nIiwibGluZXMiLCJzdGFydExpbmUiLCJlbmRMaW5lIiwicHJpbnRCbG9ja1N0cmluZyIsImluZGVudGF0aW9uIiwicHJlZmVyTXVsdGlwbGVMaW5lcyIsImlzU2luZ2xlTGluZSIsImhhc0xlYWRpbmdTcGFjZSIsImhhc1RyYWlsaW5nUXVvdGUiLCJoYXNUcmFpbGluZ1NsYXNoIiwicHJpbnRBc011bHRpcGxlTGluZXMiLCJhc3QiLCJfdmlzaXRvciIsInZpc2l0IiwibGVhdmUiLCJwcmludERvY0FTVFJlZHVjZXIiLCJfYmxvY2tTdHJpbmciLCJOYW1lIiwibm9kZSIsIlZhcmlhYmxlIiwiRG9jdW1lbnQiLCJkZWZpbml0aW9ucyIsIk9wZXJhdGlvbkRlZmluaXRpb24iLCJvcGVyYXRpb24iLCJ2YXJEZWZzIiwid3JhcCIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0IiwiVmFyaWFibGVEZWZpbml0aW9uIiwidmFyaWFibGUiLCJkZWZhdWx0VmFsdWUiLCJTZWxlY3Rpb25TZXQiLCJfcmVmMiIsImJsb2NrIiwic2VsZWN0aW9ucyIsIkZpZWxkIiwiX3JlZjMiLCJhbGlhcyIsImFyZ3MiLCJhcmdzTGluZSIsIkFyZ3VtZW50IiwiX3JlZjQiLCJGcmFnbWVudFNwcmVhZCIsIl9yZWY1IiwiSW5saW5lRnJhZ21lbnQiLCJfcmVmNiIsInR5cGVDb25kaXRpb24iLCJGcmFnbWVudERlZmluaXRpb24iLCJfcmVmNyIsIkludFZhbHVlIiwiX3JlZjgiLCJGbG9hdFZhbHVlIiwiX3JlZjkiLCJTdHJpbmdWYWx1ZSIsIl9yZWYxMCIsIkJvb2xlYW5WYWx1ZSIsIl9yZWYxMSIsIk51bGxWYWx1ZSIsIkVudW1WYWx1ZSIsIl9yZWYxMiIsIkxpc3RWYWx1ZSIsIl9yZWYxMyIsIk9iamVjdFZhbHVlIiwiX3JlZjE0IiwiZmllbGRzIiwiT2JqZWN0RmllbGQiLCJfcmVmMTUiLCJEaXJlY3RpdmUiLCJfcmVmMTYiLCJOYW1lZFR5cGUiLCJfcmVmMTciLCJMaXN0VHlwZSIsIl9yZWYxOCIsIk5vbk51bGxUeXBlIiwiX3JlZjE5IiwiU2NoZW1hRGVmaW5pdGlvbiIsImFkZERlc2NyaXB0aW9uIiwiX3JlZjIwIiwib3BlcmF0aW9uVHlwZXMiLCJPcGVyYXRpb25UeXBlRGVmaW5pdGlvbiIsIl9yZWYyMSIsIlNjYWxhclR5cGVEZWZpbml0aW9uIiwiX3JlZjIyIiwiT2JqZWN0VHlwZURlZmluaXRpb24iLCJfcmVmMjMiLCJpbnRlcmZhY2VzIiwiRmllbGREZWZpbml0aW9uIiwiX3JlZjI0IiwiaGFzTXVsdGlsaW5lSXRlbXMiLCJJbnB1dFZhbHVlRGVmaW5pdGlvbiIsIl9yZWYyNSIsIkludGVyZmFjZVR5cGVEZWZpbml0aW9uIiwiX3JlZjI2IiwiVW5pb25UeXBlRGVmaW5pdGlvbiIsIl9yZWYyNyIsInR5cGVzIiwiRW51bVR5cGVEZWZpbml0aW9uIiwiX3JlZjI4IiwiRW51bVZhbHVlRGVmaW5pdGlvbiIsIl9yZWYyOSIsIklucHV0T2JqZWN0VHlwZURlZmluaXRpb24iLCJfcmVmMzAiLCJEaXJlY3RpdmVEZWZpbml0aW9uIiwiX3JlZjMxIiwicmVwZWF0YWJsZSIsImxvY2F0aW9ucyIsIlNjaGVtYUV4dGVuc2lvbiIsIl9yZWYzMiIsIlNjYWxhclR5cGVFeHRlbnNpb24iLCJfcmVmMzMiLCJPYmplY3RUeXBlRXh0ZW5zaW9uIiwiX3JlZjM0IiwiSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiIsIl9yZWYzNSIsIlVuaW9uVHlwZUV4dGVuc2lvbiIsIl9yZWYzNiIsIkVudW1UeXBlRXh0ZW5zaW9uIiwiX3JlZjM3IiwiSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uIiwiX3JlZjM4IiwiY2IiLCJkZXNjcmlwdGlvbiIsIm1heWJlQXJyYXkiLCJfbWF5YmVBcnJheSRmaWx0ZXIkam8iLCJzZXBhcmF0b3IiLCJmaWx0ZXIiLCJ4IiwibWF5YmVTdHJpbmciLCJpc011bHRpbGluZSIsInNvbWUiLCJ2aXNpdG9yIiwidmlzaXRvcktleXMiLCJRdWVyeURvY3VtZW50S2V5cyIsImluQXJyYXkiLCJlZGl0cyIsInBhcmVudCIsImFuY2VzdG9ycyIsIm5ld1Jvb3QiLCJpc0xlYXZpbmciLCJpc0VkaXRlZCIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJlZGl0T2Zmc2V0IiwiaWkiLCJlZGl0S2V5IiwiZWRpdFZhbHVlIiwic3BsaWNlIiwiX3Zpc2l0b3JLZXlzJG5vZGUka2luIiwiX2FzdCIsIl9pbnNwZWN0IiwidmlzaXRGbiIsImdldFZpc2l0Rm4iLCJCUkVBSyIsInZpc2l0SW5QYXJhbGxlbCIsInZpc2l0b3JzIiwic2tpcHBpbmciLCJlbnRlciIsImZyZWV6ZSIsImtpbmRWaXNpdG9yIiwia2luZFNwZWNpZmljVmlzaXRvciIsInNwZWNpZmljVmlzaXRvciIsInNwZWNpZmljS2luZFZpc2l0b3IiLCJjb2RlIiwiX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyIsImhhc2giLCJtYXliZU5lZWRRdW90ZXMiLCJncmFwaFFMQ2xpZW50IiwiY3JlYXRlT3JkZXJNdXRhdGlvbiIsImZldGNoT3JkZXJRdWVyeSIsImVkZ2VTZXJ2aWNlIiwiZmV0Y2hPcmRlciIsImNyZWF0ZU9yZGVyIiwicHVibGljRGVhbGVySWQiLCJvcmRlcklucHV0IiwibW9kYWxTaG9ydEh0bWwiLCJzaGFyZWRDc3MiLCJoYW5kbGVDbG9zZU1vZGFsU3R5bGluZyIsIm1vZGFsRWxlbWVudCIsIm1vZGFsQ29udGVudElkIiwiZ2V0RWxlbWVudEJ5SWQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzZXRUaW1lb3V0Iiwic3R5bGUiLCJkaXNwbGF5Iiwib3ZlcmZsb3ciLCJldmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiaXNNb2RhbENsb3NlZCIsImRpc3BhdGNoRXZlbnQiLCJvcGVuTW9kYWwiLCJvcmRlcklkIiwidXNlU3RhZ2UiLCJwZGkiLCJFQ09NTV9VUkwiLCJNT0RBTF9DT05URU5UX0lEIiwibW9kaWZpZWRIdG1sIiwiaHRtbCIsImVjb21tVXJsIiwicXVlcnlQYXJhbXMiLCJtb2RpZnlLZmlIVE1MIiwiY3NzU3R5bGVUYWdJZCIsImNzcyIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0TW9kYWxDc3MiLCJlbXB0eURpdklkIiwiZW1wdHlEaXYiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJjb25zb2xlIiwibG9nIiwiYWRkIiwiaW5zZXJ0TW9kYWxIdG1sIiwid2NNb2RhbCIsImNsb3NlTW9kYWxCdXR0b24iLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJvbmNsaWNrIiwidGFyZ2V0IiwiaWZyYW1lIiwiY29udGVudFdpbmRvdyIsInBvc3RNZXNzYWdlIiwicmVhc29uIiwib3JpZ2luIiwiZXZlbnREYXRhIiwic3RvcFNwaW5uZXIiLCJzcGlubmVyRGl2Iiwid2NmU3VjY2VzcyIsInBheWxvYWQiLCJjbG9zZU1vZGFsIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImRlZmluaXRpb24iLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJwcm9wIiwiciIsInRvU3RyaW5nVGFnIiwic2NyaXB0VXJsIiwiaW1wb3J0U2NyaXB0cyIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIl0sIm1hcHBpbmdzIjoib0RBQ0EsSUFBSUEsRUFBd0MsRUFBUSxJQUVoREMsRUFEOEIs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STJmLEcsR0xaakJULEVBQW9CLE0iLCJmaWxlIjoia29hbGFmaVNkay5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbnZhciBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCIpO1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiI2tvYWxhZmktbW9kYWwge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgei1pbmRleDogMjAwMDtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuI2tvYWxhZmktaWZyYW1lLFxcbiNrb2FsYWZpLWlmcmFtZS13cmFwcGVyLFxcbiNrb2FsYWZpLW1vZGFsLWNvbnRlbnQge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZWZ0OiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgei1pbmRleDogMjAwMDtcXG59XFxuXFxuI2tvYWxhZmktbG9hZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gICNrb2FsYWZpLWxvYWRlciB7XFxuICAgIHdpZHRoOiA1NDBweDtcXG4gICAgaGVpZ2h0OiA2MDBweDtcXG4gIH1cXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2ZlYXR1cmVzL21vZGFsL21vZGFsLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLGVBQWU7RUFDZixhQUFhO0VBQ2IsT0FBTztFQUNQLE1BQU07RUFDTixXQUFXO0VBQ1gsWUFBWTtFQUNaLGNBQWM7RUFDZCxvQ0FBb0M7RUFDcEMsYUFBYTtBQUNmOztBQUVBOzs7RUFHRSxtQkFBbUI7RUFDbkIsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsWUFBWTtFQUNaLE9BQU87RUFDUCxnQkFBZ0I7RUFDaEIsZUFBZTtFQUNmLE1BQU07RUFDTixXQUFXO0VBQ1gsYUFBYTtBQUNmOztBQUVBO0VBQ0UsdUJBQXVCO0VBQ3ZCLHFCQUFxQjtFQUNyQixhQUFhO0VBQ2IsY0FBYztFQUNkLFdBQVc7RUFDWCxZQUFZO0VBQ1osbUJBQW1CO0VBQ25CLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFO0lBQ0UsWUFBWTtJQUNaLGFBQWE7RUFDZjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNrb2FsYWZpLW1vZGFsIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHotaW5kZXg6IDIwMDA7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbiNrb2FsYWZpLWlmcmFtZSxcXG4ja29hbGFmaS1pZnJhbWUtd3JhcHBlcixcXG4ja29hbGFmaS1tb2RhbC1jb250ZW50IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGVmdDogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIHotaW5kZXg6IDIwMDA7XFxufVxcblxcbiNrb2FsYWZpLWxvYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAja29hbGFmaS1sb2FkZXIge1xcbiAgICB3aWR0aDogNTQwcHg7XFxuICAgIGhlaWdodDogNjAwcHg7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBSZWFjdE5hdGl2ZUZpbGUoX3JlZikge1xuICB2YXIgdXJpID0gX3JlZi51cmksXG4gICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICB0eXBlID0gX3JlZi50eXBlO1xuICB0aGlzLnVyaSA9IHVyaTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZhdWx0SXNFeHRyYWN0YWJsZUZpbGUgPSByZXF1aXJlKCcuL2lzRXh0cmFjdGFibGVGaWxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXh0cmFjdEZpbGVzKHZhbHVlLCBwYXRoLCBpc0V4dHJhY3RhYmxlRmlsZSkge1xuICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7XG4gICAgcGF0aCA9ICcnO1xuICB9XG5cbiAgaWYgKGlzRXh0cmFjdGFibGVGaWxlID09PSB2b2lkIDApIHtcbiAgICBpc0V4dHJhY3RhYmxlRmlsZSA9IGRlZmF1bHRJc0V4dHJhY3RhYmxlRmlsZTtcbiAgfVxuXG4gIHZhciBjbG9uZTtcbiAgdmFyIGZpbGVzID0gbmV3IE1hcCgpO1xuXG4gIGZ1bmN0aW9uIGFkZEZpbGUocGF0aHMsIGZpbGUpIHtcbiAgICB2YXIgc3RvcmVkUGF0aHMgPSBmaWxlcy5nZXQoZmlsZSk7XG4gICAgaWYgKHN0b3JlZFBhdGhzKSBzdG9yZWRQYXRocy5wdXNoLmFwcGx5KHN0b3JlZFBhdGhzLCBwYXRocyk7XG4gICAgZWxzZSBmaWxlcy5zZXQoZmlsZSwgcGF0aHMpO1xuICB9XG5cbiAgaWYgKGlzRXh0cmFjdGFibGVGaWxlKHZhbHVlKSkge1xuICAgIGNsb25lID0gbnVsbDtcbiAgICBhZGRGaWxlKFtwYXRoXSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwcmVmaXggPSBwYXRoID8gcGF0aCArICcuJyA6ICcnO1xuICAgIGlmICh0eXBlb2YgRmlsZUxpc3QgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgRmlsZUxpc3QpXG4gICAgICBjbG9uZSA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh2YWx1ZSwgZnVuY3Rpb24gKGZpbGUsIGkpIHtcbiAgICAgICAgYWRkRmlsZShbJycgKyBwcmVmaXggKyBpXSwgZmlsZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICBjbG9uZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGV4dHJhY3RGaWxlcyhjaGlsZCwgJycgKyBwcmVmaXggKyBpLCBpc0V4dHJhY3RhYmxlRmlsZSk7XG4gICAgICAgIHJlc3VsdC5maWxlcy5mb3JFYWNoKGFkZEZpbGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LmNsb25lO1xuICAgICAgfSk7XG4gICAgZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgY2xvbmUgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSBpbiB2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gZXh0cmFjdEZpbGVzKHZhbHVlW2ldLCAnJyArIHByZWZpeCArIGksIGlzRXh0cmFjdGFibGVGaWxlKTtcbiAgICAgICAgcmVzdWx0LmZpbGVzLmZvckVhY2goYWRkRmlsZSk7XG4gICAgICAgIGNsb25lW2ldID0gcmVzdWx0LmNsb25lO1xuICAgICAgfVxuICAgIH0gZWxzZSBjbG9uZSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjbG9uZTogY2xvbmUsXG4gICAgZmlsZXM6IGZpbGVzLFxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5SZWFjdE5hdGl2ZUZpbGUgPSByZXF1aXJlKCcuL1JlYWN0TmF0aXZlRmlsZScpO1xuZXhwb3J0cy5leHRyYWN0RmlsZXMgPSByZXF1aXJlKCcuL2V4dHJhY3RGaWxlcycpO1xuZXhwb3J0cy5pc0V4dHJhY3RhYmxlRmlsZSA9IHJlcXVpcmUoJy4vaXNFeHRyYWN0YWJsZUZpbGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0TmF0aXZlRmlsZSA9IHJlcXVpcmUoJy4vUmVhY3ROYXRpdmVGaWxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNFeHRyYWN0YWJsZUZpbGUodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICAodHlwZW9mIEZpbGUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgRmlsZSkgfHxcbiAgICAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYikgfHxcbiAgICB2YWx1ZSBpbnN0YW5jZW9mIFJlYWN0TmF0aXZlRmlsZVxuICApO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGV4dHJhY3RfZmlsZXNfMSA9IHJlcXVpcmUoXCJleHRyYWN0LWZpbGVzXCIpO1xudmFyIGZvcm1fZGF0YV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJmb3JtLWRhdGFcIikpO1xuLyoqXG4gKiBEdWNrIHR5cGUgaWYgTm9kZUpTIHN0cmVhbVxuICogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9pcy1zdHJlYW0vYmxvYi8zNzUwNTA1YjA3MjdmNmRmNTQzMjQ3ODRmZTM2OTM2NWVmNzg4NDFlL2luZGV4LmpzI0wzXG4gKi9cbnZhciBpc0V4dHJhY3RhYmxlRmlsZUVuaGFuY2VkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGV4dHJhY3RfZmlsZXNfMS5pc0V4dHJhY3RhYmxlRmlsZSh2YWx1ZSkgfHxcbiAgICAgICAgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnBpcGUgPT09ICdmdW5jdGlvbicpO1xufTtcbi8qKlxuICogUmV0dXJucyBNdWx0aXBhcnQgRm9ybSBpZiBib2R5IGNvbnRhaW5zIGZpbGVzXG4gKiAoaHR0cHM6Ly9naXRodWIuY29tL2pheWRlbnNlcmljL2dyYXBocWwtbXVsdGlwYXJ0LXJlcXVlc3Qtc3BlYylcbiAqIE90aGVyd2lzZSByZXR1cm5zIEpTT05cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVxdWVzdEJvZHkocXVlcnksIHZhcmlhYmxlcykge1xuICAgIHZhciBfYSA9IGV4dHJhY3RfZmlsZXNfMS5leHRyYWN0RmlsZXMoeyBxdWVyeTogcXVlcnksIHZhcmlhYmxlczogdmFyaWFibGVzIH0sICcnLCBpc0V4dHJhY3RhYmxlRmlsZUVuaGFuY2VkKSwgY2xvbmUgPSBfYS5jbG9uZSwgZmlsZXMgPSBfYS5maWxlcztcbiAgICBpZiAoZmlsZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2xvbmUpO1xuICAgIH1cbiAgICB2YXIgRm9ybSA9IHR5cGVvZiBGb3JtRGF0YSA9PT0gJ3VuZGVmaW5lZCcgPyBmb3JtX2RhdGFfMS5kZWZhdWx0IDogRm9ybURhdGE7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybSgpO1xuICAgIGZvcm0uYXBwZW5kKCdvcGVyYXRpb25zJywgSlNPTi5zdHJpbmdpZnkoY2xvbmUpKTtcbiAgICB2YXIgbWFwID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIGZpbGVzLmZvckVhY2goZnVuY3Rpb24gKHBhdGhzKSB7XG4gICAgICAgIG1hcFsrK2ldID0gcGF0aHM7XG4gICAgfSk7XG4gICAgZm9ybS5hcHBlbmQoJ21hcCcsIEpTT04uc3RyaW5naWZ5KG1hcCkpO1xuICAgIGkgPSAwO1xuICAgIGZpbGVzLmZvckVhY2goZnVuY3Rpb24gKHBhdGhzLCBmaWxlKSB7XG4gICAgICAgIGZvcm0uYXBwZW5kKFwiXCIgKyArK2ksIGZpbGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlUmVxdWVzdEJvZHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVSZXF1ZXN0Qm9keS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdxbCA9IGV4cG9ydHMucmVxdWVzdCA9IGV4cG9ydHMucmF3UmVxdWVzdCA9IGV4cG9ydHMuR3JhcGhRTENsaWVudCA9IGV4cG9ydHMuQ2xpZW50RXJyb3IgPSB2b2lkIDA7XG52YXIgY3Jvc3NfZmV0Y2hfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3Jvc3MtZmV0Y2hcIikpLCBDcm9zc0ZldGNoID0gY3Jvc3NfZmV0Y2hfMTtcbnZhciBwcmludGVyXzEgPSByZXF1aXJlKFwiZ3JhcGhxbC9sYW5ndWFnZS9wcmludGVyXCIpO1xudmFyIGNyZWF0ZVJlcXVlc3RCb2R5XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY3JlYXRlUmVxdWVzdEJvZHlcIikpO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbnZhciB0eXBlc18yID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDbGllbnRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5DbGllbnRFcnJvcjsgfSB9KTtcbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gaGVhZGVycyBjb25maWd1cmF0aW9uIGludG8gYSBwbGFpbiBvYmplY3QuXG4gKi9cbnZhciByZXNvbHZlSGVhZGVycyA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gICAgdmFyIG9IZWFkZXJzID0ge307XG4gICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKCh0eXBlb2YgSGVhZGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHx8XG4gICAgICAgICAgICBoZWFkZXJzIGluc3RhbmNlb2YgQ3Jvc3NGZXRjaC5IZWFkZXJzKSB7XG4gICAgICAgICAgICBvSGVhZGVycyA9IEhlYWRlcnNJbnN0YW5jZVRvUGxhaW5PYmplY3QoaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gX2FbMF0sIHZhbHVlID0gX2FbMV07XG4gICAgICAgICAgICAgICAgb0hlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb0hlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvSGVhZGVycztcbn07XG4vKipcbiAqIHRvZG9cbiAqL1xudmFyIEdyYXBoUUxDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gR3JhcGhRTENsaWVudCh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIEdyYXBoUUxDbGllbnQucHJvdG90eXBlLnJhd1JlcXVlc3QgPSBmdW5jdGlvbiAocXVlcnksIHZhcmlhYmxlcywgcmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBoZWFkZXJzLCBfYiwgbG9jYWxGZXRjaCwgb3RoZXJzLCBib2R5LCByZXNwb25zZSwgcmVzdWx0LCBoZWFkZXJzXzEsIHN0YXR1c18xLCBlcnJvclJlc3VsdDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gdGhpcy5vcHRpb25zLCBoZWFkZXJzID0gX2EuaGVhZGVycywgX2IgPSBfYS5mZXRjaCwgbG9jYWxGZXRjaCA9IF9iID09PSB2b2lkIDAgPyBjcm9zc19mZXRjaF8xLmRlZmF1bHQgOiBfYiwgb3RoZXJzID0gX19yZXN0KF9hLCBbXCJoZWFkZXJzXCIsIFwiZmV0Y2hcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGNyZWF0ZVJlcXVlc3RCb2R5XzEuZGVmYXVsdChxdWVyeSwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGxvY2FsRmV0Y2godGhpcy51cmwsIF9fYXNzaWduKHsgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnID8geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0gOiB7fSkpLCByZXNvbHZlSGVhZGVycyhoZWFkZXJzKSksIHJlc29sdmVIZWFkZXJzKHJlcXVlc3RIZWFkZXJzKSksIGJvZHk6IGJvZHkgfSwgb3RoZXJzKSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGdldFJlc3VsdChyZXNwb25zZSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2sgJiYgIXJlc3VsdC5lcnJvcnMgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXzEgPSByZXNwb25zZS5oZWFkZXJzLCBzdGF0dXNfMSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3VsdCksIHsgaGVhZGVyczogaGVhZGVyc18xLCBzdGF0dXM6IHN0YXR1c18xIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzdWx0ID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyB7IGVycm9yOiByZXN1bHQgfSA6IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5DbGllbnRFcnJvcihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZXJyb3JSZXN1bHQpLCB7IHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzIH0pLCB7IHF1ZXJ5OiBxdWVyeSwgdmFyaWFibGVzOiB2YXJpYWJsZXMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2VuZCBhIEdyYXBoUUwgZG9jdW1lbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBHcmFwaFFMQ2xpZW50LnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gKGRvY3VtZW50LCB2YXJpYWJsZXMsIHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgaGVhZGVycywgX2IsIGxvY2FsRmV0Y2gsIG90aGVycywgcmVzb2x2ZWREb2MsIGJvZHksIHJlc3BvbnNlLCByZXN1bHQsIGVycm9yUmVzdWx0O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSB0aGlzLm9wdGlvbnMsIGhlYWRlcnMgPSBfYS5oZWFkZXJzLCBfYiA9IF9hLmZldGNoLCBsb2NhbEZldGNoID0gX2IgPT09IHZvaWQgMCA/IGNyb3NzX2ZldGNoXzEuZGVmYXVsdCA6IF9iLCBvdGhlcnMgPSBfX3Jlc3QoX2EsIFtcImhlYWRlcnNcIiwgXCJmZXRjaFwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZERvYyA9IHJlc29sdmVSZXF1ZXN0RG9jdW1lbnQoZG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGNyZWF0ZVJlcXVlc3RCb2R5XzEuZGVmYXVsdChyZXNvbHZlZERvYywgdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGxvY2FsRmV0Y2godGhpcy51cmwsIF9fYXNzaWduKHsgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnID8geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0gOiB7fSkpLCByZXNvbHZlSGVhZGVycyhoZWFkZXJzKSksIHJlc29sdmVIZWFkZXJzKHJlcXVlc3RIZWFkZXJzKSksIGJvZHk6IGJvZHkgfSwgb3RoZXJzKSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGdldFJlc3VsdChyZXNwb25zZSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2sgJiYgIXJlc3VsdC5lcnJvcnMgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzdWx0LmRhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXN1bHQgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHsgZXJyb3I6IHJlc3VsdCB9IDogcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLkNsaWVudEVycm9yKF9fYXNzaWduKF9fYXNzaWduKHt9LCBlcnJvclJlc3VsdCksIHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfSksIHsgcXVlcnk6IHJlc29sdmVkRG9jLCB2YXJpYWJsZXM6IHZhcmlhYmxlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBHcmFwaFFMQ2xpZW50LnByb3RvdHlwZS5zZXRIZWFkZXJzID0gZnVuY3Rpb24gKGhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhlYWRlciB0byB0aGUgY2xpZW50LiBBbGwgc3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIGhhdmUgdGhpcyBoZWFkZXIuXG4gICAgICovXG4gICAgR3JhcGhRTENsaWVudC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICAgICAgLy8gdG9kbyB3aGF0IGlmIGhlYWRlcnMgaXMgaW4gbmVzdGVkIGFycmF5IGZvcm0uLi4gP1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gKF9hID0ge30sIF9hW2tleV0gPSB2YWx1ZSwgX2EpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEdyYXBoUUxDbGllbnQ7XG59KCkpO1xuZXhwb3J0cy5HcmFwaFFMQ2xpZW50ID0gR3JhcGhRTENsaWVudDtcbi8qKlxuICogdG9kb1xuICovXG5mdW5jdGlvbiByYXdSZXF1ZXN0KHVybCwgcXVlcnksIHZhcmlhYmxlcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNsaWVudDtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgY2xpZW50ID0gbmV3IEdyYXBoUUxDbGllbnQodXJsKTtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBjbGllbnQucmF3UmVxdWVzdChxdWVyeSwgdmFyaWFibGVzKV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yYXdSZXF1ZXN0ID0gcmF3UmVxdWVzdDtcbi8qKlxuICogU2VuZCBhIEdyYXBoUUwgRG9jdW1lbnQgdG8gdGhlIEdyYXBoUUwgc2VydmVyIGZvciBleGVjdHVpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0c1xuICogLy8gWW91IGNhbiBwYXNzIGEgcmF3IHN0cmluZ1xuICpcbiAqIGF3YWl0IHJlcXVlc3QoJ2h0dHBzOi8vZm9vLmJhci9ncmFwaHFsJywgYFxuICogICB7XG4gKiAgICAgcXVlcnkge1xuICogICAgICAgdXNlcnNcbiAqICAgICB9XG4gKiAgIH1cbiAqIGApXG4gKlxuICogLy8gWW91IGNhbiBhbHNvIHBhc3MgYSBHcmFwaFFMIERvY3VtZW50Tm9kZS4gQ29udmVuaWVudCBpZiB5b3VcbiAqIC8vIGFyZSB1c2luZyBncmFwaHFsLXRhZyBwYWNrYWdlLlxuICpcbiAqIGltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnXG4gKlxuICogYXdhaXQgcmVxdWVzdCgnaHR0cHM6Ly9mb28uYmFyL2dyYXBocWwnLCBncWxgLi4uYClcbiAqXG4gKiAvLyBJZiB5b3UgZG9uJ3QgYWN0dWFsbHkgY2FyZSBhYm91dCB1c2luZyBEb2N1bWVudE5vZGUgYnV0IGp1c3RcbiAqIC8vIHdhbnQgdGhlIHRvb2xpbmcgc3VwcG9ydCBmb3IgZ3FsIHRlbXBsYXRlIHRhZyBsaWtlIElERSBzeW50YXhcbiAqIC8vIGNvbG9yaW5nIGFuZCBwcmV0dGllciBhdXRvZm9ybWF0IHRoZW4gbm90ZSB5b3UgY2FuIHVzZSB0aGVcbiAqIC8vIHBhc3N0aHJvdWdoIGdxbCB0YWcgc2hpcHBlZCB3aXRoIGdyYXBocWwtcmVxdWVzdCB0byBzYXZlIGEgYml0XG4gKiAvLyBvZiBwZXJmb3JtYW5jZSBhbmQgbm90IGhhdmUgdG8gaW5zdGFsbCBhbm90aGVyIGRlcCBpbnRvIHlvdXIgcHJvamVjdC5cbiAqXG4gKiBpbXBvcnQgeyBncWwgfSBmcm9tICdncmFwaHFsLXJlcXVlc3QnXG4gKlxuICogYXdhaXQgcmVxdWVzdCgnaHR0cHM6Ly9mb28uYmFyL2dyYXBocWwnLCBncWxgLi4uYClcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXF1ZXN0KHVybCwgZG9jdW1lbnQsIHZhcmlhYmxlcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNsaWVudDtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgY2xpZW50ID0gbmV3IEdyYXBoUUxDbGllbnQodXJsKTtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBjbGllbnQucmVxdWVzdChkb2N1bWVudCwgdmFyaWFibGVzKV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWVzdDtcbmV4cG9ydHMuZGVmYXVsdCA9IHJlcXVlc3Q7XG4vKipcbiAqIHRvZG9cbiAqL1xuZnVuY3Rpb24gZ2V0UmVzdWx0KHJlc3BvbnNlKSB7XG4gICAgdmFyIGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpO1xuICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgfVxufVxuLyoqXG4gKiBoZWxwZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZXF1ZXN0RG9jdW1lbnQoZG9jdW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIHJldHVybiBwcmludGVyXzEucHJpbnQoZG9jdW1lbnQpO1xufVxuLyoqXG4gKiBDb252ZW5pZW5jZSBwYXNzdGhyb3VnaCB0ZW1wbGF0ZSB0YWcgdG8gZ2V0IHRoZSBiZW5lZml0cyBvZiB0b29saW5nIGZvciB0aGUgZ3FsIHRlbXBsYXRlIHRhZy4gVGhpcyBkb2VzIG5vdCBhY3R1YWxseSBwYXJzZSB0aGUgaW5wdXQgaW50byBhIEdyYXBoUUwgRG9jdW1lbnROb2RlIGxpa2UgZ3JhcGhxbC10YWcgcGFja2FnZSBkb2VzLiBJdCBqdXN0IHJldHVybnMgdGhlIHN0cmluZyB3aXRoIGFueSB2YXJpYWJsZXMgZ2l2ZW4gaW50ZXJwb2xhdGVkLiBDYW4gc2F2ZSB5b3UgYSBiaXQgb2YgcGVyZm9ybWFuY2UgYW5kIGhhdmluZyB0byBpbnN0YWxsIGFub3RoZXIgcGFja2FnZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7IGdxbCB9IGZyb20gJ2dyYXBocWwtcmVxdWVzdCdcbiAqXG4gKiBhd2FpdCByZXF1ZXN0KCdodHRwczovL2Zvby5iYXIvZ3JhcGhxbCcsIGdxbGAuLi5gKVxuICpcbiAqIEByZW1hcmtzXG4gKlxuICogU2V2ZXJhbCB0b29scyBpbiB0aGUgTm9kZSBHcmFwaFFMIGVjb3N5c3RlbSBhcmUgaGFyZGNvZGVkIHRvIHNwZWNpYWxseSB0cmVhdCBhbnkgdGVtcGxhdGUgdGFnIG5hbWVkIFwiZ3FsXCIuIEZvciBleGFtcGxlIHNlZSB0aGlzIHByZXR0aWVyIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcHJldHRpZXIvcHJldHRpZXIvaXNzdWVzLzQzNjAuIFVzaW5nIHRoaXMgdGVtcGxhdGUgdGFnIGhhcyBubyBydW50aW1lIGVmZmVjdCBiZXlvbmQgdmFyaWFibGUgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ3FsKGNodW5rcykge1xuICAgIHZhciB2YXJpYWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXJpYWJsZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjaHVua3MucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY2h1bmssIGluZGV4KSB7IHJldHVybiBcIlwiICsgYWNjdW11bGF0b3IgKyBjaHVuayArIChpbmRleCBpbiB2YXJpYWJsZXMgPyB2YXJpYWJsZXNbaW5kZXhdIDogJycpOyB9LCAnJyk7XG59XG5leHBvcnRzLmdxbCA9IGdxbDtcbi8qKlxuICogQ29udmVydCBIZWFkZXJzIGluc3RhbmNlIGludG8gcmVndWxhciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gSGVhZGVyc0luc3RhbmNlVG9QbGFpbk9iamVjdChoZWFkZXJzKSB7XG4gICAgdmFyIG8gPSB7fTtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgb1trXSA9IHY7XG4gICAgfSk7XG4gICAgcmV0dXJuIG87XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNsaWVudEVycm9yID0gdm9pZCAwO1xudmFyIENsaWVudEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDbGllbnRFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDbGllbnRFcnJvcihyZXNwb25zZSwgcmVxdWVzdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbWVzc2FnZSA9IENsaWVudEVycm9yLmV4dHJhY3RNZXNzYWdlKHJlc3BvbnNlKSArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgX3RoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgX3RoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgIC8vIHRoaXMgaXMgbmVlZGVkIGFzIFNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgLmNhcHR1cmVTdGFja1RyYWNlXG4gICAgICAgIGlmICh0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF90aGlzLCBDbGllbnRFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBDbGllbnRFcnJvci5leHRyYWN0TWVzc2FnZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmVycm9yc1swXS5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJHcmFwaFFMIEVycm9yIChDb2RlOiBcIiArIHJlc3BvbnNlLnN0YXR1cyArIFwiKVwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ2xpZW50RXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLkNsaWVudEVycm9yID0gQ2xpZW50RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJ2YXIgX19zZWxmX18gPSAoZnVuY3Rpb24gKHJvb3QpIHtcbmZ1bmN0aW9uIEYoKSB7XG50aGlzLmZldGNoID0gZmFsc2U7XG50aGlzLkRPTUV4Y2VwdGlvbiA9IHJvb3QuRE9NRXhjZXB0aW9uXG59XG5GLnByb3RvdHlwZSA9IHJvb3Q7XG5yZXR1cm4gbmV3IEYoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzKTtcbihmdW5jdGlvbihzZWxmKSB7XG5cbnZhciBpcnJlbGV2YW50ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6XG4gICAgICAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJlxuICAgICAgJ0Jsb2InIGluIHNlbGYgJiZcbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXcgQmxvYigpO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgfTtcblxuICBmdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdO1xuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG4gIH1cblxuICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9O1xuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXTtcbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHk7XG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcik7XG4gICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keTtcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHM7XG4gICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTtcbiAgICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsO1xuICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7XG4gICAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJztcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKTtcbiAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7XG4gICAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbDtcbiAgICB0aGlzLnJlZmVycmVyID0gbnVsbDtcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSk7XG4gIH1cblxuICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBib2R5XG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoJyYnKVxuICAgICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKTtcbiAgICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKTtcbiAgICBwcmVQcm9jZXNzZWRIZWFkZXJzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKCk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKCk7XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnO1xuICAgIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzO1xuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDA7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snO1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJztcbiAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdCk7XG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKTtcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxuICB9O1xuXG4gIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSk7XG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcic7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH07XG5cbiAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdO1xuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH07XG5cbiAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBzZWxmLkRPTUV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrO1xuICAgIH07XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGV4cG9ydHMuRE9NRXhjZXB0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgICB4aHIuYWJvcnQoKTtcbiAgICAgIH1cblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKTtcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocik7XG5cbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdCk7XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoLnBvbHlmaWxsID0gdHJ1ZTtcblxuICBpZiAoIXNlbGYuZmV0Y2gpIHtcbiAgICBzZWxmLmZldGNoID0gZmV0Y2g7XG4gICAgc2VsZi5IZWFkZXJzID0gSGVhZGVycztcbiAgICBzZWxmLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICAgIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgfVxuXG4gIGV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG4gIGV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIGV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgZXhwb3J0cy5mZXRjaCA9IGZldGNoO1xuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KHt9KSk7XG59KShfX3NlbGZfXyk7XG5kZWxldGUgX19zZWxmX18uZmV0Y2gucG9seWZpbGxcbmV4cG9ydHMgPSBfX3NlbGZfXy5mZXRjaCAvLyBUbyBlbmFibGU6IGltcG9ydCBmZXRjaCBmcm9tICdjcm9zcy1mZXRjaCdcbmV4cG9ydHMuZGVmYXVsdCA9IF9fc2VsZl9fLmZldGNoIC8vIEZvciBUeXBlU2NyaXB0IGNvbnN1bWVycyB3aXRob3V0IGVzTW9kdWxlSW50ZXJvcC5cbmV4cG9ydHMuZmV0Y2ggPSBfX3NlbGZfXy5mZXRjaCAvLyBUbyBlbmFibGU6IGltcG9ydCB7ZmV0Y2h9IGZyb20gJ2Nyb3NzLWZldGNoJ1xuZXhwb3J0cy5IZWFkZXJzID0gX19zZWxmX18uSGVhZGVyc1xuZXhwb3J0cy5SZXF1ZXN0ID0gX19zZWxmX18uUmVxdWVzdFxuZXhwb3J0cy5SZXNwb25zZSA9IF9fc2VsZl9fLlJlc3BvbnNlXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNcbiIsIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyA/IHNlbGYuRm9ybURhdGEgOiB3aW5kb3cuRm9ybURhdGE7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmluZUluc3BlY3Q7XG5cbnZhciBfaW52YXJpYW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9pbnZhcmlhbnQuanNcIikpO1xuXG52YXIgX25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFRoZSBgZGVmaW5lSW5zcGVjdCgpYCBmdW5jdGlvbiBkZWZpbmVzIGBpbnNwZWN0KClgIHByb3RvdHlwZSBtZXRob2QgYXMgYWxpYXMgb2YgYHRvSlNPTmBcbiAqL1xuZnVuY3Rpb24gZGVmaW5lSW5zcGVjdChjbGFzc09iamVjdCkge1xuICB2YXIgZm4gPSBjbGFzc09iamVjdC5wcm90b3R5cGUudG9KU09OO1xuICB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgfHwgKDAsIF9pbnZhcmlhbnQuZGVmYXVsdCkoMCk7XG4gIGNsYXNzT2JqZWN0LnByb3RvdHlwZS5pbnNwZWN0ID0gZm47IC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlIChTZWU6ICdodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC9ncmFwaHFsLWpzL2lzc3Vlcy8yMzE3JylcblxuICBpZiAoX25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wuZGVmYXVsdCkge1xuICAgIGNsYXNzT2JqZWN0LnByb3RvdHlwZVtfbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbC5kZWZhdWx0XSA9IGZuO1xuICB9XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGluc3BlY3Q7XG5cbnZhciBfbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbm9kZWpzQ3VzdG9tSW5zcGVjdFN5bWJvbC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIE1BWF9BUlJBWV9MRU5HVEggPSAxMDtcbnZhciBNQVhfUkVDVVJTSVZFX0RFUFRIID0gMjtcbi8qKlxuICogVXNlZCB0byBwcmludCB2YWx1ZXMgaW4gZXJyb3IgbWVzc2FnZXMuXG4gKi9cblxuZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSkge1xuICByZXR1cm4gZm9ybWF0VmFsdWUodmFsdWUsIFtdKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWUsIHNlZW5WYWx1ZXMpIHtcbiAgc3dpdGNoIChfdHlwZW9mKHZhbHVlKSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuIHZhbHVlLm5hbWUgPyBcIltmdW5jdGlvbiBcIi5jb25jYXQodmFsdWUubmFtZSwgXCJdXCIpIDogJ1tmdW5jdGlvbl0nO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9ybWF0T2JqZWN0VmFsdWUodmFsdWUsIHNlZW5WYWx1ZXMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE9iamVjdFZhbHVlKHZhbHVlLCBwcmV2aW91c2x5U2VlblZhbHVlcykge1xuICBpZiAocHJldmlvdXNseVNlZW5WYWx1ZXMuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgfVxuXG4gIHZhciBzZWVuVmFsdWVzID0gW10uY29uY2F0KHByZXZpb3VzbHlTZWVuVmFsdWVzLCBbdmFsdWVdKTtcbiAgdmFyIGN1c3RvbUluc3BlY3RGbiA9IGdldEN1c3RvbUZuKHZhbHVlKTtcblxuICBpZiAoY3VzdG9tSW5zcGVjdEZuICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VzdG9tVmFsdWUgPSBjdXN0b21JbnNwZWN0Rm4uY2FsbCh2YWx1ZSk7IC8vIGNoZWNrIGZvciBpbmZpbml0ZSByZWN1cnNpb25cblxuICAgIGlmIChjdXN0b21WYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VzdG9tVmFsdWUgPT09ICdzdHJpbmcnID8gY3VzdG9tVmFsdWUgOiBmb3JtYXRWYWx1ZShjdXN0b21WYWx1ZSwgc2VlblZhbHVlcyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEFycmF5KHZhbHVlLCBzZWVuVmFsdWVzKTtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRPYmplY3QodmFsdWUsIHNlZW5WYWx1ZXMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRPYmplY3Qob2JqZWN0LCBzZWVuVmFsdWVzKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ3t9JztcbiAgfVxuXG4gIGlmIChzZWVuVmFsdWVzLmxlbmd0aCA+IE1BWF9SRUNVUlNJVkVfREVQVEgpIHtcbiAgICByZXR1cm4gJ1snICsgZ2V0T2JqZWN0VGFnKG9iamVjdCkgKyAnXSc7XG4gIH1cblxuICB2YXIgcHJvcGVydGllcyA9IGtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBmb3JtYXRWYWx1ZShvYmplY3Rba2V5XSwgc2VlblZhbHVlcyk7XG4gICAgcmV0dXJuIGtleSArICc6ICcgKyB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiAneyAnICsgcHJvcGVydGllcy5qb2luKCcsICcpICsgJyB9Jztcbn1cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoYXJyYXksIHNlZW5WYWx1ZXMpIHtcbiAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnW10nO1xuICB9XG5cbiAgaWYgKHNlZW5WYWx1ZXMubGVuZ3RoID4gTUFYX1JFQ1VSU0lWRV9ERVBUSCkge1xuICAgIHJldHVybiAnW0FycmF5XSc7XG4gIH1cblxuICB2YXIgbGVuID0gTWF0aC5taW4oTUFYX0FSUkFZX0xFTkdUSCwgYXJyYXkubGVuZ3RoKTtcbiAgdmFyIHJlbWFpbmluZyA9IGFycmF5Lmxlbmd0aCAtIGxlbjtcbiAgdmFyIGl0ZW1zID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGl0ZW1zLnB1c2goZm9ybWF0VmFsdWUoYXJyYXlbaV0sIHNlZW5WYWx1ZXMpKTtcbiAgfVxuXG4gIGlmIChyZW1haW5pbmcgPT09IDEpIHtcbiAgICBpdGVtcy5wdXNoKCcuLi4gMSBtb3JlIGl0ZW0nKTtcbiAgfSBlbHNlIGlmIChyZW1haW5pbmcgPiAxKSB7XG4gICAgaXRlbXMucHVzaChcIi4uLiBcIi5jb25jYXQocmVtYWluaW5nLCBcIiBtb3JlIGl0ZW1zXCIpKTtcbiAgfVxuXG4gIHJldHVybiAnWycgKyBpdGVtcy5qb2luKCcsICcpICsgJ10nO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21GbihvYmplY3QpIHtcbiAgdmFyIGN1c3RvbUluc3BlY3RGbiA9IG9iamVjdFtTdHJpbmcoX25vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wuZGVmYXVsdCldO1xuXG4gIGlmICh0eXBlb2YgY3VzdG9tSW5zcGVjdEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGN1c3RvbUluc3BlY3RGbjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0Lmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gb2JqZWN0Lmluc3BlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0T2JqZWN0VGFnKG9iamVjdCkge1xuICB2YXIgdGFnID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkucmVwbGFjZSgvXlxcW29iamVjdCAvLCAnJykucmVwbGFjZSgvXSQvLCAnJyk7XG5cbiAgaWYgKHRhZyA9PT0gJ09iamVjdCcgJiYgdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBuYW1lID0gb2JqZWN0LmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFnO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBpbnZhcmlhbnQ7XG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgdmFyIGJvb2xlYW5Db25kaXRpb24gPSBCb29sZWFuKGNvbmRpdGlvbik7IC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlIChTZWUgdHJhbnNmb3JtYXRpb24gZG9uZSBpbiAnLi9yZXNvdXJjZXMvaW5saW5lSW52YXJpYW50LmpzJylcblxuICBpZiAoIWJvb2xlYW5Db25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSAhPSBudWxsID8gbWVzc2FnZSA6ICdVbmV4cGVjdGVkIGludmFyaWFudCB0cmlnZ2VyZWQuJyk7XG4gIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHQgKFNlZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsL2dyYXBocWwtanMvaXNzdWVzLzIzMTcnKVxudmFyIG5vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nID8gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSA6IHVuZGVmaW5lZDtcbnZhciBfZGVmYXVsdCA9IG5vZGVqc0N1c3RvbUluc3BlY3RTeW1ib2w7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05vZGUgPSBpc05vZGU7XG5leHBvcnRzLlRva2VuID0gZXhwb3J0cy5Mb2NhdGlvbiA9IHZvaWQgMDtcblxudmFyIF9kZWZpbmVJbnNwZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vanN1dGlscy9kZWZpbmVJbnNwZWN0LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb250YWlucyBhIHJhbmdlIG9mIFVURi04IGNoYXJhY3RlciBvZmZzZXRzIGFuZCB0b2tlbiByZWZlcmVuY2VzIHRoYXRcbiAqIGlkZW50aWZ5IHRoZSByZWdpb24gb2YgdGhlIHNvdXJjZSBmcm9tIHdoaWNoIHRoZSBBU1QgZGVyaXZlZC5cbiAqL1xudmFyIExvY2F0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGF0IHdoaWNoIHRoaXMgTm9kZSBiZWdpbnMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcmFjdGVyIG9mZnNldCBhdCB3aGljaCB0aGlzIE5vZGUgZW5kcy5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRoZSBUb2tlbiBhdCB3aGljaCB0aGlzIE5vZGUgYmVnaW5zLlxuICAgKi9cblxuICAvKipcbiAgICogVGhlIFRva2VuIGF0IHdoaWNoIHRoaXMgTm9kZSBlbmRzLlxuICAgKi9cblxuICAvKipcbiAgICogVGhlIFNvdXJjZSBkb2N1bWVudCB0aGUgQVNUIHJlcHJlc2VudHMuXG4gICAqL1xuICBmdW5jdGlvbiBMb2NhdGlvbihzdGFydFRva2VuLCBlbmRUb2tlbiwgc291cmNlKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0VG9rZW4uc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmRUb2tlbi5lbmQ7XG4gICAgdGhpcy5zdGFydFRva2VuID0gc3RhcnRUb2tlbjtcbiAgICB0aGlzLmVuZFRva2VuID0gZW5kVG9rZW47XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTG9jYXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIExvY2F0aW9uO1xufSgpOyAvLyBQcmludCBhIHNpbXBsaWZpZWQgZm9ybSB3aGVuIGFwcGVhcmluZyBpbiBgaW5zcGVjdGAgYW5kIGB1dGlsLmluc3BlY3RgLlxuXG5cbmV4cG9ydHMuTG9jYXRpb24gPSBMb2NhdGlvbjtcbigwLCBfZGVmaW5lSW5zcGVjdC5kZWZhdWx0KShMb2NhdGlvbik7XG4vKipcbiAqIFJlcHJlc2VudHMgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIHJlcHJlc2VudGVkIGJ5IGEgbGV4aWNhbCB0b2tlblxuICogd2l0aGluIGEgU291cmNlLlxuICovXG5cbnZhciBUb2tlbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiBUb2tlbi5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGF0IHdoaWNoIHRoaXMgTm9kZSBiZWdpbnMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcmFjdGVyIG9mZnNldCBhdCB3aGljaCB0aGlzIE5vZGUgZW5kcy5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRoZSAxLWluZGV4ZWQgbGluZSBudW1iZXIgb24gd2hpY2ggdGhpcyBUb2tlbiBhcHBlYXJzLlxuICAgKi9cblxuICAvKipcbiAgICogVGhlIDEtaW5kZXhlZCBjb2x1bW4gbnVtYmVyIGF0IHdoaWNoIHRoaXMgVG9rZW4gYmVnaW5zLlxuICAgKi9cblxuICAvKipcbiAgICogRm9yIG5vbi1wdW5jdHVhdGlvbiB0b2tlbnMsIHJlcHJlc2VudHMgdGhlIGludGVycHJldGVkIHZhbHVlIG9mIHRoZSB0b2tlbi5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRva2VucyBleGlzdCBhcyBub2RlcyBpbiBhIGRvdWJsZS1saW5rZWQtbGlzdCBhbW9uZ3N0IGFsbCB0b2tlbnNcbiAgICogaW5jbHVkaW5nIGlnbm9yZWQgdG9rZW5zLiA8U09GPiBpcyBhbHdheXMgdGhlIGZpcnN0IG5vZGUgYW5kIDxFT0Y+XG4gICAqIHRoZSBsYXN0LlxuICAgKi9cbiAgZnVuY3Rpb24gVG9rZW4oa2luZCwgc3RhcnQsIGVuZCwgbGluZSwgY29sdW1uLCBwcmV2LCB2YWx1ZSkge1xuICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucHJldiA9IHByZXY7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8yID0gVG9rZW4ucHJvdG90eXBlO1xuXG4gIF9wcm90bzIudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiB0aGlzLmtpbmQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGxpbmU6IHRoaXMubGluZSxcbiAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW5cbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBUb2tlbjtcbn0oKTsgLy8gUHJpbnQgYSBzaW1wbGlmaWVkIGZvcm0gd2hlbiBhcHBlYXJpbmcgaW4gYGluc3BlY3RgIGFuZCBgdXRpbC5pbnNwZWN0YC5cblxuXG5leHBvcnRzLlRva2VuID0gVG9rZW47XG4oMCwgX2RlZmluZUluc3BlY3QuZGVmYXVsdCkoVG9rZW4pO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5mdW5jdGlvbiBpc05vZGUobWF5YmVOb2RlKSB7XG4gIHJldHVybiBtYXliZU5vZGUgIT0gbnVsbCAmJiB0eXBlb2YgbWF5YmVOb2RlLmtpbmQgPT09ICdzdHJpbmcnO1xufVxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhbGwgcG9zc2libGUgQVNUIG5vZGUgdHlwZXMuXG4gKi9cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWRlbnRCbG9ja1N0cmluZ1ZhbHVlID0gZGVkZW50QmxvY2tTdHJpbmdWYWx1ZTtcbmV4cG9ydHMuZ2V0QmxvY2tTdHJpbmdJbmRlbnRhdGlvbiA9IGdldEJsb2NrU3RyaW5nSW5kZW50YXRpb247XG5leHBvcnRzLnByaW50QmxvY2tTdHJpbmcgPSBwcmludEJsb2NrU3RyaW5nO1xuXG4vKipcbiAqIFByb2R1Y2VzIHRoZSB2YWx1ZSBvZiBhIGJsb2NrIHN0cmluZyBmcm9tIGl0cyBwYXJzZWQgcmF3IHZhbHVlLCBzaW1pbGFyIHRvXG4gKiBDb2ZmZWVTY3JpcHQncyBibG9jayBzdHJpbmcsIFB5dGhvbidzIGRvY3N0cmluZyB0cmltIG9yIFJ1YnkncyBzdHJpcF9oZXJlZG9jLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50cyB0aGUgR3JhcGhRTCBzcGVjJ3MgQmxvY2tTdHJpbmdWYWx1ZSgpIHN0YXRpYyBhbGdvcml0aG0uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGRlZGVudEJsb2NrU3RyaW5nVmFsdWUocmF3U3RyaW5nKSB7XG4gIC8vIEV4cGFuZCBhIGJsb2NrIHN0cmluZydzIHJhdyB2YWx1ZSBpbnRvIGluZGVwZW5kZW50IGxpbmVzLlxuICB2YXIgbGluZXMgPSByYXdTdHJpbmcuc3BsaXQoL1xcclxcbnxbXFxuXFxyXS9nKTsgLy8gUmVtb3ZlIGNvbW1vbiBpbmRlbnRhdGlvbiBmcm9tIGFsbCBsaW5lcyBidXQgZmlyc3QuXG5cbiAgdmFyIGNvbW1vbkluZGVudCA9IGdldEJsb2NrU3RyaW5nSW5kZW50YXRpb24ocmF3U3RyaW5nKTtcblxuICBpZiAoY29tbW9uSW5kZW50ICE9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGluZXNbaV0gPSBsaW5lc1tpXS5zbGljZShjb21tb25JbmRlbnQpO1xuICAgIH1cbiAgfSAvLyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgYmxhbmsgbGluZXMuXG5cblxuICB2YXIgc3RhcnRMaW5lID0gMDtcblxuICB3aGlsZSAoc3RhcnRMaW5lIDwgbGluZXMubGVuZ3RoICYmIGlzQmxhbmsobGluZXNbc3RhcnRMaW5lXSkpIHtcbiAgICArK3N0YXJ0TGluZTtcbiAgfVxuXG4gIHZhciBlbmRMaW5lID0gbGluZXMubGVuZ3RoO1xuXG4gIHdoaWxlIChlbmRMaW5lID4gc3RhcnRMaW5lICYmIGlzQmxhbmsobGluZXNbZW5kTGluZSAtIDFdKSkge1xuICAgIC0tZW5kTGluZTtcbiAgfSAvLyBSZXR1cm4gYSBzdHJpbmcgb2YgdGhlIGxpbmVzIGpvaW5lZCB3aXRoIFUrMDAwQS5cblxuXG4gIHJldHVybiBsaW5lcy5zbGljZShzdGFydExpbmUsIGVuZExpbmUpLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0JsYW5rKHN0cikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmIChzdHJbaV0gIT09ICcgJyAmJiBzdHJbaV0gIT09ICdcXHQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0QmxvY2tTdHJpbmdJbmRlbnRhdGlvbih2YWx1ZSkge1xuICB2YXIgX2NvbW1vbkluZGVudDtcblxuICB2YXIgaXNGaXJzdExpbmUgPSB0cnVlO1xuICB2YXIgaXNFbXB0eUxpbmUgPSB0cnVlO1xuICB2YXIgaW5kZW50ID0gMDtcbiAgdmFyIGNvbW1vbkluZGVudCA9IG51bGw7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIHN3aXRjaCAodmFsdWUuY2hhckNvZGVBdChpKSkge1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgLy8gIFxcclxuICAgICAgICBpZiAodmFsdWUuY2hhckNvZGVBdChpICsgMSkgPT09IDEwKSB7XG4gICAgICAgICAgKytpOyAvLyBza2lwIFxcclxcbiBhcyBvbmUgc3ltYm9sXG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgICBjYXNlIDEwOlxuICAgICAgICAvLyAgXFxuXG4gICAgICAgIGlzRmlyc3RMaW5lID0gZmFsc2U7XG4gICAgICAgIGlzRW1wdHlMaW5lID0gdHJ1ZTtcbiAgICAgICAgaW5kZW50ID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTogLy8gICBcXHRcblxuICAgICAgY2FzZSAzMjpcbiAgICAgICAgLy8gIDxzcGFjZT5cbiAgICAgICAgKytpbmRlbnQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoaXNFbXB0eUxpbmUgJiYgIWlzRmlyc3RMaW5lICYmIChjb21tb25JbmRlbnQgPT09IG51bGwgfHwgaW5kZW50IDwgY29tbW9uSW5kZW50KSkge1xuICAgICAgICAgIGNvbW1vbkluZGVudCA9IGluZGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzRW1wdHlMaW5lID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChfY29tbW9uSW5kZW50ID0gY29tbW9uSW5kZW50KSAhPT0gbnVsbCAmJiBfY29tbW9uSW5kZW50ICE9PSB2b2lkIDAgPyBfY29tbW9uSW5kZW50IDogMDtcbn1cbi8qKlxuICogUHJpbnQgYSBibG9jayBzdHJpbmcgaW4gdGhlIGluZGVudGVkIGJsb2NrIGZvcm0gYnkgYWRkaW5nIGEgbGVhZGluZyBhbmRcbiAqIHRyYWlsaW5nIGJsYW5rIGxpbmUuIEhvd2V2ZXIsIGlmIGEgYmxvY2sgc3RyaW5nIHN0YXJ0cyB3aXRoIHdoaXRlc3BhY2UgYW5kIGlzXG4gKiBhIHNpbmdsZS1saW5lLCBhZGRpbmcgYSBsZWFkaW5nIGJsYW5rIGxpbmUgd291bGQgc3RyaXAgdGhhdCB3aGl0ZXNwYWNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gcHJpbnRCbG9ja1N0cmluZyh2YWx1ZSkge1xuICB2YXIgaW5kZW50YXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICB2YXIgcHJlZmVyTXVsdGlwbGVMaW5lcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBpc1NpbmdsZUxpbmUgPSB2YWx1ZS5pbmRleE9mKCdcXG4nKSA9PT0gLTE7XG4gIHZhciBoYXNMZWFkaW5nU3BhY2UgPSB2YWx1ZVswXSA9PT0gJyAnIHx8IHZhbHVlWzBdID09PSAnXFx0JztcbiAgdmFyIGhhc1RyYWlsaW5nUXVvdGUgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSA9PT0gJ1wiJztcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSA9PT0gJ1xcXFwnO1xuICB2YXIgcHJpbnRBc011bHRpcGxlTGluZXMgPSAhaXNTaW5nbGVMaW5lIHx8IGhhc1RyYWlsaW5nUXVvdGUgfHwgaGFzVHJhaWxpbmdTbGFzaCB8fCBwcmVmZXJNdWx0aXBsZUxpbmVzO1xuICB2YXIgcmVzdWx0ID0gJyc7IC8vIEZvcm1hdCBhIG11bHRpLWxpbmUgYmxvY2sgcXVvdGUgdG8gYWNjb3VudCBmb3IgbGVhZGluZyBzcGFjZS5cblxuICBpZiAocHJpbnRBc011bHRpcGxlTGluZXMgJiYgIShpc1NpbmdsZUxpbmUgJiYgaGFzTGVhZGluZ1NwYWNlKSkge1xuICAgIHJlc3VsdCArPSAnXFxuJyArIGluZGVudGF0aW9uO1xuICB9XG5cbiAgcmVzdWx0ICs9IGluZGVudGF0aW9uID8gdmFsdWUucmVwbGFjZSgvXFxuL2csICdcXG4nICsgaW5kZW50YXRpb24pIDogdmFsdWU7XG5cbiAgaWYgKHByaW50QXNNdWx0aXBsZUxpbmVzKSB7XG4gICAgcmVzdWx0ICs9ICdcXG4nO1xuICB9XG5cbiAgcmV0dXJuICdcIlwiXCInICsgcmVzdWx0LnJlcGxhY2UoL1wiXCJcIi9nLCAnXFxcXFwiXCJcIicpICsgJ1wiXCJcIic7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJpbnQgPSBwcmludDtcblxudmFyIF92aXNpdG9yID0gcmVxdWlyZShcIi4vdmlzaXRvci5qc1wiKTtcblxudmFyIF9ibG9ja1N0cmluZyA9IHJlcXVpcmUoXCIuL2Jsb2NrU3RyaW5nLmpzXCIpO1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFTVCBpbnRvIGEgc3RyaW5nLCB1c2luZyBvbmUgc2V0IG9mIHJlYXNvbmFibGVcbiAqIGZvcm1hdHRpbmcgcnVsZXMuXG4gKi9cbmZ1bmN0aW9uIHByaW50KGFzdCkge1xuICByZXR1cm4gKDAsIF92aXNpdG9yLnZpc2l0KShhc3QsIHtcbiAgICBsZWF2ZTogcHJpbnREb2NBU1RSZWR1Y2VyXG4gIH0pO1xufVxuXG52YXIgTUFYX0xJTkVfTEVOR1RIID0gODA7IC8vIFRPRE86IHByb3ZpZGUgYmV0dGVyIHR5cGUgY292ZXJhZ2UgaW4gZnV0dXJlXG5cbnZhciBwcmludERvY0FTVFJlZHVjZXIgPSB7XG4gIE5hbWU6IGZ1bmN0aW9uIE5hbWUobm9kZSkge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9LFxuICBWYXJpYWJsZTogZnVuY3Rpb24gVmFyaWFibGUobm9kZSkge1xuICAgIHJldHVybiAnJCcgKyBub2RlLm5hbWU7XG4gIH0sXG4gIC8vIERvY3VtZW50XG4gIERvY3VtZW50OiBmdW5jdGlvbiBEb2N1bWVudChub2RlKSB7XG4gICAgcmV0dXJuIGpvaW4obm9kZS5kZWZpbml0aW9ucywgJ1xcblxcbicpICsgJ1xcbic7XG4gIH0sXG4gIE9wZXJhdGlvbkRlZmluaXRpb246IGZ1bmN0aW9uIE9wZXJhdGlvbkRlZmluaXRpb24obm9kZSkge1xuICAgIHZhciBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuICAgIHZhciB2YXJEZWZzID0gd3JhcCgnKCcsIGpvaW4obm9kZS52YXJpYWJsZURlZmluaXRpb25zLCAnLCAnKSwgJyknKTtcbiAgICB2YXIgZGlyZWN0aXZlcyA9IGpvaW4obm9kZS5kaXJlY3RpdmVzLCAnICcpO1xuICAgIHZhciBzZWxlY3Rpb25TZXQgPSBub2RlLnNlbGVjdGlvblNldDsgLy8gQW5vbnltb3VzIHF1ZXJpZXMgd2l0aCBubyBkaXJlY3RpdmVzIG9yIHZhcmlhYmxlIGRlZmluaXRpb25zIGNhbiB1c2VcbiAgICAvLyB0aGUgcXVlcnkgc2hvcnQgZm9ybS5cblxuICAgIHJldHVybiAhbmFtZSAmJiAhZGlyZWN0aXZlcyAmJiAhdmFyRGVmcyAmJiBvcCA9PT0gJ3F1ZXJ5JyA/IHNlbGVjdGlvblNldCA6IGpvaW4oW29wLCBqb2luKFtuYW1lLCB2YXJEZWZzXSksIGRpcmVjdGl2ZXMsIHNlbGVjdGlvblNldF0sICcgJyk7XG4gIH0sXG4gIFZhcmlhYmxlRGVmaW5pdGlvbjogZnVuY3Rpb24gVmFyaWFibGVEZWZpbml0aW9uKF9yZWYpIHtcbiAgICB2YXIgdmFyaWFibGUgPSBfcmVmLnZhcmlhYmxlLFxuICAgICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVmLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYuZGlyZWN0aXZlcztcbiAgICByZXR1cm4gdmFyaWFibGUgKyAnOiAnICsgdHlwZSArIHdyYXAoJyA9ICcsIGRlZmF1bHRWYWx1ZSkgKyB3cmFwKCcgJywgam9pbihkaXJlY3RpdmVzLCAnICcpKTtcbiAgfSxcbiAgU2VsZWN0aW9uU2V0OiBmdW5jdGlvbiBTZWxlY3Rpb25TZXQoX3JlZjIpIHtcbiAgICB2YXIgc2VsZWN0aW9ucyA9IF9yZWYyLnNlbGVjdGlvbnM7XG4gICAgcmV0dXJuIGJsb2NrKHNlbGVjdGlvbnMpO1xuICB9LFxuICBGaWVsZDogZnVuY3Rpb24gRmllbGQoX3JlZjMpIHtcbiAgICB2YXIgYWxpYXMgPSBfcmVmMy5hbGlhcyxcbiAgICAgICAgbmFtZSA9IF9yZWYzLm5hbWUsXG4gICAgICAgIGFyZ3MgPSBfcmVmMy5hcmd1bWVudHMsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMy5kaXJlY3RpdmVzLFxuICAgICAgICBzZWxlY3Rpb25TZXQgPSBfcmVmMy5zZWxlY3Rpb25TZXQ7XG4gICAgdmFyIHByZWZpeCA9IHdyYXAoJycsIGFsaWFzLCAnOiAnKSArIG5hbWU7XG4gICAgdmFyIGFyZ3NMaW5lID0gcHJlZml4ICsgd3JhcCgnKCcsIGpvaW4oYXJncywgJywgJyksICcpJyk7XG5cbiAgICBpZiAoYXJnc0xpbmUubGVuZ3RoID4gTUFYX0xJTkVfTEVOR1RIKSB7XG4gICAgICBhcmdzTGluZSA9IHByZWZpeCArIHdyYXAoJyhcXG4nLCBpbmRlbnQoam9pbihhcmdzLCAnXFxuJykpLCAnXFxuKScpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2luKFthcmdzTGluZSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBzZWxlY3Rpb25TZXRdLCAnICcpO1xuICB9LFxuICBBcmd1bWVudDogZnVuY3Rpb24gQXJndW1lbnQoX3JlZjQpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWY0Lm5hbWUsXG4gICAgICAgIHZhbHVlID0gX3JlZjQudmFsdWU7XG4gICAgcmV0dXJuIG5hbWUgKyAnOiAnICsgdmFsdWU7XG4gIH0sXG4gIC8vIEZyYWdtZW50c1xuICBGcmFnbWVudFNwcmVhZDogZnVuY3Rpb24gRnJhZ21lbnRTcHJlYWQoX3JlZjUpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWY1Lm5hbWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmNS5kaXJlY3RpdmVzO1xuICAgIHJldHVybiAnLi4uJyArIG5hbWUgKyB3cmFwKCcgJywgam9pbihkaXJlY3RpdmVzLCAnICcpKTtcbiAgfSxcbiAgSW5saW5lRnJhZ21lbnQ6IGZ1bmN0aW9uIElubGluZUZyYWdtZW50KF9yZWY2KSB7XG4gICAgdmFyIHR5cGVDb25kaXRpb24gPSBfcmVmNi50eXBlQ29uZGl0aW9uLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjYuZGlyZWN0aXZlcyxcbiAgICAgICAgc2VsZWN0aW9uU2V0ID0gX3JlZjYuc2VsZWN0aW9uU2V0O1xuICAgIHJldHVybiBqb2luKFsnLi4uJywgd3JhcCgnb24gJywgdHlwZUNvbmRpdGlvbiksIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgc2VsZWN0aW9uU2V0XSwgJyAnKTtcbiAgfSxcbiAgRnJhZ21lbnREZWZpbml0aW9uOiBmdW5jdGlvbiBGcmFnbWVudERlZmluaXRpb24oX3JlZjcpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWY3Lm5hbWUsXG4gICAgICAgIHR5cGVDb25kaXRpb24gPSBfcmVmNy50eXBlQ29uZGl0aW9uLFxuICAgICAgICB2YXJpYWJsZURlZmluaXRpb25zID0gX3JlZjcudmFyaWFibGVEZWZpbml0aW9ucyxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWY3LmRpcmVjdGl2ZXMsXG4gICAgICAgIHNlbGVjdGlvblNldCA9IF9yZWY3LnNlbGVjdGlvblNldDtcbiAgICByZXR1cm4gKC8vIE5vdGU6IGZyYWdtZW50IHZhcmlhYmxlIGRlZmluaXRpb25zIGFyZSBleHBlcmltZW50YWwgYW5kIG1heSBiZSBjaGFuZ2VkXG4gICAgICAvLyBvciByZW1vdmVkIGluIHRoZSBmdXR1cmUuXG4gICAgICBcImZyYWdtZW50IFwiLmNvbmNhdChuYW1lKS5jb25jYXQod3JhcCgnKCcsIGpvaW4odmFyaWFibGVEZWZpbml0aW9ucywgJywgJyksICcpJyksIFwiIFwiKSArIFwib24gXCIuY29uY2F0KHR5cGVDb25kaXRpb24sIFwiIFwiKS5jb25jYXQod3JhcCgnJywgam9pbihkaXJlY3RpdmVzLCAnICcpLCAnICcpKSArIHNlbGVjdGlvblNldFxuICAgICk7XG4gIH0sXG4gIC8vIFZhbHVlXG4gIEludFZhbHVlOiBmdW5jdGlvbiBJbnRWYWx1ZShfcmVmOCkge1xuICAgIHZhciB2YWx1ZSA9IF9yZWY4LnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgRmxvYXRWYWx1ZTogZnVuY3Rpb24gRmxvYXRWYWx1ZShfcmVmOSkge1xuICAgIHZhciB2YWx1ZSA9IF9yZWY5LnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgU3RyaW5nVmFsdWU6IGZ1bmN0aW9uIFN0cmluZ1ZhbHVlKF9yZWYxMCwga2V5KSB7XG4gICAgdmFyIHZhbHVlID0gX3JlZjEwLnZhbHVlLFxuICAgICAgICBpc0Jsb2NrU3RyaW5nID0gX3JlZjEwLmJsb2NrO1xuICAgIHJldHVybiBpc0Jsb2NrU3RyaW5nID8gKDAsIF9ibG9ja1N0cmluZy5wcmludEJsb2NrU3RyaW5nKSh2YWx1ZSwga2V5ID09PSAnZGVzY3JpcHRpb24nID8gJycgOiAnICAnKSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfSxcbiAgQm9vbGVhblZhbHVlOiBmdW5jdGlvbiBCb29sZWFuVmFsdWUoX3JlZjExKSB7XG4gICAgdmFyIHZhbHVlID0gX3JlZjExLnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0sXG4gIE51bGxWYWx1ZTogZnVuY3Rpb24gTnVsbFZhbHVlKCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH0sXG4gIEVudW1WYWx1ZTogZnVuY3Rpb24gRW51bVZhbHVlKF9yZWYxMikge1xuICAgIHZhciB2YWx1ZSA9IF9yZWYxMi52YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIExpc3RWYWx1ZTogZnVuY3Rpb24gTGlzdFZhbHVlKF9yZWYxMykge1xuICAgIHZhciB2YWx1ZXMgPSBfcmVmMTMudmFsdWVzO1xuICAgIHJldHVybiAnWycgKyBqb2luKHZhbHVlcywgJywgJykgKyAnXSc7XG4gIH0sXG4gIE9iamVjdFZhbHVlOiBmdW5jdGlvbiBPYmplY3RWYWx1ZShfcmVmMTQpIHtcbiAgICB2YXIgZmllbGRzID0gX3JlZjE0LmZpZWxkcztcbiAgICByZXR1cm4gJ3snICsgam9pbihmaWVsZHMsICcsICcpICsgJ30nO1xuICB9LFxuICBPYmplY3RGaWVsZDogZnVuY3Rpb24gT2JqZWN0RmllbGQoX3JlZjE1KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMTUubmFtZSxcbiAgICAgICAgdmFsdWUgPSBfcmVmMTUudmFsdWU7XG4gICAgcmV0dXJuIG5hbWUgKyAnOiAnICsgdmFsdWU7XG4gIH0sXG4gIC8vIERpcmVjdGl2ZVxuICBEaXJlY3RpdmU6IGZ1bmN0aW9uIERpcmVjdGl2ZShfcmVmMTYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYxNi5uYW1lLFxuICAgICAgICBhcmdzID0gX3JlZjE2LmFyZ3VtZW50cztcbiAgICByZXR1cm4gJ0AnICsgbmFtZSArIHdyYXAoJygnLCBqb2luKGFyZ3MsICcsICcpLCAnKScpO1xuICB9LFxuICAvLyBUeXBlXG4gIE5hbWVkVHlwZTogZnVuY3Rpb24gTmFtZWRUeXBlKF9yZWYxNykge1xuICAgIHZhciBuYW1lID0gX3JlZjE3Lm5hbWU7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIExpc3RUeXBlOiBmdW5jdGlvbiBMaXN0VHlwZShfcmVmMTgpIHtcbiAgICB2YXIgdHlwZSA9IF9yZWYxOC50eXBlO1xuICAgIHJldHVybiAnWycgKyB0eXBlICsgJ10nO1xuICB9LFxuICBOb25OdWxsVHlwZTogZnVuY3Rpb24gTm9uTnVsbFR5cGUoX3JlZjE5KSB7XG4gICAgdmFyIHR5cGUgPSBfcmVmMTkudHlwZTtcbiAgICByZXR1cm4gdHlwZSArICchJztcbiAgfSxcbiAgLy8gVHlwZSBTeXN0ZW0gRGVmaW5pdGlvbnNcbiAgU2NoZW1hRGVmaW5pdGlvbjogYWRkRGVzY3JpcHRpb24oZnVuY3Rpb24gKF9yZWYyMCkge1xuICAgIHZhciBkaXJlY3RpdmVzID0gX3JlZjIwLmRpcmVjdGl2ZXMsXG4gICAgICAgIG9wZXJhdGlvblR5cGVzID0gX3JlZjIwLm9wZXJhdGlvblR5cGVzO1xuICAgIHJldHVybiBqb2luKFsnc2NoZW1hJywgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayhvcGVyYXRpb25UeXBlcyldLCAnICcpO1xuICB9KSxcbiAgT3BlcmF0aW9uVHlwZURlZmluaXRpb246IGZ1bmN0aW9uIE9wZXJhdGlvblR5cGVEZWZpbml0aW9uKF9yZWYyMSkge1xuICAgIHZhciBvcGVyYXRpb24gPSBfcmVmMjEub3BlcmF0aW9uLFxuICAgICAgICB0eXBlID0gX3JlZjIxLnR5cGU7XG4gICAgcmV0dXJuIG9wZXJhdGlvbiArICc6ICcgKyB0eXBlO1xuICB9LFxuICBTY2FsYXJUeXBlRGVmaW5pdGlvbjogYWRkRGVzY3JpcHRpb24oZnVuY3Rpb24gKF9yZWYyMikge1xuICAgIHZhciBuYW1lID0gX3JlZjIyLm5hbWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMjIuZGlyZWN0aXZlcztcbiAgICByZXR1cm4gam9pbihbJ3NjYWxhcicsIG5hbWUsIGpvaW4oZGlyZWN0aXZlcywgJyAnKV0sICcgJyk7XG4gIH0pLFxuICBPYmplY3RUeXBlRGVmaW5pdGlvbjogYWRkRGVzY3JpcHRpb24oZnVuY3Rpb24gKF9yZWYyMykge1xuICAgIHZhciBuYW1lID0gX3JlZjIzLm5hbWUsXG4gICAgICAgIGludGVyZmFjZXMgPSBfcmVmMjMuaW50ZXJmYWNlcyxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyMy5kaXJlY3RpdmVzLFxuICAgICAgICBmaWVsZHMgPSBfcmVmMjMuZmllbGRzO1xuICAgIHJldHVybiBqb2luKFsndHlwZScsIG5hbWUsIHdyYXAoJ2ltcGxlbWVudHMgJywgam9pbihpbnRlcmZhY2VzLCAnICYgJykpLCBqb2luKGRpcmVjdGl2ZXMsICcgJyksIGJsb2NrKGZpZWxkcyldLCAnICcpO1xuICB9KSxcbiAgRmllbGREZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjI0KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMjQubmFtZSxcbiAgICAgICAgYXJncyA9IF9yZWYyNC5hcmd1bWVudHMsXG4gICAgICAgIHR5cGUgPSBfcmVmMjQudHlwZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyNC5kaXJlY3RpdmVzO1xuICAgIHJldHVybiBuYW1lICsgKGhhc011bHRpbGluZUl0ZW1zKGFyZ3MpID8gd3JhcCgnKFxcbicsIGluZGVudChqb2luKGFyZ3MsICdcXG4nKSksICdcXG4pJykgOiB3cmFwKCcoJywgam9pbihhcmdzLCAnLCAnKSwgJyknKSkgKyAnOiAnICsgdHlwZSArIHdyYXAoJyAnLCBqb2luKGRpcmVjdGl2ZXMsICcgJykpO1xuICB9KSxcbiAgSW5wdXRWYWx1ZURlZmluaXRpb246IGFkZERlc2NyaXB0aW9uKGZ1bmN0aW9uIChfcmVmMjUpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYyNS5uYW1lLFxuICAgICAgICB0eXBlID0gX3JlZjI1LnR5cGUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYyNS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMjUuZGlyZWN0aXZlcztcbiAgICByZXR1cm4gam9pbihbbmFtZSArICc6ICcgKyB0eXBlLCB3cmFwKCc9ICcsIGRlZmF1bHRWYWx1ZSksIGpvaW4oZGlyZWN0aXZlcywgJyAnKV0sICcgJyk7XG4gIH0pLFxuICBJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjogYWRkRGVzY3JpcHRpb24oZnVuY3Rpb24gKF9yZWYyNikge1xuICAgIHZhciBuYW1lID0gX3JlZjI2Lm5hbWUsXG4gICAgICAgIGludGVyZmFjZXMgPSBfcmVmMjYuaW50ZXJmYWNlcyxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyNi5kaXJlY3RpdmVzLFxuICAgICAgICBmaWVsZHMgPSBfcmVmMjYuZmllbGRzO1xuICAgIHJldHVybiBqb2luKFsnaW50ZXJmYWNlJywgbmFtZSwgd3JhcCgnaW1wbGVtZW50cyAnLCBqb2luKGludGVyZmFjZXMsICcgJiAnKSksIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2soZmllbGRzKV0sICcgJyk7XG4gIH0pLFxuICBVbmlvblR5cGVEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjI3KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMjcubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyNy5kaXJlY3RpdmVzLFxuICAgICAgICB0eXBlcyA9IF9yZWYyNy50eXBlcztcbiAgICByZXR1cm4gam9pbihbJ3VuaW9uJywgbmFtZSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCB0eXBlcyAmJiB0eXBlcy5sZW5ndGggIT09IDAgPyAnPSAnICsgam9pbih0eXBlcywgJyB8ICcpIDogJyddLCAnICcpO1xuICB9KSxcbiAgRW51bVR5cGVEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjI4KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMjgubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyOC5kaXJlY3RpdmVzLFxuICAgICAgICB2YWx1ZXMgPSBfcmVmMjgudmFsdWVzO1xuICAgIHJldHVybiBqb2luKFsnZW51bScsIG5hbWUsIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2sodmFsdWVzKV0sICcgJyk7XG4gIH0pLFxuICBFbnVtVmFsdWVEZWZpbml0aW9uOiBhZGREZXNjcmlwdGlvbihmdW5jdGlvbiAoX3JlZjI5KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMjkubmFtZSxcbiAgICAgICAgZGlyZWN0aXZlcyA9IF9yZWYyOS5kaXJlY3RpdmVzO1xuICAgIHJldHVybiBqb2luKFtuYW1lLCBqb2luKGRpcmVjdGl2ZXMsICcgJyldLCAnICcpO1xuICB9KSxcbiAgSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjogYWRkRGVzY3JpcHRpb24oZnVuY3Rpb24gKF9yZWYzMCkge1xuICAgIHZhciBuYW1lID0gX3JlZjMwLm5hbWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMzAuZGlyZWN0aXZlcyxcbiAgICAgICAgZmllbGRzID0gX3JlZjMwLmZpZWxkcztcbiAgICByZXR1cm4gam9pbihbJ2lucHV0JywgbmFtZSwgam9pbihkaXJlY3RpdmVzLCAnICcpLCBibG9jayhmaWVsZHMpXSwgJyAnKTtcbiAgfSksXG4gIERpcmVjdGl2ZURlZmluaXRpb246IGFkZERlc2NyaXB0aW9uKGZ1bmN0aW9uIChfcmVmMzEpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYzMS5uYW1lLFxuICAgICAgICBhcmdzID0gX3JlZjMxLmFyZ3VtZW50cyxcbiAgICAgICAgcmVwZWF0YWJsZSA9IF9yZWYzMS5yZXBlYXRhYmxlLFxuICAgICAgICBsb2NhdGlvbnMgPSBfcmVmMzEubG9jYXRpb25zO1xuICAgIHJldHVybiAnZGlyZWN0aXZlIEAnICsgbmFtZSArIChoYXNNdWx0aWxpbmVJdGVtcyhhcmdzKSA/IHdyYXAoJyhcXG4nLCBpbmRlbnQoam9pbihhcmdzLCAnXFxuJykpLCAnXFxuKScpIDogd3JhcCgnKCcsIGpvaW4oYXJncywgJywgJyksICcpJykpICsgKHJlcGVhdGFibGUgPyAnIHJlcGVhdGFibGUnIDogJycpICsgJyBvbiAnICsgam9pbihsb2NhdGlvbnMsICcgfCAnKTtcbiAgfSksXG4gIFNjaGVtYUV4dGVuc2lvbjogZnVuY3Rpb24gU2NoZW1hRXh0ZW5zaW9uKF9yZWYzMikge1xuICAgIHZhciBkaXJlY3RpdmVzID0gX3JlZjMyLmRpcmVjdGl2ZXMsXG4gICAgICAgIG9wZXJhdGlvblR5cGVzID0gX3JlZjMyLm9wZXJhdGlvblR5cGVzO1xuICAgIHJldHVybiBqb2luKFsnZXh0ZW5kIHNjaGVtYScsIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2sob3BlcmF0aW9uVHlwZXMpXSwgJyAnKTtcbiAgfSxcbiAgU2NhbGFyVHlwZUV4dGVuc2lvbjogZnVuY3Rpb24gU2NhbGFyVHlwZUV4dGVuc2lvbihfcmVmMzMpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYzMy5uYW1lLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjMzLmRpcmVjdGl2ZXM7XG4gICAgcmV0dXJuIGpvaW4oWydleHRlbmQgc2NhbGFyJywgbmFtZSwgam9pbihkaXJlY3RpdmVzLCAnICcpXSwgJyAnKTtcbiAgfSxcbiAgT2JqZWN0VHlwZUV4dGVuc2lvbjogZnVuY3Rpb24gT2JqZWN0VHlwZUV4dGVuc2lvbihfcmVmMzQpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYzNC5uYW1lLFxuICAgICAgICBpbnRlcmZhY2VzID0gX3JlZjM0LmludGVyZmFjZXMsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMzQuZGlyZWN0aXZlcyxcbiAgICAgICAgZmllbGRzID0gX3JlZjM0LmZpZWxkcztcbiAgICByZXR1cm4gam9pbihbJ2V4dGVuZCB0eXBlJywgbmFtZSwgd3JhcCgnaW1wbGVtZW50cyAnLCBqb2luKGludGVyZmFjZXMsICcgJiAnKSksIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2soZmllbGRzKV0sICcgJyk7XG4gIH0sXG4gIEludGVyZmFjZVR5cGVFeHRlbnNpb246IGZ1bmN0aW9uIEludGVyZmFjZVR5cGVFeHRlbnNpb24oX3JlZjM1KSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMzUubmFtZSxcbiAgICAgICAgaW50ZXJmYWNlcyA9IF9yZWYzNS5pbnRlcmZhY2VzLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjM1LmRpcmVjdGl2ZXMsXG4gICAgICAgIGZpZWxkcyA9IF9yZWYzNS5maWVsZHM7XG4gICAgcmV0dXJuIGpvaW4oWydleHRlbmQgaW50ZXJmYWNlJywgbmFtZSwgd3JhcCgnaW1wbGVtZW50cyAnLCBqb2luKGludGVyZmFjZXMsICcgJiAnKSksIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2soZmllbGRzKV0sICcgJyk7XG4gIH0sXG4gIFVuaW9uVHlwZUV4dGVuc2lvbjogZnVuY3Rpb24gVW5pb25UeXBlRXh0ZW5zaW9uKF9yZWYzNikge1xuICAgIHZhciBuYW1lID0gX3JlZjM2Lm5hbWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMzYuZGlyZWN0aXZlcyxcbiAgICAgICAgdHlwZXMgPSBfcmVmMzYudHlwZXM7XG4gICAgcmV0dXJuIGpvaW4oWydleHRlbmQgdW5pb24nLCBuYW1lLCBqb2luKGRpcmVjdGl2ZXMsICcgJyksIHR5cGVzICYmIHR5cGVzLmxlbmd0aCAhPT0gMCA/ICc9ICcgKyBqb2luKHR5cGVzLCAnIHwgJykgOiAnJ10sICcgJyk7XG4gIH0sXG4gIEVudW1UeXBlRXh0ZW5zaW9uOiBmdW5jdGlvbiBFbnVtVHlwZUV4dGVuc2lvbihfcmVmMzcpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYzNy5uYW1lLFxuICAgICAgICBkaXJlY3RpdmVzID0gX3JlZjM3LmRpcmVjdGl2ZXMsXG4gICAgICAgIHZhbHVlcyA9IF9yZWYzNy52YWx1ZXM7XG4gICAgcmV0dXJuIGpvaW4oWydleHRlbmQgZW51bScsIG5hbWUsIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2sodmFsdWVzKV0sICcgJyk7XG4gIH0sXG4gIElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjogZnVuY3Rpb24gSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uKF9yZWYzOCkge1xuICAgIHZhciBuYW1lID0gX3JlZjM4Lm5hbWUsXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBfcmVmMzguZGlyZWN0aXZlcyxcbiAgICAgICAgZmllbGRzID0gX3JlZjM4LmZpZWxkcztcbiAgICByZXR1cm4gam9pbihbJ2V4dGVuZCBpbnB1dCcsIG5hbWUsIGpvaW4oZGlyZWN0aXZlcywgJyAnKSwgYmxvY2soZmllbGRzKV0sICcgJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFkZERlc2NyaXB0aW9uKGNiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBqb2luKFtub2RlLmRlc2NyaXB0aW9uLCBjYihub2RlKV0sICdcXG4nKTtcbiAgfTtcbn1cbi8qKlxuICogR2l2ZW4gbWF5YmVBcnJheSwgcHJpbnQgYW4gZW1wdHkgc3RyaW5nIGlmIGl0IGlzIG51bGwgb3IgZW1wdHksIG90aGVyd2lzZVxuICogcHJpbnQgYWxsIGl0ZW1zIHRvZ2V0aGVyIHNlcGFyYXRlZCBieSBzZXBhcmF0b3IgaWYgcHJvdmlkZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIGpvaW4obWF5YmVBcnJheSkge1xuICB2YXIgX21heWJlQXJyYXkkZmlsdGVyJGpvO1xuXG4gIHZhciBzZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICByZXR1cm4gKF9tYXliZUFycmF5JGZpbHRlciRqbyA9IG1heWJlQXJyYXkgPT09IG51bGwgfHwgbWF5YmVBcnJheSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWF5YmVBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geDtcbiAgfSkuam9pbihzZXBhcmF0b3IpKSAhPT0gbnVsbCAmJiBfbWF5YmVBcnJheSRmaWx0ZXIkam8gIT09IHZvaWQgMCA/IF9tYXliZUFycmF5JGZpbHRlciRqbyA6ICcnO1xufVxuLyoqXG4gKiBHaXZlbiBhcnJheSwgcHJpbnQgZWFjaCBpdGVtIG9uIGl0cyBvd24gbGluZSwgd3JhcHBlZCBpbiBhblxuICogaW5kZW50ZWQgXCJ7IH1cIiBibG9jay5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJsb2NrKGFycmF5KSB7XG4gIHJldHVybiB3cmFwKCd7XFxuJywgaW5kZW50KGpvaW4oYXJyYXksICdcXG4nKSksICdcXG59Jyk7XG59XG4vKipcbiAqIElmIG1heWJlU3RyaW5nIGlzIG5vdCBudWxsIG9yIGVtcHR5LCB0aGVuIHdyYXAgd2l0aCBzdGFydCBhbmQgZW5kLCBvdGhlcndpc2UgcHJpbnQgYW4gZW1wdHkgc3RyaW5nLlxuICovXG5cblxuZnVuY3Rpb24gd3JhcChzdGFydCwgbWF5YmVTdHJpbmcpIHtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJyc7XG4gIHJldHVybiBtYXliZVN0cmluZyAhPSBudWxsICYmIG1heWJlU3RyaW5nICE9PSAnJyA/IHN0YXJ0ICsgbWF5YmVTdHJpbmcgKyBlbmQgOiAnJztcbn1cblxuZnVuY3Rpb24gaW5kZW50KHN0cikge1xuICByZXR1cm4gd3JhcCgnICAnLCBzdHIucmVwbGFjZSgvXFxuL2csICdcXG4gICcpKTtcbn1cblxuZnVuY3Rpb24gaXNNdWx0aWxpbmUoc3RyKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZignXFxuJykgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBoYXNNdWx0aWxpbmVJdGVtcyhtYXliZUFycmF5KSB7XG4gIHJldHVybiBtYXliZUFycmF5ICE9IG51bGwgJiYgbWF5YmVBcnJheS5zb21lKGlzTXVsdGlsaW5lKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52aXNpdCA9IHZpc2l0O1xuZXhwb3J0cy52aXNpdEluUGFyYWxsZWwgPSB2aXNpdEluUGFyYWxsZWw7XG5leHBvcnRzLmdldFZpc2l0Rm4gPSBnZXRWaXNpdEZuO1xuZXhwb3J0cy5CUkVBSyA9IGV4cG9ydHMuUXVlcnlEb2N1bWVudEtleXMgPSB2b2lkIDA7XG5cbnZhciBfaW5zcGVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2pzdXRpbHMvaW5zcGVjdC5qc1wiKSk7XG5cbnZhciBfYXN0ID0gcmVxdWlyZShcIi4vYXN0LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgUXVlcnlEb2N1bWVudEtleXMgPSB7XG4gIE5hbWU6IFtdLFxuICBEb2N1bWVudDogWydkZWZpbml0aW9ucyddLFxuICBPcGVyYXRpb25EZWZpbml0aW9uOiBbJ25hbWUnLCAndmFyaWFibGVEZWZpbml0aW9ucycsICdkaXJlY3RpdmVzJywgJ3NlbGVjdGlvblNldCddLFxuICBWYXJpYWJsZURlZmluaXRpb246IFsndmFyaWFibGUnLCAndHlwZScsICdkZWZhdWx0VmFsdWUnLCAnZGlyZWN0aXZlcyddLFxuICBWYXJpYWJsZTogWyduYW1lJ10sXG4gIFNlbGVjdGlvblNldDogWydzZWxlY3Rpb25zJ10sXG4gIEZpZWxkOiBbJ2FsaWFzJywgJ25hbWUnLCAnYXJndW1lbnRzJywgJ2RpcmVjdGl2ZXMnLCAnc2VsZWN0aW9uU2V0J10sXG4gIEFyZ3VtZW50OiBbJ25hbWUnLCAndmFsdWUnXSxcbiAgRnJhZ21lbnRTcHJlYWQ6IFsnbmFtZScsICdkaXJlY3RpdmVzJ10sXG4gIElubGluZUZyYWdtZW50OiBbJ3R5cGVDb25kaXRpb24nLCAnZGlyZWN0aXZlcycsICdzZWxlY3Rpb25TZXQnXSxcbiAgRnJhZ21lbnREZWZpbml0aW9uOiBbJ25hbWUnLCAvLyBOb3RlOiBmcmFnbWVudCB2YXJpYWJsZSBkZWZpbml0aW9ucyBhcmUgZXhwZXJpbWVudGFsIGFuZCBtYXkgYmUgY2hhbmdlZFxuICAvLyBvciByZW1vdmVkIGluIHRoZSBmdXR1cmUuXG4gICd2YXJpYWJsZURlZmluaXRpb25zJywgJ3R5cGVDb25kaXRpb24nLCAnZGlyZWN0aXZlcycsICdzZWxlY3Rpb25TZXQnXSxcbiAgSW50VmFsdWU6IFtdLFxuICBGbG9hdFZhbHVlOiBbXSxcbiAgU3RyaW5nVmFsdWU6IFtdLFxuICBCb29sZWFuVmFsdWU6IFtdLFxuICBOdWxsVmFsdWU6IFtdLFxuICBFbnVtVmFsdWU6IFtdLFxuICBMaXN0VmFsdWU6IFsndmFsdWVzJ10sXG4gIE9iamVjdFZhbHVlOiBbJ2ZpZWxkcyddLFxuICBPYmplY3RGaWVsZDogWyduYW1lJywgJ3ZhbHVlJ10sXG4gIERpcmVjdGl2ZTogWyduYW1lJywgJ2FyZ3VtZW50cyddLFxuICBOYW1lZFR5cGU6IFsnbmFtZSddLFxuICBMaXN0VHlwZTogWyd0eXBlJ10sXG4gIE5vbk51bGxUeXBlOiBbJ3R5cGUnXSxcbiAgU2NoZW1hRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICdkaXJlY3RpdmVzJywgJ29wZXJhdGlvblR5cGVzJ10sXG4gIE9wZXJhdGlvblR5cGVEZWZpbml0aW9uOiBbJ3R5cGUnXSxcbiAgU2NhbGFyVHlwZURlZmluaXRpb246IFsnZGVzY3JpcHRpb24nLCAnbmFtZScsICdkaXJlY3RpdmVzJ10sXG4gIE9iamVjdFR5cGVEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ25hbWUnLCAnaW50ZXJmYWNlcycsICdkaXJlY3RpdmVzJywgJ2ZpZWxkcyddLFxuICBGaWVsZERlZmluaXRpb246IFsnZGVzY3JpcHRpb24nLCAnbmFtZScsICdhcmd1bWVudHMnLCAndHlwZScsICdkaXJlY3RpdmVzJ10sXG4gIElucHV0VmFsdWVEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ25hbWUnLCAndHlwZScsICdkZWZhdWx0VmFsdWUnLCAnZGlyZWN0aXZlcyddLFxuICBJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICduYW1lJywgJ2ludGVyZmFjZXMnLCAnZGlyZWN0aXZlcycsICdmaWVsZHMnXSxcbiAgVW5pb25UeXBlRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICduYW1lJywgJ2RpcmVjdGl2ZXMnLCAndHlwZXMnXSxcbiAgRW51bVR5cGVEZWZpbml0aW9uOiBbJ2Rlc2NyaXB0aW9uJywgJ25hbWUnLCAnZGlyZWN0aXZlcycsICd2YWx1ZXMnXSxcbiAgRW51bVZhbHVlRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICduYW1lJywgJ2RpcmVjdGl2ZXMnXSxcbiAgSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjogWydkZXNjcmlwdGlvbicsICduYW1lJywgJ2RpcmVjdGl2ZXMnLCAnZmllbGRzJ10sXG4gIERpcmVjdGl2ZURlZmluaXRpb246IFsnZGVzY3JpcHRpb24nLCAnbmFtZScsICdhcmd1bWVudHMnLCAnbG9jYXRpb25zJ10sXG4gIFNjaGVtYUV4dGVuc2lvbjogWydkaXJlY3RpdmVzJywgJ29wZXJhdGlvblR5cGVzJ10sXG4gIFNjYWxhclR5cGVFeHRlbnNpb246IFsnbmFtZScsICdkaXJlY3RpdmVzJ10sXG4gIE9iamVjdFR5cGVFeHRlbnNpb246IFsnbmFtZScsICdpbnRlcmZhY2VzJywgJ2RpcmVjdGl2ZXMnLCAnZmllbGRzJ10sXG4gIEludGVyZmFjZVR5cGVFeHRlbnNpb246IFsnbmFtZScsICdpbnRlcmZhY2VzJywgJ2RpcmVjdGl2ZXMnLCAnZmllbGRzJ10sXG4gIFVuaW9uVHlwZUV4dGVuc2lvbjogWyduYW1lJywgJ2RpcmVjdGl2ZXMnLCAndHlwZXMnXSxcbiAgRW51bVR5cGVFeHRlbnNpb246IFsnbmFtZScsICdkaXJlY3RpdmVzJywgJ3ZhbHVlcyddLFxuICBJbnB1dE9iamVjdFR5cGVFeHRlbnNpb246IFsnbmFtZScsICdkaXJlY3RpdmVzJywgJ2ZpZWxkcyddXG59O1xuZXhwb3J0cy5RdWVyeURvY3VtZW50S2V5cyA9IFF1ZXJ5RG9jdW1lbnRLZXlzO1xudmFyIEJSRUFLID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4vKipcbiAqIHZpc2l0KCkgd2lsbCB3YWxrIHRocm91Z2ggYW4gQVNUIHVzaW5nIGEgZGVwdGgtZmlyc3QgdHJhdmVyc2FsLCBjYWxsaW5nXG4gKiB0aGUgdmlzaXRvcidzIGVudGVyIGZ1bmN0aW9uIGF0IGVhY2ggbm9kZSBpbiB0aGUgdHJhdmVyc2FsLCBhbmQgY2FsbGluZyB0aGVcbiAqIGxlYXZlIGZ1bmN0aW9uIGFmdGVyIHZpc2l0aW5nIHRoYXQgbm9kZSBhbmQgYWxsIG9mIGl0cyBjaGlsZCBub2Rlcy5cbiAqXG4gKiBCeSByZXR1cm5pbmcgZGlmZmVyZW50IHZhbHVlcyBmcm9tIHRoZSBlbnRlciBhbmQgbGVhdmUgZnVuY3Rpb25zLCB0aGVcbiAqIGJlaGF2aW9yIG9mIHRoZSB2aXNpdG9yIGNhbiBiZSBhbHRlcmVkLCBpbmNsdWRpbmcgc2tpcHBpbmcgb3ZlciBhIHN1Yi10cmVlIG9mXG4gKiB0aGUgQVNUIChieSByZXR1cm5pbmcgZmFsc2UpLCBlZGl0aW5nIHRoZSBBU1QgYnkgcmV0dXJuaW5nIGEgdmFsdWUgb3IgbnVsbFxuICogdG8gcmVtb3ZlIHRoZSB2YWx1ZSwgb3IgdG8gc3RvcCB0aGUgd2hvbGUgdHJhdmVyc2FsIGJ5IHJldHVybmluZyBCUkVBSy5cbiAqXG4gKiBXaGVuIHVzaW5nIHZpc2l0KCkgdG8gZWRpdCBhbiBBU1QsIHRoZSBvcmlnaW5hbCBBU1Qgd2lsbCBub3QgYmUgbW9kaWZpZWQsIGFuZFxuICogYSBuZXcgdmVyc2lvbiBvZiB0aGUgQVNUIHdpdGggdGhlIGNoYW5nZXMgYXBwbGllZCB3aWxsIGJlIHJldHVybmVkIGZyb20gdGhlXG4gKiB2aXNpdCBmdW5jdGlvbi5cbiAqXG4gKiAgICAgY29uc3QgZWRpdGVkQVNUID0gdmlzaXQoYXN0LCB7XG4gKiAgICAgICBlbnRlcihub2RlLCBrZXksIHBhcmVudCwgcGF0aCwgYW5jZXN0b3JzKSB7XG4gKiAgICAgICAgIC8vIEByZXR1cm5cbiAqICAgICAgICAgLy8gICB1bmRlZmluZWQ6IG5vIGFjdGlvblxuICogICAgICAgICAvLyAgIGZhbHNlOiBza2lwIHZpc2l0aW5nIHRoaXMgbm9kZVxuICogICAgICAgICAvLyAgIHZpc2l0b3IuQlJFQUs6IHN0b3AgdmlzaXRpbmcgYWx0b2dldGhlclxuICogICAgICAgICAvLyAgIG51bGw6IGRlbGV0ZSB0aGlzIG5vZGVcbiAqICAgICAgICAgLy8gICBhbnkgdmFsdWU6IHJlcGxhY2UgdGhpcyBub2RlIHdpdGggdGhlIHJldHVybmVkIHZhbHVlXG4gKiAgICAgICB9LFxuICogICAgICAgbGVhdmUobm9kZSwga2V5LCBwYXJlbnQsIHBhdGgsIGFuY2VzdG9ycykge1xuICogICAgICAgICAvLyBAcmV0dXJuXG4gKiAgICAgICAgIC8vICAgdW5kZWZpbmVkOiBubyBhY3Rpb25cbiAqICAgICAgICAgLy8gICBmYWxzZTogbm8gYWN0aW9uXG4gKiAgICAgICAgIC8vICAgdmlzaXRvci5CUkVBSzogc3RvcCB2aXNpdGluZyBhbHRvZ2V0aGVyXG4gKiAgICAgICAgIC8vICAgbnVsbDogZGVsZXRlIHRoaXMgbm9kZVxuICogICAgICAgICAvLyAgIGFueSB2YWx1ZTogcmVwbGFjZSB0aGlzIG5vZGUgd2l0aCB0aGUgcmV0dXJuZWQgdmFsdWVcbiAqICAgICAgIH1cbiAqICAgICB9KTtcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5IHRvIHByb3ZpZGluZyBlbnRlcigpIGFuZCBsZWF2ZSgpIGZ1bmN0aW9ucywgYSB2aXNpdG9yIGNhblxuICogaW5zdGVhZCBwcm92aWRlIGZ1bmN0aW9ucyBuYW1lZCB0aGUgc2FtZSBhcyB0aGUga2luZHMgb2YgQVNUIG5vZGVzLCBvclxuICogZW50ZXIvbGVhdmUgdmlzaXRvcnMgYXQgYSBuYW1lZCBrZXksIGxlYWRpbmcgdG8gZm91ciBwZXJtdXRhdGlvbnMgb2YgdGhlXG4gKiB2aXNpdG9yIEFQSTpcbiAqXG4gKiAxKSBOYW1lZCB2aXNpdG9ycyB0cmlnZ2VyZWQgd2hlbiBlbnRlcmluZyBhIG5vZGUgb2YgYSBzcGVjaWZpYyBraW5kLlxuICpcbiAqICAgICB2aXNpdChhc3QsIHtcbiAqICAgICAgIEtpbmQobm9kZSkge1xuICogICAgICAgICAvLyBlbnRlciB0aGUgXCJLaW5kXCIgbm9kZVxuICogICAgICAgfVxuICogICAgIH0pXG4gKlxuICogMikgTmFtZWQgdmlzaXRvcnMgdGhhdCB0cmlnZ2VyIHVwb24gZW50ZXJpbmcgYW5kIGxlYXZpbmcgYSBub2RlIG9mXG4gKiAgICBhIHNwZWNpZmljIGtpbmQuXG4gKlxuICogICAgIHZpc2l0KGFzdCwge1xuICogICAgICAgS2luZDoge1xuICogICAgICAgICBlbnRlcihub2RlKSB7XG4gKiAgICAgICAgICAgLy8gZW50ZXIgdGhlIFwiS2luZFwiIG5vZGVcbiAqICAgICAgICAgfVxuICogICAgICAgICBsZWF2ZShub2RlKSB7XG4gKiAgICAgICAgICAgLy8gbGVhdmUgdGhlIFwiS2luZFwiIG5vZGVcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pXG4gKlxuICogMykgR2VuZXJpYyB2aXNpdG9ycyB0aGF0IHRyaWdnZXIgdXBvbiBlbnRlcmluZyBhbmQgbGVhdmluZyBhbnkgbm9kZS5cbiAqXG4gKiAgICAgdmlzaXQoYXN0LCB7XG4gKiAgICAgICBlbnRlcihub2RlKSB7XG4gKiAgICAgICAgIC8vIGVudGVyIGFueSBub2RlXG4gKiAgICAgICB9LFxuICogICAgICAgbGVhdmUobm9kZSkge1xuICogICAgICAgICAvLyBsZWF2ZSBhbnkgbm9kZVxuICogICAgICAgfVxuICogICAgIH0pXG4gKlxuICogNCkgUGFyYWxsZWwgdmlzaXRvcnMgZm9yIGVudGVyaW5nIGFuZCBsZWF2aW5nIG5vZGVzIG9mIGEgc3BlY2lmaWMga2luZC5cbiAqXG4gKiAgICAgdmlzaXQoYXN0LCB7XG4gKiAgICAgICBlbnRlcjoge1xuICogICAgICAgICBLaW5kKG5vZGUpIHtcbiAqICAgICAgICAgICAvLyBlbnRlciB0aGUgXCJLaW5kXCIgbm9kZVxuICogICAgICAgICB9XG4gKiAgICAgICB9LFxuICogICAgICAgbGVhdmU6IHtcbiAqICAgICAgICAgS2luZChub2RlKSB7XG4gKiAgICAgICAgICAgLy8gbGVhdmUgdGhlIFwiS2luZFwiIG5vZGVcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pXG4gKi9cblxuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuXG5mdW5jdGlvbiB2aXNpdChyb290LCB2aXNpdG9yKSB7XG4gIHZhciB2aXNpdG9yS2V5cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogUXVlcnlEb2N1bWVudEtleXM7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYtaW5pdCAqL1xuICB2YXIgc3RhY2sgPSB1bmRlZmluZWQ7XG4gIHZhciBpbkFycmF5ID0gQXJyYXkuaXNBcnJheShyb290KTtcbiAgdmFyIGtleXMgPSBbcm9vdF07XG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgZWRpdHMgPSBbXTtcbiAgdmFyIG5vZGUgPSB1bmRlZmluZWQ7XG4gIHZhciBrZXkgPSB1bmRlZmluZWQ7XG4gIHZhciBwYXJlbnQgPSB1bmRlZmluZWQ7XG4gIHZhciBwYXRoID0gW107XG4gIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgdmFyIG5ld1Jvb3QgPSByb290O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVmLWluaXQgKi9cblxuICBkbyB7XG4gICAgaW5kZXgrKztcbiAgICB2YXIgaXNMZWF2aW5nID0gaW5kZXggPT09IGtleXMubGVuZ3RoO1xuICAgIHZhciBpc0VkaXRlZCA9IGlzTGVhdmluZyAmJiBlZGl0cy5sZW5ndGggIT09IDA7XG5cbiAgICBpZiAoaXNMZWF2aW5nKSB7XG4gICAgICBrZXkgPSBhbmNlc3RvcnMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgbm9kZSA9IHBhcmVudDtcbiAgICAgIHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTtcblxuICAgICAgaWYgKGlzRWRpdGVkKSB7XG4gICAgICAgIGlmIChpbkFycmF5KSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUuc2xpY2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgY2xvbmUgPSB7fTtcblxuICAgICAgICAgIGZvciAodmFyIF9pMiA9IDAsIF9PYmplY3Qka2V5czIgPSBPYmplY3Qua2V5cyhub2RlKTsgX2kyIDwgX09iamVjdCRrZXlzMi5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgICB2YXIgayA9IF9PYmplY3Qka2V5czJbX2kyXTtcbiAgICAgICAgICAgIGNsb25lW2tdID0gbm9kZVtrXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2RlID0gY2xvbmU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWRpdE9mZnNldCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGVkaXRzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgIHZhciBlZGl0S2V5ID0gZWRpdHNbaWldWzBdO1xuICAgICAgICAgIHZhciBlZGl0VmFsdWUgPSBlZGl0c1tpaV1bMV07XG5cbiAgICAgICAgICBpZiAoaW5BcnJheSkge1xuICAgICAgICAgICAgZWRpdEtleSAtPSBlZGl0T2Zmc2V0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbkFycmF5ICYmIGVkaXRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbm9kZS5zcGxpY2UoZWRpdEtleSwgMSk7XG4gICAgICAgICAgICBlZGl0T2Zmc2V0Kys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVbZWRpdEtleV0gPSBlZGl0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluZGV4ID0gc3RhY2suaW5kZXg7XG4gICAgICBrZXlzID0gc3RhY2sua2V5cztcbiAgICAgIGVkaXRzID0gc3RhY2suZWRpdHM7XG4gICAgICBpbkFycmF5ID0gc3RhY2suaW5BcnJheTtcbiAgICAgIHN0YWNrID0gc3RhY2sucHJldjtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gcGFyZW50ID8gaW5BcnJheSA/IGluZGV4IDoga2V5c1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICBub2RlID0gcGFyZW50ID8gcGFyZW50W2tleV0gOiBuZXdSb290O1xuXG4gICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcGF0aC5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgaWYgKCEoMCwgX2FzdC5pc05vZGUpKG5vZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQVNUIE5vZGU6IFwiLmNvbmNhdCgoMCwgX2luc3BlY3QuZGVmYXVsdCkobm9kZSksIFwiLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2aXNpdEZuID0gZ2V0VmlzaXRGbih2aXNpdG9yLCBub2RlLmtpbmQsIGlzTGVhdmluZyk7XG5cbiAgICAgIGlmICh2aXNpdEZuKSB7XG4gICAgICAgIHJlc3VsdCA9IHZpc2l0Rm4uY2FsbCh2aXNpdG9yLCBub2RlLCBrZXksIHBhcmVudCwgcGF0aCwgYW5jZXN0b3JzKTtcblxuICAgICAgICBpZiAocmVzdWx0ID09PSBCUkVBSykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoIWlzTGVhdmluZykge1xuICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVkaXRzLnB1c2goW2tleSwgcmVzdWx0XSk7XG5cbiAgICAgICAgICBpZiAoIWlzTGVhdmluZykge1xuICAgICAgICAgICAgaWYgKCgwLCBfYXN0LmlzTm9kZSkocmVzdWx0KSkge1xuICAgICAgICAgICAgICBub2RlID0gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGlzRWRpdGVkKSB7XG4gICAgICBlZGl0cy5wdXNoKFtrZXksIG5vZGVdKTtcbiAgICB9XG5cbiAgICBpZiAoaXNMZWF2aW5nKSB7XG4gICAgICBwYXRoLnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX3Zpc2l0b3JLZXlzJG5vZGUka2luO1xuXG4gICAgICBzdGFjayA9IHtcbiAgICAgICAgaW5BcnJheTogaW5BcnJheSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBrZXlzOiBrZXlzLFxuICAgICAgICBlZGl0czogZWRpdHMsXG4gICAgICAgIHByZXY6IHN0YWNrXG4gICAgICB9O1xuICAgICAgaW5BcnJheSA9IEFycmF5LmlzQXJyYXkobm9kZSk7XG4gICAgICBrZXlzID0gaW5BcnJheSA/IG5vZGUgOiAoX3Zpc2l0b3JLZXlzJG5vZGUka2luID0gdmlzaXRvcktleXNbbm9kZS5raW5kXSkgIT09IG51bGwgJiYgX3Zpc2l0b3JLZXlzJG5vZGUka2luICE9PSB2b2lkIDAgPyBfdmlzaXRvcktleXMkbm9kZSRraW4gOiBbXTtcbiAgICAgIGluZGV4ID0gLTE7XG4gICAgICBlZGl0cyA9IFtdO1xuXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKHBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHBhcmVudCA9IG5vZGU7XG4gICAgfVxuICB9IHdoaWxlIChzdGFjayAhPT0gdW5kZWZpbmVkKTtcblxuICBpZiAoZWRpdHMubGVuZ3RoICE9PSAwKSB7XG4gICAgbmV3Um9vdCA9IGVkaXRzW2VkaXRzLmxlbmd0aCAtIDFdWzFdO1xuICB9XG5cbiAgcmV0dXJuIG5ld1Jvb3Q7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdmlzaXRvciBpbnN0YW5jZSB3aGljaCBkZWxlZ2F0ZXMgdG8gbWFueSB2aXNpdG9ycyB0byBydW4gaW5cbiAqIHBhcmFsbGVsLiBFYWNoIHZpc2l0b3Igd2lsbCBiZSB2aXNpdGVkIGZvciBlYWNoIG5vZGUgYmVmb3JlIG1vdmluZyBvbi5cbiAqXG4gKiBJZiBhIHByaW9yIHZpc2l0b3IgZWRpdHMgYSBub2RlLCBubyBmb2xsb3dpbmcgdmlzaXRvcnMgd2lsbCBzZWUgdGhhdCBub2RlLlxuICovXG5cblxuZnVuY3Rpb24gdmlzaXRJblBhcmFsbGVsKHZpc2l0b3JzKSB7XG4gIHZhciBza2lwcGluZyA9IG5ldyBBcnJheSh2aXNpdG9ycy5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIGVudGVyOiBmdW5jdGlvbiBlbnRlcihub2RlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2l0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwcGluZ1tpXSA9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGZuID0gZ2V0VmlzaXRGbih2aXNpdG9yc1tpXSwgbm9kZS5raW5kLFxuICAgICAgICAgIC8qIGlzTGVhdmluZyAqL1xuICAgICAgICAgIGZhbHNlKTtcblxuICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZuLmFwcGx5KHZpc2l0b3JzW2ldLCBhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBza2lwcGluZ1tpXSA9IG5vZGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgc2tpcHBpbmdbaV0gPSBCUkVBSztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxlYXZlOiBmdW5jdGlvbiBsZWF2ZShub2RlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2l0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwcGluZ1tpXSA9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGZuID0gZ2V0VmlzaXRGbih2aXNpdG9yc1tpXSwgbm9kZS5raW5kLFxuICAgICAgICAgIC8qIGlzTGVhdmluZyAqL1xuICAgICAgICAgIHRydWUpO1xuXG4gICAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkodmlzaXRvcnNbaV0sIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgIHNraXBwaW5nW2ldID0gQlJFQUs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2tpcHBpbmdbaV0gPT09IG5vZGUpIHtcbiAgICAgICAgICBza2lwcGluZ1tpXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4vKipcbiAqIEdpdmVuIGEgdmlzaXRvciBpbnN0YW5jZSwgaWYgaXQgaXMgbGVhdmluZyBvciBub3QsIGFuZCBhIG5vZGUga2luZCwgcmV0dXJuXG4gKiB0aGUgZnVuY3Rpb24gdGhlIHZpc2l0b3IgcnVudGltZSBzaG91bGQgY2FsbC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZpc2l0Rm4odmlzaXRvciwga2luZCwgaXNMZWF2aW5nKSB7XG4gIHZhciBraW5kVmlzaXRvciA9IHZpc2l0b3Jba2luZF07XG5cbiAgaWYgKGtpbmRWaXNpdG9yKSB7XG4gICAgaWYgKCFpc0xlYXZpbmcgJiYgdHlwZW9mIGtpbmRWaXNpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyB7IEtpbmQoKSB7fSB9XG4gICAgICByZXR1cm4ga2luZFZpc2l0b3I7XG4gICAgfVxuXG4gICAgdmFyIGtpbmRTcGVjaWZpY1Zpc2l0b3IgPSBpc0xlYXZpbmcgPyBraW5kVmlzaXRvci5sZWF2ZSA6IGtpbmRWaXNpdG9yLmVudGVyO1xuXG4gICAgaWYgKHR5cGVvZiBraW5kU3BlY2lmaWNWaXNpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyB7IEtpbmQ6IHsgZW50ZXIoKSB7fSwgbGVhdmUoKSB7fSB9IH1cbiAgICAgIHJldHVybiBraW5kU3BlY2lmaWNWaXNpdG9yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc3BlY2lmaWNWaXNpdG9yID0gaXNMZWF2aW5nID8gdmlzaXRvci5sZWF2ZSA6IHZpc2l0b3IuZW50ZXI7XG5cbiAgICBpZiAoc3BlY2lmaWNWaXNpdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIHNwZWNpZmljVmlzaXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyB7IGVudGVyKCkge30sIGxlYXZlKCkge30gfVxuICAgICAgICByZXR1cm4gc3BlY2lmaWNWaXNpdG9yO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3BlY2lmaWNLaW5kVmlzaXRvciA9IHNwZWNpZmljVmlzaXRvcltraW5kXTtcblxuICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpY0tpbmRWaXNpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIHsgZW50ZXI6IHsgS2luZCgpIHt9IH0sIGxlYXZlOiB7IEtpbmQoKSB7fSB9IH1cbiAgICAgICAgcmV0dXJuIHNwZWNpZmljS2luZFZpc2l0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBJbXBvcnRzXG52YXIgX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvaHRtbC1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiKTtcbnZhciBfX19IVE1MX0xPQURFUl9JTVBPUlRfMF9fXyA9IHJlcXVpcmUoXCIuL2xvYWRlci5zdmdcIik7XG4vLyBNb2R1bGVcbnZhciBfX19IVE1MX0xPQURFUl9SRVBMQUNFTUVOVF8wX19fID0gX19fSFRNTF9MT0FERVJfR0VUX1NPVVJDRV9GUk9NX0lNUE9SVF9fXyhfX19IVE1MX0xPQURFUl9JTVBPUlRfMF9fXyk7XG52YXIgY29kZSA9IFwiPGRpdiBpZD1cXFwia29hbGFmaS1tb2RhbFxcXCI+IDxkaXYgaWQ9XFxcImtvYWxhZmktbW9kYWwtY29udGVudFxcXCI+IDxkaXYgaWQ9XFxcImtvYWxhZmktbG9hZGVyXFxcIj4gPGltZyBzcmM9XFxcIlwiICsgX19fSFRNTF9MT0FERVJfUkVQTEFDRU1FTlRfMF9fXyArIFwiXFxcIi8+IDwvZGl2PiA8ZGl2IGlkPVxcXCJrb2FsYWZpLWlmcmFtZS13cmFwcGVyXFxcIj4gPGlmcmFtZSBpZD1cXFwia29hbGFmaS1pZnJhbWVcXFwiIGZyYW1lYm9yZGVyPVxcXCIwXFxcIiBzcmM9XFxcIiR7a2ZpVXJsfSR7cXVlcnlQYXJhbXN9XFxcIj48L2lmcmFtZT4gPC9kaXY+IDwvZGl2PiA8L2Rpdj4gXCI7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGNvZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBvcHRpb25zID0ge307XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlLCBuby1wYXJhbS1yZWFzc2lnblxuXG5cbiAgdXJsID0gdXJsICYmIHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmw7XG5cbiAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB1cmwgKz0gb3B0aW9ucy5oYXNoO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubWF5YmVOZWVkUXVvdGVzICYmIC9bXFx0XFxuXFxmXFxyIFwiJz08PmBdLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gXCJcXFwiXCIuY29uY2F0KHVybCwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiXG4gICAgICAgIHZhciByZXN1bHQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2VbMV0hLi9tb2RhbC5jc3NcIik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXN1bHQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICIsIlxuICAgICAgICB2YXIgcmVzdWx0ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2h0bWwtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdLnVzZVsxXSEuL21vZGFsLXNob3J0LWZvcm0uaHRtbFwiKTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlc3VsdC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgIiwiaW1wb3J0IHsgZ3FsLCBHcmFwaFFMQ2xpZW50IH0gZnJvbSAnZ3JhcGhxbC1yZXF1ZXN0JztcbmltcG9ydCB7IG9yZGVyLCBvcmRlclZhcmlhYmxlcywgb3JkZXJfb3JkZXIgfSBmcm9tICcuLi9nZW5lcmF0ZWQvb3JkZXInO1xuaW1wb3J0IHsgTmV3T3JkZXIgfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ2xvYmFsVHlwZXMnO1xuXG5pbnRlcmZhY2UgaWVkZ2VTZXJ2aWNlIHtcbiAgZmV0Y2hPcmRlcihvcmRlcklkOiBzdHJpbmcpOiBQcm9taXNlPG9yZGVyPjtcbiAgY3JlYXRlT3JkZXIocHVibGljRGVhbGVySWQ6IHN0cmluZywgb3JkZXJJbnB1dDogTmV3T3JkZXIpOiBQcm9taXNlPG9yZGVyPjtcbn1cblxubGV0IGdyYXBoUUxDbGllbnQ6IEdyYXBoUUxDbGllbnQ7XG5cbmNvbnN0IGNyZWF0ZU9yZGVyTXV0YXRpb24gPSBncWxgXG4gIG11dGF0aW9uIGNyZWF0ZU9yZGVyKCRvcmRlcklucHV0OiBOZXdPcmRlciEpIHtcbiAgICBjcmVhdGVPcmRlcihpbnB1dDogJG9yZGVySW5wdXQpIHtcbiAgICAgIG9yZGVySWRcbiAgICAgIG9yZGVyRXJyb3JzIHtcbiAgICAgICAgX190eXBlbmFtZVxuICAgICAgICAuLi4gb24gRmF0YWxFcnJvciB7XG4gICAgICAgICAgbWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIC4uLiBvbiBCYWRSZXF1ZXN0IHtcbiAgICAgICAgICBtZXNzYWdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IGZldGNoT3JkZXJRdWVyeSA9IGdxbGBcbiAgcXVlcnkgb3JkZXIoJGlkOiBJRCEpIHtcbiAgICBvcmRlcihpZDogJGlkKSB7XG4gICAgICBtZXRhZGF0YSB7XG4gICAgICAgIGZvcm1UeXBlXG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBlZGdlU2VydmljZTogaWVkZ2VTZXJ2aWNlID0ge1xuICBmZXRjaE9yZGVyOiBhc3luYyAoaWQ6IHN0cmluZyk6IFByb21pc2U8b3JkZXI+ID0+IHtcbiAgICBpZiAoIWdyYXBoUUxDbGllbnQpIHtcbiAgICAgIGdyYXBoUUxDbGllbnQgPSBuZXcgR3JhcGhRTENsaWVudChwcm9jZXNzLmVudi5HUkFQSF9RTF9FTkRQT0lOVCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyYXBoUUxDbGllbnQucmVxdWVzdChmZXRjaE9yZGVyUXVlcnksIHsgaWQgfSk7XG4gIH0sXG4gIGNyZWF0ZU9yZGVyOiBhc3luYyAocHVibGljRGVhbGVySWQ6IHN0cmluZywgb3JkZXJJbnB1dDogTmV3T3JkZXIpOiBQcm9taXNlPG9yZGVyPiA9PiB7XG4gICAgaWYgKCFncmFwaFFMQ2xpZW50KSB7XG4gICAgICBncmFwaFFMQ2xpZW50ID0gbmV3IEdyYXBoUUxDbGllbnQocHJvY2Vzcy5lbnYuR1JBUEhfUUxfRU5EUE9JTlQpO1xuICAgIH1cbiAgICBncmFwaFFMQ2xpZW50LnNldEhlYWRlcigncHVibGljLWRlYWxlci1pZCcsIHB1YmxpY0RlYWxlcklkKTtcbiAgICByZXR1cm4gZ3JhcGhRTENsaWVudC5yZXF1ZXN0KGNyZWF0ZU9yZGVyTXV0YXRpb24sIHsgb3JkZXJJbnB1dCB9KTtcbiAgfSxcbn07XG5cbmV4cG9ydCB7IGVkZ2VTZXJ2aWNlIH07XG4iLCJpbXBvcnQgeyBGb3JtVHlwZXMgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvZ2xvYmFsVHlwZXMnO1xuaW1wb3J0IHsgZWRnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9rb2FsYWZpU2RrJztcblxuLy8gSGFkIHRvIHVzZSByZXF1aXJlIHRvIGdldCB0aGVzZSBsb2FkZWRcbi8vIHVzaW5nIHN0cmluZyBsb2FkZXJzIHNvIHRoZXNlIHdpbGwgYmUgc3RyaW5nc1xuY29uc3QgbW9kYWxTaG9ydEh0bWw6IHN0cmluZyA9IHJlcXVpcmUoJy4vbW9kYWwtc2hvcnQtZm9ybS5odG1sJyk7XG5jb25zdCBzaGFyZWRDc3M6IHN0cmluZyA9IHJlcXVpcmUoJy4vbW9kYWwuY3NzJyk7XG5cbnR5cGUgb3Blbk1vZGFsQXJncyA9IHtcbiAgb3JkZXJJZDogc3RyaW5nO1xuICBwZGk6IHN0cmluZztcbiAgdXNlU3RhZ2U6IGJvb2xlYW47XG59O1xuXG5jb25zdCBpbnNlcnRNb2RhbENzcyA9IChjc3NTdHlsZVRhZ0lkOiBzdHJpbmcsIGNzczogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGNzc1N0eWxlVGFnRXhpc3RzID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjc3NTdHlsZVRhZ0lkKTtcbiAgLy8gb25seSBhZGQgc3R5bGUgc2NyaXB0IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgaWYgKCFjc3NTdHlsZVRhZ0V4aXN0cykge1xuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZS5pZCA9IGNzc1N0eWxlVGFnSWQ7XG4gICAgc3R5bGUuaW5uZXJIVE1MID0gY3NzO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG59O1xuXG5jb25zdCBtb2RpZnlLZmlIVE1MID0gKGh0bWw6IHN0cmluZywgZWNvbW1Vcmw6IHN0cmluZywgb3B0aW9uczogUGFydGlhbDxvcGVuTW9kYWxBcmdzPikgPT4ge1xuICBsZXQgcXVlcnlQYXJhbXM6IHN0cmluZztcbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSAhIW9wdGlvbnMub3JkZXJJZCAmJiBvcHRpb25zLnVzZVN0YWdlOlxuICAgICAgcXVlcnlQYXJhbXMgPSBgP29yZGVySWQ9JHtvcHRpb25zLm9yZGVySWR9JnN0YWdlYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgISFvcHRpb25zLm9yZGVySWQgJiYgISFvcHRpb25zLnBkaTpcbiAgICAgIHF1ZXJ5UGFyYW1zID0gYD9vcmRlcklkPSR7b3B0aW9ucy5vcmRlcklkfSZwZGk9JHtvcHRpb25zLnBkaX1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAhIW9wdGlvbnMub3JkZXJJZCAmJiAhb3B0aW9ucy5wZGk6XG4gICAgICBxdWVyeVBhcmFtcyA9IGA/b3JkZXJJZD0ke29wdGlvbnMub3JkZXJJZH1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAhIW9wdGlvbnMucGRpICYmICFvcHRpb25zLm9yZGVySWQ6XG4gICAgICBxdWVyeVBhcmFtcyA9IGA/cGRpPSR7b3B0aW9ucy5wZGl9YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG9wZW5Nb2RhbCgpOiBpbnZhbGlkIGFyZ3NgKTtcbiAgfVxuXG4gIHJldHVybiBodG1sLnJlcGxhY2UoJyR7a2ZpVXJsfScsIGVjb21tVXJsKS5yZXBsYWNlKCcke3F1ZXJ5UGFyYW1zfScsIHF1ZXJ5UGFyYW1zKTtcbn07XG5cbmNvbnN0IGluc2VydE1vZGFsSHRtbCA9IChtb2RpZmllZEh0bWw6IHN0cmluZywgZW1wdHlEaXZJZDogc3RyaW5nLCBtb2RhbENvbnRlbnRJZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGVtcHR5RGl2RXhpc3RzID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbXB0eURpdklkKTtcbiAgaWYgKCFlbXB0eURpdkV4aXN0cykge1xuICAgIGNvbnN0IGVtcHR5RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZW1wdHlEaXYuaWQgPSBlbXB0eURpdklkO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZW1wdHlEaXYpO1xuICB9XG5cbiAgLy8gUHJldmVudHMgc2Nyb2xsaW5nIGJlaGluZCB0aGUgbW9kYWxcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbXB0eURpdklkKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgbW9kaWZpZWRIdG1sKTtcblxuICAvLyBFbmFibGVzIHRoZSBhbmltYXRpb24gb2YgdGhlIG1vZGFsIGFwcGVhcmluZy4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGVcbiAgLy8gbW9kYWwgYmFja2dyb3VuZCB0byBhcHBlYXIgYnJpZWZseSBzbyB0aGUgYW5pbWF0aW9uIG9mIHRoZSBtb2RhbCB3aWxsIHdvcmtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgY29uc29sZS5sb2cobW9kYWxDb250ZW50SWQsICdtb2RhbGNvbnRlbnRpZCcpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vZGFsQ29udGVudElkKS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gIH0sIDQpO1xufTtcblxuY29uc3QgaGFuZGxlQ2xvc2VNb2RhbFN0eWxpbmcgPSAobW9kYWxFbGVtZW50OiBIVE1MRWxlbWVudCwgbW9kYWxDb250ZW50SWQ6IHN0cmluZykgPT4ge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtb2RhbENvbnRlbnRJZCkuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xuICAvLyBFbmFibGVzIGFuaW1hdGlvbiB0byB0YWtlIGVmZmVjdFxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBtb2RhbEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfSwgMjAwKTtcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICd2aXNpYmxlJztcblxuICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2xvc2VNb2RhbCcsIHsgZGV0YWlsOiB7IGlzTW9kYWxDbG9zZWQ6IHRydWUgfSB9KTtcbiAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufTtcblxuLy8ga2VlcGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3Qgb3Blbk1vZGFsID0gYXN5bmMgKG9wdGlvbnM6IG9wZW5Nb2RhbEFyZ3MgfCBzdHJpbmcpID0+IHtcbiAgbGV0IG9yZGVySWQ6IHN0cmluZztcbiAgbGV0IHB1YmxpY0RlYWxlcklkOiBzdHJpbmc7XG4gIGxldCB1c2VTdGFnZTogYm9vbGVhbjtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgKHsgb3JkZXJJZCwgcGRpOiBwdWJsaWNEZWFsZXJJZCwgdXNlU3RhZ2UgfSA9IG9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIC8vIHRoaXMgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgdG8gZW5zdXJlIEJvVCBwYXNzaW5nIG9yZGVySWQgYXMgYSBzdHJpbmcgc3RpbGwgd29ya3MuXG4gICAgb3JkZXJJZCA9IG9wdGlvbnM7XG4gIH1cblxuICBpZiAoIW9yZGVySWQgJiYgIXB1YmxpY0RlYWxlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcGVuTW9kYWwoKTogYXJndW1lbnRzIG5vdCBwYXNzZWQgaW4gY29ycmVjdGx5LicpO1xuICB9XG5cbiAgY29uc3QgRU1QVFlfRElWX0lEID0gJ2tvYWxhZmktZGl2JztcbiAgY29uc3QgQ1NTX1NUWUxFX1RBR19JRCA9ICdrb2FsYWZpLWNzcyc7XG4gIGNvbnN0IEVDT01NX1VSTCA9IHByb2Nlc3MuZW52LkVDT01NX1VSTDtcbiAgY29uc3QgTU9EQUxfSUQgPSBga29hbGFmaS1tb2RhbGA7XG4gIGNvbnN0IE1PREFMX0NPTlRFTlRfSUQgPSBga29hbGFmaS1tb2RhbC1jb250ZW50YDtcbiAgY29uc3QgQ0xPU0VfQlVUVE9OX0lEID0gYGtvYWxhZmktbW9kYWwtY2xvc2UtYnV0dG9uYDtcbiAgY29uc3QgSUZSQU1FX0lEID0gYGtvYWxhZmktaWZyYW1lYDtcblxuICBjb25zdCBtb2RpZmllZEh0bWwgPSBtb2RpZnlLZmlIVE1MKG1vZGFsU2hvcnRIdG1sLCBFQ09NTV9VUkwsIHsgb3JkZXJJZCwgcGRpOiBwdWJsaWNEZWFsZXJJZCwgdXNlU3RhZ2UgfSk7XG5cbiAgdHJ5IHtcbiAgICBpbnNlcnRNb2RhbENzcyhDU1NfU1RZTEVfVEFHX0lELCBzaGFyZWRDc3MpO1xuICAgIGluc2VydE1vZGFsSHRtbChtb2RpZmllZEh0bWwsIEVNUFRZX0RJVl9JRCwgTU9EQUxfQ09OVEVOVF9JRCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0luc2VydGluZyBDU1MvSFRNTDogJywgZXJyKTtcbiAgfVxuXG4gIGNvbnN0IHdjTW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChNT0RBTF9JRCk7XG4gIGNvbnN0IGNsb3NlTW9kYWxCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChDTE9TRV9CVVRUT05fSUQpO1xuXG4gIC8vIFBsYWNlaG9sZGVyIGxldHMgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNvbHZlL3JlamVjdCByZXR1cm5lZCBQcm9taXNlXG4gIGxldCBwcm9taXNlUmVzb2x2ZTtcbiAgbGV0IHByb21pc2VSZWplY3Q7XG5cbiAgZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgPT0gY2xvc2VNb2RhbEJ1dHRvbikge1xuICAgICAgLy8gTm90aWZpZXMgb3VyIGFwcCB0aGF0IG1vZGFsIGlzIGNsb3NpbmdcbiAgICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElGUkFNRV9JRCkgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XG4gICAgICAvLyBBcHAgaXMgZXhwZWN0aW5nIHRoaXMgZXhhY3QgbWVzc2FnZSB1cG9uIG1vZGFsIGNsb3N1cmVcbiAgICAgIGlmcmFtZT8uY29udGVudFdpbmRvdz8ucG9zdE1lc3NhZ2UoJ0Nsb3NlZCBtb2RhbCB3aXRoIFggYnV0dG9uJywgRUNPTU1fVVJMKTtcblxuICAgICAgaGFuZGxlQ2xvc2VNb2RhbFN0eWxpbmcod2NNb2RhbCwgTU9EQUxfQ09OVEVOVF9JRCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIG9yZGVySWQ6IG9yZGVySWQsXG4gICAgICAgIHJlYXNvbjogJ2Nsb3NlZCBtb2RhbCB3aXRoIFggYnV0dG9uJyxcbiAgICAgIH07XG4gICAgICBwcm9taXNlUmVqZWN0KHBheWxvYWQpO1xuICAgIH1cbiAgfTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAnbWVzc2FnZScsXG4gICAgZnVuY3Rpb24gKGV2ZW50OiBNZXNzYWdlRXZlbnQpIHtcbiAgICAgIC8vIFByZXZlbnRzIHJlYWRpbmcgZXZlbnRzIGZyb20gdW5pbnRlbmRlZCBzaXRlcy5cbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IEVDT01NX1VSTCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuXG4gICAgICBpZiAoZXZlbnREYXRhLnN0b3BTcGlubmVyKSB7XG4gICAgICAgIGNvbnN0IHNwaW5uZXJEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna29hbGFmaS1sb2FkZXInKTtcbiAgICAgICAgaWYgKHNwaW5uZXJEaXYpIHtcbiAgICAgICAgICBzcGlubmVyRGl2LnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudERhdGEud2NmU3VjY2Vzcykge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZShldmVudERhdGEucGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGF0YS53Y2ZTdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgICBwcm9taXNlUmVqZWN0KGV2ZW50RGF0YS5wYXlsb2FkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50RGF0YS5jbG9zZU1vZGFsKSB7XG4gICAgICAgIGhhbmRsZUNsb3NlTW9kYWxTdHlsaW5nKHdjTW9kYWwsIE1PREFMX0NPTlRFTlRfSUQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZmFsc2VcbiAgKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIEZvciBjb2RlIHJlYWRhYmlsaXR5OiBldmVudExpc3RlbmVyIGFuZCBvbmNsaWNrIHdlcmUgbW92ZWQgb3V0c2lkZSBvZiByZXR1cm5cbiAgICAvLyBzdGF0ZW1lbnQsIHNpbmNlIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSB3aW5kb3cvZG9jdW1lbnQgYW5kIGFyZW4ndCBzY29wZWQgdG8gcHJvbWlzZVxuICAgIHByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcbn07XG5cbmV4cG9ydCB7IG9wZW5Nb2RhbCwgbW9kaWZ5S2ZpSFRNTCB9O1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDkpO1xuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjXG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkgc2NyaXB0VXJsID0gc2NyaXB0c1tzY3JpcHRzLmxlbmd0aCAtIDFdLnNyY1xuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiXSwic291cmNlUm9vdCI6IiJ9