File: D:/HostingSpaces/SBogers10/timentessagaantrouwen.nl/wwwroot/js/app.js
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("bUC5"),e.exports=n("XdBR")},BoWr:function(e,t){var n={map:"",key:"AIzaSyClLCFb4qo2ti2ewJo1xUMR0bx2k1u34c0",location:{lat:51.6633433,lng:5.5121956},styling:"",init:function(){n.map=document.getElementById("map"),isset(n.map)&&(n.map.hasAttribute("data-google-lat")&&(n.location.lat=parseFloat(n.map.getAttribute("data-google-lat"))),n.map.hasAttribute("data-google-lng")&&(n.location.lng=parseFloat(n.map.getAttribute("data-google-lng"))),n.setCustomStyling(),"undefined"==typeof google||void 0===google.maps?getScript("https://maps.googleapis.com/maps/api/js?key="+n.key,n.drawMap):n.drawMap())},drawMap:function(){var e=new google.maps.Map(n.map,{zoom:13,center:n.location,disableDefaultUI:!0,styles:n.styling});new google.maps.Marker({position:n.location,map:e,icon:"/img/googleMapsMarker.svg"})},setCustomStyling:function(){n.styling=[{featureType:"administrative",elementType:"all",stylers:[{visibility:"on"},{lightness:33}]},{featureType:"landscape",elementType:"all",stylers:[{color:"#f2e5d4"}]},{featureType:"poi.park",elementType:"geometry",stylers:[{color:"#c5dac6"}]},{featureType:"poi.park",elementType:"labels",stylers:[{visibility:"on"},{lightness:20}]},{featureType:"road",elementType:"all",stylers:[{lightness:20}]},{featureType:"road.highway",elementType:"geometry",stylers:[{color:"#c5c6c6"}]},{featureType:"road.arterial",elementType:"geometry",stylers:[{color:"#e4d7c6"}]},{featureType:"road.local",elementType:"geometry",stylers:[{color:"#fbfaf7"}]},{featureType:"water",elementType:"all",stylers:[{visibility:"on"},{color:"#acbcc9"}]}]}};n.init()},DYSD:function(e,t){var n={time:Date.now(),timeout:null,waitThrottle:1e3,waitDebounce:300,lastScrollTopPosition:0,scrollDirectionDown:!0,scrollDirectionUp:!1,init:function(){n.triggerOnInit(),window.addEventListener("scroll",function(){n.time+n.waitThrottle-Date.now()<0&&(n.triggerThrottle(),n.time=Date.now())}),window.addEventListener("scroll",function(){n.triggerSmooth()}),window.addEventListener("scroll",function(){isset(n.timeout)&&clearTimeout(n.timeout),n.timeout=setTimeout(n.triggerDebounce,n.waitDebounce)})},triggerOnInit:function(){n.triggerElementInViewportAnimation()},triggerThrottle:function(){n.triggerElementInViewportAnimation()},triggerDebounce:function(){},triggerSmooth:function(){n.detectScrollDirection()},detectIfElementIsPartlyInViewport:function(e){if(isset(e)){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,r=window.innerWidth||document.documentElement.clientWidth,i=t.top<=n&&t.top+t.height>=0,o=t.left<=r&&t.left+t.width>=0;return i&&o}},detectIfElementIsFullyInViewport:function(e){if(isset(e)){var t=e.getBoundingClientRect();return t.top>=0&&t.bottom<=window.innerHeight}},detectScrollDirection:function(){var e=window.pageYOffset||document.documentElement.scrollTop;e>=n.lastScrollTopPosition?(n.scrollDirectionDown=!0,n.scrollDirectionUp=!1):(n.scrollDirectionDown=!1,n.scrollDirectionUp=!0),n.lastScrollTopPosition=e},triggerElementInViewportAnimation:function(){for(var e=document.querySelectorAll(".element-in-viewport"),t=e.length,r=0;r<t;r++){var i=e[r];n.detectIfElementIsPartlyInViewport(i)&&i.classList.remove("element-in-viewport")}}};n.init()},"U+Wg":function(e,t){var n={form:null,init:function(){if(n.form=document.getElementById("questionForm"),isset(n.form)){var e=n.form.querySelector(".js-toggle-chain-disabled");isset(e)&&n.initChainDisabledListener(e);var t=n.form.querySelector(".js-toggle-present-persons");isset(t)&&n.initPersonListener(t);var r=n.form.querySelector(".js-toggle-allergies");isset(r)&&n.initAllergiesListener(r)}},initChainDisabledListener:function(e){var t=n.form.querySelector(".stay_sleeping"),r=n.form.querySelector(".allergies");e.addEventListener("click",function(){var i=e.querySelector("input:checked");if(isset(i))if(0==i.value){if(isset(t)&&(t.classList.add("is-disabled"),t.querySelector('input[value="0"]').checked=!0),isset(r)){r.querySelector('input[value="0"]').checked=!0,r.classList.add("is-disabled");var o=n.form.querySelector(".c-form-element.has_allergies");isset(o)&&o.classList.add("is-hidden")}}else isset(t)&&t.classList.remove("is-disabled"),isset(r)&&r.classList.remove("is-disabled")})},initPersonListener:function(e){var t=n.form.querySelector(".c-form-element.present_persons");isset(t)&&e.addEventListener("click",function(){var n=e.querySelector("input:checked");isset(n)&&(1==n.value?t.classList.remove("is-hidden"):t.classList.add("is-hidden"))})},initAllergiesListener:function(e){var t=n.form.querySelector(".c-form-element.has_allergies");isset(t)&&e.addEventListener("click",function(){var n=e.querySelector("input:checked");isset(n)&&(1==n.value?t.classList.remove("is-hidden"):t.classList.add("is-hidden"))})}};n.init()},XdBR:function(e,t){},bUC5:function(e,t,n){n("c8ah"),n("h36E"),n("DYSD"),n("u3Nf"),n("BoWr"),n("U+Wg")},c8ah:function(e,t){window.isset=function(e){return null!=e},window.EasingFunctions={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:(4-2*e)*e-1},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}},window.getScript=function(e,t){var n=document.createElement("script");n.async=1;var r=document.getElementsByTagName("script"),i=r[r.length-1];n.onload=n.onreadystatechange=function(e,r){(r||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n=void 0,r||t&&t())},n.src=e,i.parentNode.insertBefore(n,i)},window.Cookie={set:function(e,t,n){var r,i,o,a,s;n?((o=new Date).setTime(o.getTime()+24*n*60*60*1e3),a="; expires="+o.toGMTString()):a="",1===(s=location.host).split(".").length?document.cookie=e+"="+t+a+"; path=/":((i=s.split(".")).shift(),r="."+i.join("."),r=".komma.pro",document.cookie=e+"="+t+a+"; path=/; domain="+r,null!=Cookie.get(e)&&Cookie.get(e)==t||(r="."+s,document.cookie=e+"="+t+a+"; path=/; domain="+r))},get:function(e){for(var t=e+"=",n=document.cookie.split(";"),r=0;r<n.length;r++){for(var i=n[r];" "===i.charAt(0);)i=i.substring(1,i.length);if(0===i.indexOf(t))return i.substring(t.length,i.length)}return null},erase:function(e){Cookie.set(e,"",-1)}},window.number_format=function(e,t,n,r){e=(e+"").replace(/[^0-9+\-Ee.]/g,"");var i=isFinite(+e)?+e:0,o=isFinite(+t)?Math.abs(t):0,a=void 0===r?",":r,s=void 0===n?".":n,l="";return(l=(o?function(e,t){var n=Math.pow(10,t);return""+Math.round(e*n)/n}(i,o):""+Math.round(i)).split("."))[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,a)),(l[1]||"").length<o&&(l[1]=l[1]||"",l[1]+=new Array(o-l[1].length+1).join("0")),l.join(s)}},h36E:function(e,t){var n={time:Date.now(),timeout:null,waitThrottle:1e3,waitDebounce:500,onMobile:!1,init:function(){n.triggerOnInit(),window.addEventListener("resize",function(){n.time+n.waitThrottle-Date.now()<0&&(n.triggerThrottle(),n.time=Date.now())}),window.addEventListener("resize",function(){n.triggerSmooth()}),window.addEventListener("resize",function(){isset(n.timeout)&&clearTimeout(n.timeout),n.timeout=setTimeout(n.triggerDebounce,n.waitDebounce)})},triggerOnInit:function(){document.body.clientWidth<1e3&&(n.onMobile=!0)},triggerThrottle:function(){},triggerDebounce:function(){},triggerSmooth:function(){}};n.init()},u3Nf:function(e,t){var n={bannedVisitor:[],enter:function(){var e=document.querySelectorAll(".js-chocolate-factory");if(isset(e))for(var t=e.length,r=0;r<t;r++){var i=e[r];n._flashTicket(i)}},_flashTicket:function(e){var t=e.querySelector(".js-golden-ticket");isset(t)?t.addEventListener("click",function(){n.enjoyTheTour(e)}):console.log("To bad, no golden tickets has been found.")},enjoyTheTour:function(e){var t=e.querySelectorAll("input, textarea");if(isset(t)){for(var r={},i=0,o=t.length,a=0;a<o;a++){var s=t[a],l=s.getAttribute("name");n._isVisitorBanned(l)||(r[l]=n._getArrangement(s),i++)}if(0===i)return;n._finishTour(r,e)}else console.log("To bad, no members to visit this factory")},_isVisitorBanned:function(e){return-1!==n.bannedVisitor.indexOf(e)},_getArrangement:function(e){e.nodeName;return e.value},_finishTour:function(e,t){e=n._addWillieWonka(e);try{Ajax.post("/contact/process",e,function(e){var r=JSON.parse(e.response);switch(e.status){case 200:return n._thanksForVisiting(r.redirectUrl);case 422:return n._giveFeedbackToMembers(r.errors,t)}return n._unknownGapInFactory(t)})}catch(e){return n._unknownGapInFactory(t)}},_addWillieWonka:function(e){return e._willie="wonka",e},_giveFeedbackToMembers:function(e,t){var r=t.querySelector(".js-error-area");isset(r)&&(r.innerHTML=""),n._clearPreviousMarkedJackets(t),Object.keys(e).forEach(function(i){var o=null,a=null;if("_honey"!==i&&"_secretCode"!==i){var s=t.querySelector("#"+i);o=n._grabVisitorJacket(s),isset(o)&&(a=o.querySelector(".js-form-element-error")),isset(a)&&(a.innerHTML="")}for(var l=e[i],c=l.length,u=0;u<c;u++){var d=l[u];if("_honey"!==i&&"_secretCode"!==i&&(isset(o)&&o.classList.add("has-error"),isset(a))){var f=a.innerHTML;f+="<span>"+d+"</span>",a.innerHTML=f}if(isset(r)){var g=r.innerHTML;g+="<li>"+d+"</li>",r.innerHTML=g}}})},_clearPreviousMarkedJackets:function(e){for(var t=e.querySelectorAll(".has-error"),n=t.length,r=0;r<n;r++)t[r].classList.remove("has-error")},_grabVisitorJacket:function(e){if(!isset(e))return null;currentLayer=e,safetyBreak=0;do{if(safetyBreak++,currentLayer=currentLayer.parentNode,currentLayer.classList.contains("js-form-element"))return currentLayer}while("BODY"!==currentLayer.tagName&&safetyBreak<=10);return null},_thanksForVisiting:function(e){window.location=e},_unknownGapInFactory:function(e){console.log(e),console.log("ChocolateFactory: Unkown Error")}};n.enter()}});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvbWFwc0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2dsb2JhbC9zY3JvbGxIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL3F1ZXN0aW9uRm9ybUhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbGlicmFyeS9oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9nbG9iYWwvcmVzaXplSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9jaG9jb2xhdGVGYWN0b3J5LmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiTWFwc0hhbmRsZXIiLCJtYXAiLCJsb2NhdGlvbiIsImxhdCIsImxuZyIsInN0eWxpbmciLCJpbml0IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlzc2V0IiwiaGFzQXR0cmlidXRlIiwicGFyc2VGbG9hdCIsImdldEF0dHJpYnV0ZSIsInNldEN1c3RvbVN0eWxpbmciLCJnb29nbGUiLCJtYXBzIiwiZ2V0U2NyaXB0IiwiZHJhd01hcCIsIk1hcCIsInpvb20iLCJjZW50ZXIiLCJkaXNhYmxlRGVmYXVsdFVJIiwic3R5bGVzIiwiTWFya2VyIiwicG9zaXRpb24iLCJpY29uIiwiZmVhdHVyZVR5cGUiLCJlbGVtZW50VHlwZSIsInN0eWxlcnMiLCJ2aXNpYmlsaXR5IiwibGlnaHRuZXNzIiwiY29sb3IiLCJTY3JvbGxIYW5kbGVyIiwidGltZSIsIkRhdGUiLCJub3ciLCJ0aW1lb3V0Iiwid2FpdFRocm90dGxlIiwid2FpdERlYm91bmNlIiwibGFzdFNjcm9sbFRvcFBvc2l0aW9uIiwic2Nyb2xsRGlyZWN0aW9uRG93biIsInNjcm9sbERpcmVjdGlvblVwIiwidHJpZ2dlck9uSW5pdCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0cmlnZ2VyVGhyb3R0bGUiLCJ0cmlnZ2VyU21vb3RoIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInRyaWdnZXJEZWJvdW5jZSIsInRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbiIsImRldGVjdFNjcm9sbERpcmVjdGlvbiIsImRldGVjdElmRWxlbWVudElzUGFydGx5SW5WaWV3cG9ydCIsImVsIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpbmRvd0hlaWdodCIsImlubmVySGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50SGVpZ2h0Iiwid2luZG93V2lkdGgiLCJpbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJ2ZXJ0aWNhbEluVmlldyIsInRvcCIsImhlaWdodCIsImhvcml6b250YWxJblZpZXciLCJsZWZ0Iiwid2lkdGgiLCJkZXRlY3RJZkVsZW1lbnRJc0Z1bGx5SW5WaWV3cG9ydCIsImJvdHRvbSIsInNjcm9sbFRvcFBvc2l0aW9uIiwicGFnZVlPZmZzZXQiLCJzY3JvbGxUb3AiLCJlbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtZW50c0xlbmd0aCIsImxlbmd0aCIsImUiLCJlbGVtZW50IiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiUXVlc3Rpb25Gb3JtSGFuZGxlciIsImZvcm0iLCJjaGFpbkRpc2FibGVkIiwicXVlcnlTZWxlY3RvciIsImluaXRDaGFpbkRpc2FibGVkTGlzdGVuZXIiLCJwZXJzb25zT3B0aW9uIiwiaW5pdFBlcnNvbkxpc3RlbmVyIiwiaGFzQWxsZXJnaWVzT3B0aW9uIiwiaW5pdEFsbGVyZ2llc0xpc3RlbmVyIiwibm9kZSIsInN0YXlTbGVlcGluZyIsImFsbGVyZ2llcyIsImNoZWNrSW5wdXQiLCJhZGQiLCJjaGVja2VkIiwiYWxsZXJnaWVzUm93IiwicGVyc29uc1JvdyIsInJlcXVpcmUiLCJvYmoiLCJFYXNpbmdGdW5jdGlvbnMiLCJsaW5lYXIiLCJlYXNlSW5RdWFkIiwiZWFzZU91dFF1YWQiLCJlYXNlSW5PdXRRdWFkIiwiZWFzZUluQ3ViaWMiLCJlYXNlT3V0Q3ViaWMiLCJlYXNlSW5PdXRDdWJpYyIsImVhc2VJblF1YXJ0IiwiZWFzZU91dFF1YXJ0IiwiZWFzZUluT3V0UXVhcnQiLCJlYXNlSW5RdWludCIsImVhc2VPdXRRdWludCIsImVhc2VJbk91dFF1aW50Iiwic291cmNlIiwiY2FsbGJhY2siLCJzY3JpcHQiLCJjcmVhdGVFbGVtZW50IiwiYXN5bmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwcmlvciIsIm9ubG9hZCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIl8iLCJpc0Fib3J0IiwicmVhZHlTdGF0ZSIsInRlc3QiLCJ1bmRlZmluZWQiLCJzcmMiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwiQ29va2llIiwic2V0IiwiZGF5cyIsImRvbWFpbiIsImRvbWFpblBhcnRzIiwiZGF0ZSIsImV4cGlyZXMiLCJob3N0Iiwic2V0VGltZSIsImdldFRpbWUiLCJ0b0dNVFN0cmluZyIsInNwbGl0IiwiY29va2llIiwic2hpZnQiLCJqb2luIiwibmFtZUVRIiwiY2EiLCJjaGFyQXQiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwiZXJhc2UiLCJudW1iZXJfZm9ybWF0IiwibnVtYmVyIiwiZGVjaW1hbHMiLCJkZWNfcG9pbnQiLCJ0aG91c2FuZHNfc2VwIiwicmVwbGFjZSIsImlzRmluaXRlIiwicHJlYyIsIk1hdGgiLCJhYnMiLCJzZXAiLCJkZWMiLCJrIiwicG93Iiwicm91bmQiLCJ0b0ZpeGVkRml4IiwiQXJyYXkiLCJSZXNpemVIYW5kbGVyIiwib25Nb2JpbGUiLCJib2R5IiwiQ2hvY29sYXRlRmFjdG9yeSIsImJhbm5lZFZpc2l0b3IiLCJlbnRlciIsImNob2NvbGF0ZUZhY3RvcmllcyIsImFtb3VudE9mQ2hvY29sYXRlRmFjdG9yaWVzIiwiQ2hvY29sYXRlQmFyIiwiX2ZsYXNoVGlja2V0IiwiY2hvY29sYXRlQmFyIiwiZ29sZGVuVGlja2V0IiwiZW5qb3lUaGVUb3VyIiwiY29uc29sZSIsImxvZyIsImNob2NvbGF0ZUZhY3RvcnkiLCJ0b3VyR3JvdXAiLCJvb21wYUxvb21wYXMiLCJhbW91bnRPZk9vbXBhTG9vbXBhcyIsInRvdXJHcm91cFNpemUiLCJ2aXNpdG9yIiwidmlzaXRvck5hbWUiLCJfaXNWaXNpdG9yQmFubmVkIiwiX2dldEFycmFuZ2VtZW50IiwiX2ZpbmlzaFRvdXIiLCJub2RlTmFtZSIsImdyb3VwIiwiX2FkZFdpbGxpZVdvbmthIiwiQWpheCIsInBvc3QiLCJIdHRwUmVxdWVzdCIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwic3RhdHVzIiwiX3RoYW5rc0ZvclZpc2l0aW5nIiwicmVkaXJlY3RVcmwiLCJfZ2l2ZUZlZWRiYWNrVG9NZW1iZXJzIiwiZXJyb3JzIiwiX3Vua25vd25HYXBJbkZhY3RvcnkiLCJfd2lsbGllIiwiZmVlZGJhY2tBcmVhIiwiaW5uZXJIVE1MIiwiX2NsZWFyUHJldmlvdXNNYXJrZWRKYWNrZXRzIiwia2V5cyIsImZvckVhY2giLCJqYWNrZXQiLCJ2aXNpdG9yRmVlZGJhY2tBcmVhIiwidmlzaXRvck5vZGUiLCJfZ3JhYlZpc2l0b3JKYWNrZXQiLCJ2aXNpdG9yRmVlZGJhY2siLCJ2aXNpdG9yRmVlZGJhY2tBbW91bnQiLCJ2aXNpdG9yRmVlZGJhY2tMaW5lIiwiY3VycmVudEZlZWRiYWNrQXJlYSIsIm1hcmtlZEphY2tldHMiLCJtYXJrZWRKYWNrZXRzQW1vdW50IiwiY3VycmVudExheWVyIiwic2FmZXR5QnJlYWsiLCJjb250YWlucyIsInRhZ05hbWUiLCJuZXh0U3RvcCJdLCJtYXBwaW5ncyI6ImFBQ0EsSUFBQUEsRUFBQSxHQUdBLFNBQUFDLEVBQUFDLEdBR0EsR0FBQUYsRUFBQUUsR0FDQSxPQUFBRixFQUFBRSxHQUFBQyxRQUdBLElBQUFDLEVBQUFKLEVBQUFFLEdBQUEsQ0FDQUcsRUFBQUgsRUFDQUksR0FBQSxFQUNBSCxRQUFBLElBVUEsT0FOQUksRUFBQUwsR0FBQU0sS0FBQUosRUFBQUQsUUFBQUMsSUFBQUQsUUFBQUYsR0FHQUcsRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQUtBRixFQUFBUSxFQUFBRixFQUdBTixFQUFBUyxFQUFBVixFQUdBQyxFQUFBVSxFQUFBLFNBQUFSLEVBQUFTLEVBQUFDLEdBQ0FaLEVBQUFhLEVBQUFYLEVBQUFTLElBQ0FHLE9BQUFDLGVBQUFiLEVBQUFTLEVBQUEsQ0FBMENLLFlBQUEsRUFBQUMsSUFBQUwsS0FLMUNaLEVBQUFrQixFQUFBLFNBQUFoQixHQUNBLG9CQUFBaUIsZUFBQUMsYUFDQU4sT0FBQUMsZUFBQWIsRUFBQWlCLE9BQUFDLFlBQUEsQ0FBd0RDLE1BQUEsV0FFeERQLE9BQUFDLGVBQUFiLEVBQUEsY0FBaURtQixPQUFBLEtBUWpEckIsRUFBQXNCLEVBQUEsU0FBQUQsRUFBQUUsR0FFQSxHQURBLEVBQUFBLElBQUFGLEVBQUFyQixFQUFBcUIsSUFDQSxFQUFBRSxFQUFBLE9BQUFGLEVBQ0EsS0FBQUUsR0FBQSxpQkFBQUYsUUFBQUcsV0FBQSxPQUFBSCxFQUNBLElBQUFJLEVBQUFYLE9BQUFZLE9BQUEsTUFHQSxHQUZBMUIsRUFBQWtCLEVBQUFPLEdBQ0FYLE9BQUFDLGVBQUFVLEVBQUEsV0FBeUNULFlB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ciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIEdvb2dsZSBNYXBzIGhhbmRsZXJcbiAgICAtIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L2FkZGluZy1hLWdvb2dsZS1tYXBcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBNYXBzSGFuZGxlciA9IHtcblxuICAgIG1hcDogJycsXG4gICAga2V5OiAnQUl6YVN5Q2xMQ0ZiNHFvMnRpMmV3Sm8xeFVNUjBieDJrMXUzNGMwJyxcbiAgICBsb2NhdGlvbjoge2xhdDogNTEuNjYzMzQzMywgbG5nOiA1LjUxMjE5NTZ9LFxuICAgIHN0eWxpbmc6ICcnLFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBHZXQgbWFwIGJ5IGlkXG4gICAgICAgIE1hcHNIYW5kbGVyLm1hcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXAnKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBhIG1hcCBpcyBkZWZpbmVkXG4gICAgICAgIGlmIChpc3NldChNYXBzSGFuZGxlci5tYXApKSB7XG5cbiAgICAgICAgICAgIC8vY3JlYXRlIGhlaWdodCBvZiBlbGVtZW50XG4gICAgICAgICAgICAvLyB2YXIgbWFwV2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShNYXBzSGFuZGxlci5tYXApLndpZHRoO1xuICAgICAgICAgICAgLy8gbWFwV2lkdGggPSBwYXJzZUludChtYXBXaWR0aC5zbGljZSgwLCAtMikpO1xuICAgICAgICAgICAgLy8gbWFwSGVpZ2h0ID0gbWFwV2lkdGggLyAyO1xuICAgICAgICAgICAgLy8gaWYgKG1hcEhlaWdodCA8IDM1MCkgbWFwSGVpZ2h0ID0gNDUwO1xuICAgICAgICAgICAgLy8gaWYgKG1hcEhlaWdodCA+IDQ1MCkgbWFwSGVpZ2h0ID0gNjAwO1xuICAgICAgICAgICAgLy8gTWFwc0hhbmRsZXIubWFwLnN0eWxlLmhlaWdodCA9IG1hcEhlaWdodCArICdweCc7XG5cbiAgICAgICAgICAgIGlmIChNYXBzSGFuZGxlci5tYXAuaGFzQXR0cmlidXRlKCdkYXRhLWdvb2dsZS1sYXQnKSkgTWFwc0hhbmRsZXIubG9jYXRpb24ubGF0ID0gcGFyc2VGbG9hdChNYXBzSGFuZGxlci5tYXAuZ2V0QXR0cmlidXRlKCdkYXRhLWdvb2dsZS1sYXQnKSk7XG4gICAgICAgICAgICBpZiAoTWFwc0hhbmRsZXIubWFwLmhhc0F0dHJpYnV0ZSgnZGF0YS1nb29nbGUtbG5nJykpIE1hcHNIYW5kbGVyLmxvY2F0aW9uLmxuZyA9IHBhcnNlRmxvYXQoTWFwc0hhbmRsZXIubWFwLmdldEF0dHJpYnV0ZSgnZGF0YS1nb29nbGUtbG5nJykpO1xuXG4gICAgICAgICAgICBNYXBzSGFuZGxlci5zZXRDdXN0b21TdHlsaW5nKCk7XG5cbiAgICAgICAgICAgIC8vIFNlZSBpZiBnb29nbGUgdmFyaWFibGUgZXhpc3RzXG4gICAgICAgICAgICBpZiAodHlwZW9mIChnb29nbGUpID09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiAoZ29vZ2xlLm1hcHMpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9hZCBleHRlcm5hbCBzY3JpcHRcbiAgICAgICAgICAgICAgICBnZXRTY3JpcHQoJ2h0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9JyArIE1hcHNIYW5kbGVyLmtleSwgTWFwc0hhbmRsZXIuZHJhd01hcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE1hcHNIYW5kbGVyLmRyYXdNYXAoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZHJhd01hcDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDcmVhdGUgYSBtYXBcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChNYXBzSGFuZGxlci5tYXAsIHtcbiAgICAgICAgICAgIHpvb206IDEzLFxuICAgICAgICAgICAgY2VudGVyOiBNYXBzSGFuZGxlci5sb2NhdGlvbixcbiAgICAgICAgICAgIGRpc2FibGVEZWZhdWx0VUk6IHRydWUsXG4gICAgICAgICAgICBzdHlsZXM6IE1hcHNIYW5kbGVyLnN0eWxpbmdcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBhIG1hcmtlclxuICAgICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBNYXBzSGFuZGxlci5sb2NhdGlvbixcbiAgICAgICAgICAgIG1hcDogbWFwLFxuICAgICAgICAgICAgaWNvbjogJy9pbWcvZ29vZ2xlTWFwc01hcmtlci5zdmcnXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzZXRDdXN0b21TdHlsaW5nOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgTWFwc0hhbmRsZXIuc3R5bGluZyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwiYWRtaW5pc3RyYXRpdmVcIixcbiAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiYWxsXCIsXG4gICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IFwib25cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAzM1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwibGFuZHNjYXBlXCIsXG4gICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImFsbFwiLFxuICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZjJlNWQ0XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInBvaS5wYXJrXCIsXG4gICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNjNWRhYzZcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicG9pLnBhcmtcIixcbiAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwibGFiZWxzXCIsXG4gICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IFwib25cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAyMFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZFwiLFxuICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJhbGxcIixcbiAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAyMFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5oaWdod2F5XCIsXG4gICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNjNWM2YzZcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5hcnRlcmlhbFwiLFxuICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZTRkN2M2XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWQubG9jYWxcIixcbiAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZiZmFmN1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJ3YXRlclwiLFxuICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJhbGxcIixcbiAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInZpc2liaWxpdHlcIjogXCJvblwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjYWNiY2M5XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG59O1xuXG5NYXBzSGFuZGxlci5pbml0KCk7IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNjcm9sbCBoYW5kbGVyXG4gICAtIEhhbmRsZXIgdGhlIG9iamVjdHMgd2hpY2ggYXJlIGJpbmQgb24gc2Nyb2xsIGV2ZW50cyBvciB2aXNpYmxlIGluIHZpZXdwb3J0XG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgU2Nyb2xsSGFuZGxlciA9IHtcblxuICAgIC8vIFZhcmlhYmxlcyBmb3IgZGVib3VuY2UgYW5kIHRocm90dGxlIGVmZmVjdHNcbiAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgd2FpdFRocm90dGxlOiAxMDAwLFxuICAgIHdhaXREZWJvdW5jZTogMzAwLFxuXG4gICAgLy8gVmFyaWFibGVzIGZvciBzY3JvbGwgZGlyZWN0aW9uXG4gICAgbGFzdFNjcm9sbFRvcFBvc2l0aW9uOiAwLFxuICAgIHNjcm9sbERpcmVjdGlvbkRvd246IHRydWUsXG4gICAgc2Nyb2xsRGlyZWN0aW9uVXA6IGZhbHNlLFxuXG4gICAgLy9Jbml0aWFsaXNhdGlvblxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBUcmlnZ2VyIHN0YXJ0IG9uIHN0YXJ0IHVwXG4gICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlck9uSW5pdCgpO1xuXG4gICAgICAgIC8vIFRocm90dGxlIHNjcm9sbFxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKChTY3JvbGxIYW5kbGVyLnRpbWUgKyBTY3JvbGxIYW5kbGVyLndhaXRUaHJvdHRsZSAtIERhdGUubm93KCkpIDwgMCkge1xuICAgICAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlclRocm90dGxlKCk7XG4gICAgICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci50aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU21vb3RoIHNjcm9sbFxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci50cmlnZ2VyU21vb3RoKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERlYm91bmNlIHNjcm9sbFxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYoaXNzZXQoU2Nyb2xsSGFuZGxlci50aW1lb3V0KSkgY2xlYXJUaW1lb3V0KFNjcm9sbEhhbmRsZXIudGltZW91dCk7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KFNjcm9sbEhhbmRsZXIudHJpZ2dlckRlYm91bmNlLCBTY3JvbGxIYW5kbGVyLndhaXREZWJvdW5jZSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIG9uIHN0YXJ0IHVwXG4gICAgdHJpZ2dlck9uSW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBTY3JvbGxIYW5kbGVyLnRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbigpO1xuXG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgc2Nyb2xsIGZ1bmN0aW9ucyB3aXRoIHRocm90dGxlIChwcmVmZXJyZWQpXG4gICAgdHJpZ2dlclRocm90dGxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdUaHJvdHRsZWQgc2Nyb2xsJyk7XG4gICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlckVsZW1lbnRJblZpZXdwb3J0QW5pbWF0aW9uKCk7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgc2Nyb2xsIG9uIGRlYm91bmNlXG4gICAgdHJpZ2dlckRlYm91bmNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdEZWJvdW5jZSBzY3JvbGwnKTtcbiAgICB9LFxuXG4gICAgLy8gVHJpZ2dlciBzY3JvbGwgb24gdGhlIGZsaWdodFxuICAgIHRyaWdnZXJTbW9vdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1Ntb290aCBzY3JvbGwnKTtcbiAgICAgICAgU2Nyb2xsSGFuZGxlci5kZXRlY3RTY3JvbGxEaXJlY3Rpb24oKTtcblxuICAgIH0sXG5cbiAgICAvLyBEZXRlY3QgaWYgcGFydCBvZiBhIGdpdmVuIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnRcbiAgICAvLyBFbCBtdXN0IGJlIGEgbm9kZSBlbGVtZW50XG4gICAgZGV0ZWN0SWZFbGVtZW50SXNQYXJ0bHlJblZpZXdwb3J0OiBmdW5jdGlvbihlbClcbiAgICB7XG4gICAgICAgIGlmKGlzc2V0KGVsKSl7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIC8vIERPTVJlY3QgeyB4OiA4LCB5OiA4LCB3aWR0aDogMTAwLCBoZWlnaHQ6IDEwMCwgdG9wOiA4LCByaWdodDogMTA4LCBib3R0b206IDEwOCwgbGVmdDogOCB9XG4gICAgICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpO1xuICAgICAgICAgICAgY29uc3Qgd2luZG93V2lkdGggPSAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKTtcblxuICAgICAgICAgICAgY29uc3QgdmVydGljYWxJblZpZXcgPSAocmVjdC50b3AgPD0gKHdpbmRvd0hlaWdodCkpICYmICgocmVjdC50b3AgKyByZWN0LmhlaWdodCkgPj0gMCk7XG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsSW5WaWV3ID0gKHJlY3QubGVmdCA8PSB3aW5kb3dXaWR0aCkgJiYgKChyZWN0LmxlZnQgKyByZWN0LndpZHRoKSA+PSAwKTtcblxuICAgICAgICAgICAgcmV0dXJuICh2ZXJ0aWNhbEluVmlldyAmJiBob3Jpem9udGFsSW5WaWV3KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBEZXRlY3QgaWYgYSBnaXZlbiBlbGVtZW50IGlzIGZ1bGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0XG4gICAgLy8gRWwgbXVzdCBiZSBhIG5vZGUgZWxlbWVudFxuICAgIGRldGVjdElmRWxlbWVudElzRnVsbHlJblZpZXdwb3J0OiBmdW5jdGlvbihlbClcbiAgICB7XG4gICAgICAgIGlmKGlzc2V0KGVsKSl7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tIDw9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXRlY3RTY3JvbGxEaXJlY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wUG9zaXRpb24gPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDsgLy8gQ3JlZGl0czogXCJodHRwczovL2dpdGh1Yi5jb20vcWVyZW15L3NvL2Jsb2IvbWFzdGVyL3NvLmRvbS5qcyNMNDI2XCJcbiAgICAgICAgaWYgKHNjcm9sbFRvcFBvc2l0aW9uID49IFNjcm9sbEhhbmRsZXIubGFzdFNjcm9sbFRvcFBvc2l0aW9uKXtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIuc2Nyb2xsRGlyZWN0aW9uRG93biA9IHRydWU7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnNjcm9sbERpcmVjdGlvblVwID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnNjcm9sbERpcmVjdGlvbkRvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIuc2Nyb2xsRGlyZWN0aW9uVXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIFNjcm9sbEhhbmRsZXIubGFzdFNjcm9sbFRvcFBvc2l0aW9uID0gc2Nyb2xsVG9wUG9zaXRpb247XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgYW5pbWF0aW9uIG9uIGVsZW1lbnRzIHRoYXQgaGF2ZSAnZWxlbWVudC1pbi12aWV3cG9ydCcgYW5kIHRoYXQgYXJlIGluIHRoZSB2aWV3cG9ydFxuICAgIC8vIFRoZXNlIGFuaW1hdGlvbiBjYW4gb25seSBiZSB0cmlnZ2VyZWQgb25jZSwgaWYgeW91IHdhbnQgbW9yZSB0aGVuIHRoYXQgeW91IHNob3VsZCB3cml0ZSBhbiBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgdGhpc1xuICAgIHRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbGVtZW50LWluLXZpZXdwb3J0Jyk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzTGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgZSA9IDA7IGUgPCBlbGVtZW50c0xlbmd0aDsgZSsrKXtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2VdO1xuICAgICAgICAgICAgaWYoU2Nyb2xsSGFuZGxlci5kZXRlY3RJZkVsZW1lbnRJc1BhcnRseUluVmlld3BvcnQoZWxlbWVudCkpe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1pbi12aWV3cG9ydCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENVU1RPTSBTQ1JPTEwgSEFORExFUlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxufTtcblxuU2Nyb2xsSGFuZGxlci5pbml0KCk7IiwiY29uc3QgUXVlc3Rpb25Gb3JtSGFuZGxlciA9IHtcblxuICAgIGZvcm06IG51bGwsXG5cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy8gR2V0IG1hcCBieSBpZFxuICAgICAgICBRdWVzdGlvbkZvcm1IYW5kbGVyLmZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXVlc3Rpb25Gb3JtJyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYSBtYXAgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoaXNzZXQoUXVlc3Rpb25Gb3JtSGFuZGxlci5mb3JtKSkge1xuXG4gICAgICAgICAgICBjb25zdCBjaGFpbkRpc2FibGVkID0gUXVlc3Rpb25Gb3JtSGFuZGxlci5mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5qcy10b2dnbGUtY2hhaW4tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGlmKGlzc2V0KGNoYWluRGlzYWJsZWQpKSBRdWVzdGlvbkZvcm1IYW5kbGVyLmluaXRDaGFpbkRpc2FibGVkTGlzdGVuZXIoY2hhaW5EaXNhYmxlZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBlcnNvbnNPcHRpb24gPSBRdWVzdGlvbkZvcm1IYW5kbGVyLmZvcm0ucXVlcnlTZWxlY3RvcignLmpzLXRvZ2dsZS1wcmVzZW50LXBlcnNvbnMnKTtcbiAgICAgICAgICAgIGlmKGlzc2V0KHBlcnNvbnNPcHRpb24pKSBRdWVzdGlvbkZvcm1IYW5kbGVyLmluaXRQZXJzb25MaXN0ZW5lcihwZXJzb25zT3B0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzQWxsZXJnaWVzT3B0aW9uID0gUXVlc3Rpb25Gb3JtSGFuZGxlci5mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5qcy10b2dnbGUtYWxsZXJnaWVzJyk7XG4gICAgICAgICAgICBpZihpc3NldChoYXNBbGxlcmdpZXNPcHRpb24pKSBRdWVzdGlvbkZvcm1IYW5kbGVyLmluaXRBbGxlcmdpZXNMaXN0ZW5lcihoYXNBbGxlcmdpZXNPcHRpb24pO1xuXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5pdENoYWluRGlzYWJsZWRMaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUpIHtcblxuICAgICAgICBjb25zdCBzdGF5U2xlZXBpbmcgPSBRdWVzdGlvbkZvcm1IYW5kbGVyLmZvcm0ucXVlcnlTZWxlY3RvcignLnN0YXlfc2xlZXBpbmcnKTtcbiAgICAgICAgY29uc3QgYWxsZXJnaWVzID0gUXVlc3Rpb25Gb3JtSGFuZGxlci5mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5hbGxlcmdpZXMnKTtcblxuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tJbnB1dCA9IG5vZGUucXVlcnlTZWxlY3RvcignaW5wdXQ6Y2hlY2tlZCcpO1xuICAgICAgICAgICAgaWYoaXNzZXQoY2hlY2tJbnB1dCkpe1xuXG4gICAgICAgICAgICAgICAgbGV0IHByZXNlbnQgPSBjaGVja0lucHV0LnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYocHJlc2VudCA9PSAwKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoc3RheVNsZWVwaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RheVNsZWVwaW5nLmNsYXNzTGlzdC5hZGQoJ2lzLWRpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF5U2xlZXBpbmcucXVlcnlTZWxlY3RvcignaW5wdXRbdmFsdWU9XCIwXCJdJykuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoYWxsZXJnaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsZXJnaWVzLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3ZhbHVlPVwiMFwiXScpLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsZXJnaWVzLmNsYXNzTGlzdC5hZGQoJ2lzLWRpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxlcmdpZXNSb3cgPSBRdWVzdGlvbkZvcm1IYW5kbGVyLmZvcm0ucXVlcnlTZWxlY3RvcignLmMtZm9ybS1lbGVtZW50Lmhhc19hbGxlcmdpZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KGFsbGVyZ2llc1JvdykpIGFsbGVyZ2llc1Jvdy5jbGFzc0xpc3QuYWRkKCdpcy1oaWRkZW4nKTtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KHN0YXlTbGVlcGluZykpIHN0YXlTbGVlcGluZy5jbGFzc0xpc3QucmVtb3ZlKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICBpZihpc3NldChhbGxlcmdpZXMpKSBhbGxlcmdpZXMuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGluaXRQZXJzb25MaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUpIHtcblxuICAgICAgICBjb25zdCBwZXJzb25zUm93ID0gUXVlc3Rpb25Gb3JtSGFuZGxlci5mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5jLWZvcm0tZWxlbWVudC5wcmVzZW50X3BlcnNvbnMnKTtcbiAgICAgICAgaWYoIWlzc2V0KHBlcnNvbnNSb3cpKSByZXR1cm47XG5cbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrSW5wdXQgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0OmNoZWNrZWQnKTtcbiAgICAgICAgICAgIGlmKGlzc2V0KGNoZWNrSW5wdXQpKXtcblxuICAgICAgICAgICAgICAgIGxldCBwcmVzZW50ID0gY2hlY2tJbnB1dC52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmKHByZXNlbnQgPT0gMSkgcGVyc29uc1Jvdy5jbGFzc0xpc3QucmVtb3ZlKCdpcy1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICBlbHNlIHBlcnNvbnNSb3cuY2xhc3NMaXN0LmFkZCgnaXMtaGlkZGVuJyk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGluaXRBbGxlcmdpZXNMaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgY29uc3QgYWxsZXJnaWVzUm93ID0gUXVlc3Rpb25Gb3JtSGFuZGxlci5mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5jLWZvcm0tZWxlbWVudC5oYXNfYWxsZXJnaWVzJyk7XG4gICAgICAgIGlmKCFpc3NldChhbGxlcmdpZXNSb3cpKSByZXR1cm47XG5cbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrSW5wdXQgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0OmNoZWNrZWQnKTtcbiAgICAgICAgICAgIGlmKGlzc2V0KGNoZWNrSW5wdXQpKXtcblxuICAgICAgICAgICAgICAgIGxldCBwcmVzZW50ID0gY2hlY2tJbnB1dC52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmKHByZXNlbnQgPT0gMSkgYWxsZXJnaWVzUm93LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIGVsc2UgYWxsZXJnaWVzUm93LmNsYXNzTGlzdC5hZGQoJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5RdWVzdGlvbkZvcm1IYW5kbGVyLmluaXQoKTsiLCIvKipcbiAqIEphdmFTY3JpcHQgZGVwZW5kZW5jaWVzXG4gKlxuICovXG5cbnJlcXVpcmUoJy4vbGlicmFyeS9oZWxwZXJzJyk7XG5cblxuLyoqXG4gKiBDcm9zcyBwYWdlIGZ1bmN0aW9uYWxpdHlcbiAqL1xuLy8gcmVxdWlyZSgnLi9jb21wb25lbnRzL2Jyb3dzZXJIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2dsb2JhbC9yZXNpemVIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2dsb2JhbC9zY3JvbGxIYW5kbGVyJyk7XG4vLyByZXF1aXJlKCcuL2NvbXBvbmVudHMvc2Nyb2xsVG9IYW5kbGVyJyk7XG5cbi8qKlxuICogQ29tcGVuZW50IHNwZWNpZmljXG4gKlxuICovXG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvY2hvY29sYXRlRmFjdG9yeScpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL21hcHNIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvcXVlc3Rpb25Gb3JtSGFuZGxlcicpO1xuXG5cblxuLy8gVnVlIGV4YW1wbGVcbi8vIFZ1ZS5jb21wb25lbnQoJ2V4YW1wbGUtY29tcG9uZW50JywgcmVxdWlyZSgnLi9jb21wb25lbnRzL0V4YW1wbGVDb21wb25lbnQudnVlJykpO1xuLy9cbi8vIGNvbnN0IGFwcCA9IG5ldyBWdWUoe1xuLy8gICAgIGVsOiAnI2FwcCdcbi8vIH0pOyIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgSGVscGVyIGZ1bmN0aW9uc1xuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qXG4gKiBTaW1wbGUgaXNzZXQgbWV0aG9kIGZvciB0aGlzIGRvZXMgbm90IGV4aXN0IGluIGphdmFzY3JpcHRcbiAqL1xud2luZG93Lmlzc2V0ID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqICE9PSAndW5kZWZpbmVkJyAmJiBvYmogIT09IG51bGw7XG59O1xuXG4vKlxuICogRWFzaW5nIEZ1bmN0aW9ucyAtIGluc3BpcmVkIGZyb20gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXG4gKiBvbmx5IGNvbnNpZGVyaW5nIHRoZSB0IHZhbHVlIGZvciB0aGUgcmFuZ2UgWzAsIDFdID0+IFswLCAxXVxuICovXG53aW5kb3cuRWFzaW5nRnVuY3Rpb25zID0ge1xuICAgIC8vIG5vIGVhc2luZywgbm8gYWNjZWxlcmF0aW9uXG4gICAgbGluZWFyOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdFxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW5nIGZyb20gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VJblF1YWQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpXG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpb24gdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRpb25cbiAgICBlYXNlSW5PdXRRdWFkOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gMiAqIHQgKiB0IDogLTEgKyAoNCAtIDIgKiB0KSAqIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlSW5DdWJpYzogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0Q3ViaWM6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiAoLS10KSAqIHQgKiB0ICsgMVxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW9uIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0aW9uXG4gICAgZWFzZUluT3V0Q3ViaWM6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0IDwgLjUgPyA0ICogdCAqIHQgKiB0IDogKHQgLSAxKSAqICgyICogdCAtIDIpICogKDIgKiB0IC0gMikgKyAxXG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluUXVhcnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBkZWNlbGVyYXRpbmcgdG8gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VPdXRRdWFydDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIDEgLSAoLS10KSAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW9uIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0aW9uXG4gICAgZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0IDwgLjUgPyA4ICogdCAqIHQgKiB0ICogdCA6IDEgLSA4ICogKC0tdCkgKiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlSW5RdWludDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBkZWNlbGVyYXRpbmcgdG8gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VPdXRRdWludDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIDEgKyAoLS10KSAqIHQgKiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dFF1aW50OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gMTYgKiB0ICogdCAqIHQgKiB0ICogdCA6IDEgKyAxNiAqICgtLXQpICogdCAqIHQgKiB0ICogdFxuICAgIH1cbn07XG5cbi8qXG4gKiBWYW5pbGxhIHZlcnNpb24gb2YgdGhlICQuZ2V0U2NyaXB0XG4gKi9cbndpbmRvdy5nZXRTY3JpcHQgPSBmdW5jdGlvbiAoc291cmNlLCBjYWxsYmFjaykge1xuICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuYXN5bmMgPSAxO1xuXG4gICAgY29uc3Qgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgICBsZXQgcHJpb3IgPSBzY3JpcHRzW3NjcmlwdHMubGVuZ3RoIC0gMV07XG5cbiAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChfLCBpc0Fib3J0KSB7XG4gICAgICAgIGlmIChpc0Fib3J0IHx8ICFzY3JpcHQucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KHNjcmlwdC5yZWFkeVN0YXRlKSkge1xuICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgc2NyaXB0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBpZiAoIWlzQWJvcnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgc2NyaXB0LnNyYyA9IHNvdXJjZTtcbiAgICBwcmlvci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHQsIHByaW9yKTtcbn07XG5cbi8qXG4gKiBDb29raWUgaGVscGVyIGNsYXNzXG4gKi9cbndpbmRvdy5Db29raWUgPSB7XG4gICAgc2V0OiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGRheXMpIHtcbiAgICAgICAgbGV0IGRvbWFpbiwgZG9tYWluUGFydHMsIGRhdGUsIGV4cGlyZXMsIGhvc3Q7XG5cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICBleHBpcmVzID0gXCI7IGV4cGlyZXM9XCIgKyBkYXRlLnRvR01UU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHBpcmVzID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGhvc3QgPSBsb2NhdGlvbi5ob3N0O1xuICAgICAgICBpZiAoaG9zdC5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gbm8gXCIuXCIgaW4gYSBkb21haW4gLSBpdCdzIGxvY2FsaG9zdCBvciBzb21ldGhpbmcgc2ltaWxhclxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9L1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGNvb2tpZSBvbiBhbGwgc3ViIGRvbWFpbnMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCB0cnlpbmcgdG8gc2V0IGNvb2tpZSB0byB0aGUgdG9wIGRvbWFpbi5cbiAgICAgICAgICAgIC8vIChleGFtcGxlOiBpZiB1c2VyIGlzIG9uIGZvby5jb20sIHRyeSB0byBzZXRcbiAgICAgICAgICAgIC8vICBjb29raWUgdG8gZG9tYWluIFwiLmNvbVwiKVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBjb29raWUgd2lsbCBub3QgYmUgc2V0LCBpdCBtZWFucyBcIi5jb21cIlxuICAgICAgICAgICAgLy8gaXMgYSB0b3AgbGV2ZWwgZG9tYWluIGFuZCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGNvb2tpZSB0byBcIi5mb28uY29tXCJcbiAgICAgICAgICAgIGRvbWFpblBhcnRzID0gaG9zdC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgZG9tYWluUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGRvbWFpbiA9ICcuJyArIGRvbWFpblBhcnRzLmpvaW4oJy4nKTtcblxuICAgICAgICAgICAgLy8gRm9yIGRldmVsb3BtZW50IHB1cnBvc2UsIHJlbW92ZSB0aGlzIHdoZW4gbW92aW5nIHRvIHByb2R1Y3Rpb25cbiAgICAgICAgICAgIGRvbWFpbiA9ICcua29tbWEucHJvJztcblxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9LzsgZG9tYWluPVwiICsgZG9tYWluO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb29raWUgd2FzIHN1Y2Nlc3NmdWx5IHNldCB0byB0aGUgZ2l2ZW4gZG9tYWluXG4gICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGl0IHdhcyBhIFRvcC1MZXZlbCBEb21haW4pXG4gICAgICAgICAgICBpZiAoQ29va2llLmdldChuYW1lKSA9PSBudWxsIHx8IENvb2tpZS5nZXQobmFtZSkgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBhcHBlbmQgXCIuXCIgdG8gY3VycmVudCBkb21haW5cbiAgICAgICAgICAgICAgICBkb21haW4gPSAnLicgKyBob3N0O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS87IGRvbWFpbj1cIiArIGRvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGNvbnN0IG5hbWVFUSA9IG5hbWUgKyBcIj1cIjtcbiAgICAgICAgY29uc3QgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgICAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICBlcmFzZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgQ29va2llLnNldChuYW1lLCAnJywgLTEpO1xuICAgIH1cbn07XG5cbi8qXG4gKiBKYXZhc2NyaXB0IHZlcnNpb24gb2YgdGhlIG51bWJlcl9mb3JtYXQgbWV0aG9kIG9mIFBIUFxuICovXG53aW5kb3cubnVtYmVyX2Zvcm1hdCA9IGZ1bmN0aW9uIChudW1iZXIsIGRlY2ltYWxzLCBkZWNfcG9pbnQsIHRob3VzYW5kc19zZXApIHtcbiAgICAvLyBTdHJpcCBhbGwgY2hhcmFjdGVycyBidXQgbnVtZXJpY2FsIG9uZXMuXG4gICAgbnVtYmVyID0gKG51bWJlciArICcnKS5yZXBsYWNlKC9bXjAtOStcXC1FZS5dL2csICcnKTtcbiAgICBsZXQgbiA9ICFpc0Zpbml0ZSgrbnVtYmVyKSA/IDAgOiArbnVtYmVyLFxuICAgICAgICBwcmVjID0gIWlzRmluaXRlKCtkZWNpbWFscykgPyAwIDogTWF0aC5hYnMoZGVjaW1hbHMpLFxuICAgICAgICBzZXAgPSAodHlwZW9mIHRob3VzYW5kc19zZXAgPT09ICd1bmRlZmluZWQnKSA/ICcsJyA6IHRob3VzYW5kc19zZXAsXG4gICAgICAgIGRlYyA9ICh0eXBlb2YgZGVjX3BvaW50ID09PSAndW5kZWZpbmVkJykgPyAnLicgOiBkZWNfcG9pbnQsXG4gICAgICAgIHMgPSAnJyxcbiAgICAgICAgdG9GaXhlZEZpeCA9IGZ1bmN0aW9uIChuLCBwcmVjKSB7XG4gICAgICAgICAgICB2YXIgayA9IE1hdGgucG93KDEwLCBwcmVjKTtcbiAgICAgICAgICAgIHJldHVybiAnJyArIE1hdGgucm91bmQobiAqIGspIC8gaztcbiAgICAgICAgfTtcbiAgICAvLyBGaXggZm9yIElFIHBhcnNlRmxvYXQoMC41NSkudG9GaXhlZCgwKSA9IDA7XG4gICAgcyA9IChwcmVjID8gdG9GaXhlZEZpeChuLCBwcmVjKSA6ICcnICsgTWF0aC5yb3VuZChuKSkuc3BsaXQoJy4nKTtcbiAgICBpZiAoc1swXS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNbMF0gPSBzWzBdLnJlcGxhY2UoL1xcQig/PSg/OlxcZHszfSkrKD8hXFxkKSkvZywgc2VwKTtcbiAgICB9XG4gICAgaWYgKChzWzFdIHx8ICcnKS5sZW5ndGggPCBwcmVjKSB7XG4gICAgICAgIHNbMV0gPSBzWzFdIHx8ICcnO1xuICAgICAgICBzWzFdICs9IG5ldyBBcnJheShwcmVjIC0gc1sxXS5sZW5ndGggKyAxKS5qb2luKCcwJyk7XG4gICAgfVxuICAgIHJldHVybiBzLmpvaW4oZGVjKTtcbn07IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFJlc2l6ZSBoYW5kbGVyXG4gICAtIEhhbmRsZXIgdGhlIG9iamVjdHMgd2hpY2ggYXJlIG9yIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkIG9uIHJlc2l6ZVxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IFJlc2l6ZUhhbmRsZXIgPSB7XG5cbiAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgd2FpdFRocm90dGxlOiAxMDAwLFxuICAgIHdhaXREZWJvdW5jZTogNTAwLFxuICAgIG9uTW9iaWxlOiBmYWxzZSxcblxuXG4gICAgLy9Jbml0aWFsaXNhdGlvblxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBUcmlnZ2VyIHN0YXJ0IHVwIHJlc2l6ZVxuICAgICAgICBSZXNpemVIYW5kbGVyLnRyaWdnZXJPbkluaXQoKTtcblxuICAgICAgICAvLyBUaHJvdHRsZSBSZXNpemVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICgoUmVzaXplSGFuZGxlci50aW1lICsgUmVzaXplSGFuZGxlci53YWl0VGhyb3R0bGUgLSBEYXRlLm5vdygpKSA8IDApIHtcbiAgICAgICAgICAgICAgICBSZXNpemVIYW5kbGVyLnRyaWdnZXJUaHJvdHRsZSgpO1xuICAgICAgICAgICAgICAgIFJlc2l6ZUhhbmRsZXIudGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNtb290aCBSZXNpemVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFJlc2l6ZUhhbmRsZXIudHJpZ2dlclNtb290aCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBEZWJvdW5jZSBSZXNpemVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmKGlzc2V0KFJlc2l6ZUhhbmRsZXIudGltZW91dCkpIGNsZWFyVGltZW91dChSZXNpemVIYW5kbGVyLnRpbWVvdXQpO1xuICAgICAgICAgICAgUmVzaXplSGFuZGxlci50aW1lb3V0ID0gc2V0VGltZW91dChSZXNpemVIYW5kbGVyLnRyaWdnZXJEZWJvdW5jZSwgUmVzaXplSGFuZGxlci53YWl0RGVib3VuY2UpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gVHJpZ2dlciBvbiBzdGFydCB1cFxuICAgIC8vIEFsbCBmdW5jdGlvbiBzaG91bGQgYmUgaW4gaGVyZVxuICAgIHRyaWdnZXJPbkluaXQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpZihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDwgMTAwMCl7XG4gICAgICAgICAgICBSZXNpemVIYW5kbGVyLm9uTW9iaWxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2l6ZUhhbmRsZXIucmVzaXplV2hhdERvZXNJdENvc3RBZHZhbnRhZ2VGaWd1cmUoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0luaXRpYWwgUmVzaXplJyk7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgcmVzaXplIGZ1bmN0aW9ucyB3aXRoIHRocm90dGxlIChwcmVmZXJyZWQpXG4gICAgdHJpZ2dlclRocm90dGxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdUaHJvdHRsZWQgUmVzaXplJyk7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgcmVzaXplIG9uIGRlYm91bmNlXG4gICAgdHJpZ2dlckRlYm91bmNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdEZWJvdW5jZSBSZXNpemUnKTtcbiAgICAgICAgLy8gUmVzaXplSGFuZGxlci5yZXNpemVXaGF0RG9lc0l0Q29zdEFkdmFudGFnZUZpZ3VyZSgpO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIHJlc2l6ZSBvbiB0aGUgZmxpZ2h0XG4gICAgdHJpZ2dlclNtb290aDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnU21vb3RoIFJlc2l6ZScpO1xuXG4gICAgfSxcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDVVNUT00gU0NST0xMIEhBTkRMRVJTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLy8gRXhhbXBsZSBmdW5jdGlvblxuICAgIC8vIHJlc2l6ZVdoYXREb2VzSXRDb3N0QWR2YW50YWdlRmlndXJlOiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZHZhbnRhZ2VzLW93bi1ndWlkaW5nLXJvdyBmaWd1cmUnKTtcbiAgICAvLyAgICAgaWYoaXNzZXQoZWwpKXtcbiAgICAvLyAgICAgICAgIGVsLnN0eWxlLm1heEhlaWdodCA9ICdub25lJztcbiAgICAvLyAgICAgICAgIGVsLnN0eWxlLm1heEhlaWdodCA9IGVsLm9mZnNldEhlaWdodCArICdweCc7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9LFxuXG59O1xuXG5SZXNpemVIYW5kbGVyLmluaXQoKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIHwgUHJldmVudCBCb3RzIGhhbmRsZXJcbiB8XG4gfCBXZSBuYW1lZCB0aGlzIGNob2NvbGF0ZSBmYWN0b3J5IGFuZCBiZWxvbmdpbmcgY29uZnVzaW5nIGpzIGhvb2tzXG4gfCB0byBwcmV2ZW50IHNtYXJ0IGJvdHMgZnJvbSBibG9ja2luZyB0aGVzZSB2YXJpYWJsZSBvciBmdW5jdGlvbnMuXG4gfFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IENob2NvbGF0ZUZhY3RvcnkgPSB7XG5cbiAgICBiYW5uZWRWaXNpdG9yOiBbXSxcblxuICAgIC8qKiBHZXQgYWxsIHRoZSBjaG9jb2xhdGUgZmFjdG9yeSBhbmQgc3RhcnRcbiAgICAgKiAgTG9vcGluZyB0aHJvdWdoIHRob3NlIHN0YXJ0IGZsYXNoaW5nIHRpY2tldHNcbiAgICAgKi9cbiAgICBlbnRlcjogZnVuY3Rpb24oKVxuICAgIHtcblxuICAgICAgICBjb25zdCBjaG9jb2xhdGVGYWN0b3JpZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtY2hvY29sYXRlLWZhY3RvcnknKTtcblxuICAgICAgICBpZihpc3NldChjaG9jb2xhdGVGYWN0b3JpZXMpKXtcblxuICAgICAgICAgICAgY29uc3QgYW1vdW50T2ZDaG9jb2xhdGVGYWN0b3JpZXMgPSBjaG9jb2xhdGVGYWN0b3JpZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFtb3VudE9mQ2hvY29sYXRlRmFjdG9yaWVzOyBpKyspe1xuXG4gICAgICAgICAgICAgICAgY29uc3QgQ2hvY29sYXRlQmFyID0gY2hvY29sYXRlRmFjdG9yaWVzW2ldO1xuICAgICAgICAgICAgICAgIENob2NvbGF0ZUZhY3RvcnkuX2ZsYXNoVGlja2V0KENob2NvbGF0ZUJhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSWYgZmFjdG9yeSBoYXMgYSBnb2xkZW4gdGlja2V0XG4gICAgICogVGhlbiB3ZSBjYW4gbWFrZSB0aGVtIGdvIG9uIHRoZSB0b3VyIGlmIHRoZXJlIGhhcyBiZWVuIGNsaWNrIG9uIHRoZSB0aWNrZXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVCYXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9mbGFzaFRpY2tldDogZnVuY3Rpb24gKGNob2NvbGF0ZUJhcikge1xuXG4gICAgICAgIC8vIFRyeSBnZXQgdGhlIHRpY2tldCBmcm9tIHRoZSBjaG9jb2xhdGVCYXJcbiAgICAgICAgY29uc3QgZ29sZGVuVGlja2V0ID0gY2hvY29sYXRlQmFyLnF1ZXJ5U2VsZWN0b3IoJy5qcy1nb2xkZW4tdGlja2V0Jyk7XG5cbiAgICAgICAgLy8gT25seSBjb250aW51ZSBpZiBjaG9jb2xhdGUgYmFyIGhhcyBhIGdvbGRlbiB0aWNrZXRcbiAgICAgICAgaWYoaXNzZXQoZ29sZGVuVGlja2V0KSl7XG5cbiAgICAgICAgICAgIGdvbGRlblRpY2tldC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBDaG9jb2xhdGVGYWN0b3J5LmVuam95VGhlVG91cihjaG9jb2xhdGVCYXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUbyBiYWQsIG5vIGdvbGRlbiB0aWNrZXRzIGhhcyBiZWVuIGZvdW5kLicpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRoZSB0b3VyIHRocm91Z2ggdGhlIGZhY3RvcnlcbiAgICAgKiBBbmQgZ2V0IHRoZSBuYW1lcyBhbmQgcHJvcGVydGllcyBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZ3JvdXBcbiAgICAgKiBJZiB0aGVyZSBhcmUgbWVtYmVycyBpbiB0aGUgZ3JvdXAgb2YgY291cnNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlRmFjdG9yeVxuICAgICAqL1xuICAgIGVuam95VGhlVG91cihjaG9jb2xhdGVGYWN0b3J5KXtcblxuICAgICAgICAvLyBBc2sgZm9yIHRoZSB0b3VyIGdyb3VwXG4gICAgICAgIGNvbnN0IHRvdXJHcm91cCA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJyk7XG5cbiAgICAgICAgaWYoaXNzZXQodG91ckdyb3VwKSl7XG5cbiAgICAgICAgICAgIC8vIEZvciBlYWNoIHZpc2l0b3Igd2Ugd2FudCBhIGJlbG9uZ2luZyBPb21wYSBMb29tcGFcbiAgICAgICAgICAgIGxldCBvb21wYUxvb21wYXMgPSB7fTtcbiAgICAgICAgICAgIGxldCBhbW91bnRPZk9vbXBhTG9vbXBhcyA9IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvdXJHcm91cFNpemUgPSB0b3VyR3JvdXAubGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRvdXJHcm91cFNpemU7IGkrKyl7XG5cbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHZpc2l0b3IgZnJvbSB0aGUgZ3JvdXBcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yID0gdG91ckdyb3VwW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBpdHMgbmFtZVxuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JOYW1lID0gdmlzaXRvci5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcblxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB2aXNpdG9yIGlzIGJhbm5lZFxuICAgICAgICAgICAgICAgIGlmKCBDaG9jb2xhdGVGYWN0b3J5Ll9pc1Zpc2l0b3JCYW5uZWQodmlzaXRvck5hbWUpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIG9vbXBhTG9vbXBhc1sgdmlzaXRvck5hbWUgXSA9IENob2NvbGF0ZUZhY3RvcnkuX2dldEFycmFuZ2VtZW50KHZpc2l0b3IpO1xuICAgICAgICAgICAgICAgIGFtb3VudE9mT29tcGFMb29tcGFzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnN1cmFuY2UgdGhhdCB0aGVyZSBhcmUgb29tcGEgbG9vbXBhc1xuICAgICAgICAgICAgaWYoYW1vdW50T2ZPb21wYUxvb21wYXMgPT09IDApIHJldHVybjtcblxuICAgICAgICAgICAgLy8gU2VuZCBzdWJtaXQgcmVxdWVzdFxuICAgICAgICAgICAgQ2hvY29sYXRlRmFjdG9yeS5fZmluaXNoVG91cihvb21wYUxvb21wYXMsIGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVG8gYmFkLCBubyBtZW1iZXJzIHRvIHZpc2l0IHRoaXMgZmFjdG9yeScpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHZpc2l0b3IgbmFtZSBpc24ndCBhbGxvd1xuICAgICAqXG4gICAgICogQHBhcmFtIHZpc2l0b3JOYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaXNWaXNpdG9yQmFubmVkOiBmdW5jdGlvbih2aXNpdG9yTmFtZSl7XG4gICAgICAgIGlmKENob2NvbGF0ZUZhY3RvcnkuYmFubmVkVmlzaXRvci5pbmRleE9mKHZpc2l0b3JOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNb3N0IGdldCB2aXNpdG9yIGhhdmUgYSBub3JtYWwgYXJyYW5nZW1lbnRcbiAgICAgKiBCdXQgc29tZXRpbWVzIHRoZXJlIGFyZSBzcGVjaWFsIGNhc2VzXG4gICAgICogTGlrZSBhIFNlbGVjdG9yIG9yIGNoZWNrYm94XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlzaXRvclxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2dldEFycmFuZ2VtZW50OiBmdW5jdGlvbih2aXNpdG9yKVxuICAgIHtcblxuICAgICAgICBjb25zdCB2aXNpdG9yVHlwZSA9IHZpc2l0b3Iubm9kZU5hbWU7XG5cbiAgICAgICAgc3dpdGNoICh2aXNpdG9yVHlwZSkge1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRvci52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5pc2ggdGhlIHRvdXJcbiAgICAgKiBJZiBzdWNjZXNzZnVsIHNob3cgdGhhbmtzIG1lc3NhZ2VcbiAgICAgKiBPciBzaG93IGRlZmluZWQgZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFja1xuICAgICAqXG4gICAgICogQHBhcmFtIGdyb3VwXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcmV0dXJucyB7Knx2b2lkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2ZpbmlzaFRvdXI6IGZ1bmN0aW9uKGdyb3VwLCBjaG9jb2xhdGVGYWN0b3J5KVxuICAgIHtcbiAgICAgICAgLy8gQWRkIHdpbGxpZSB0byB0aGUgZ3JvdXBcbiAgICAgICAgZ3JvdXAgPSBDaG9jb2xhdGVGYWN0b3J5Ll9hZGRXaWxsaWVXb25rYShncm91cCk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBnYXRlIGZvciBmaW5pc2ggdGhlIHRvdXJcbiAgICAgICAgY29uc3QgZ2F0ZSA9ICcvY29udGFjdC9wcm9jZXNzJztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgQWpheC5wb3N0KGdhdGUsIGdyb3VwLCBmdW5jdGlvbiAoSHR0cFJlcXVlc3QpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShIdHRwUmVxdWVzdC5yZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKEh0dHBSZXF1ZXN0LnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll90aGFua3NGb3JWaXNpdGluZyhyZXNwb25zZS5yZWRpcmVjdFVybCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDIyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENob2NvbGF0ZUZhY3RvcnkuX2dpdmVGZWVkYmFja1RvTWVtYmVycyhyZXNwb25zZS5lcnJvcnMsIGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIENob2NvbGF0ZUZhY3RvcnkuX3Vua25vd25HYXBJbkZhY3RvcnkoY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIENob2NvbGF0ZUZhY3RvcnkuX3Vua25vd25HYXBJbkZhY3RvcnkoY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHdpbGxpZSB3b25rYSB0byB0aGUgZ3JvdXBcbiAgICAgKiBQcy4uLiBpdCBhY3R1YWxseSB0aGUgc2VjcmV0IGNvZGUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JvdXBcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9hZGRXaWxsaWVXb25rYTogZnVuY3Rpb24oZ3JvdXApe1xuICAgICAgICBncm91cC5fd2lsbGllID0gJ3dvbmthJztcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGhlIGZlZWRiYWNrIHRvIHRoZSBkZXNpcmVkIGFyZWEuXG4gICAgICogTW9zdCBsaWtlbHkgdG8gdGhlIHZpc2l0b3IgZGlyZWN0bHksIGJ1dCBzb21ldGltZSB0byB0aGUgZmFjdG9yeSBkZXNpcmVkIGZlZWRiYWNrIGFyZWFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlcnJvcnNcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlRmFjdG9yeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2dpdmVGZWVkYmFja1RvTWVtYmVyczogZnVuY3Rpb24oZXJyb3JzLCBjaG9jb2xhdGVGYWN0b3J5KXtcblxuICAgICAgICAvLyBHcmFiIHRoZSBmYWN0b3J5IGZlZWRiYWNrIGFyZWFcbiAgICAgICAgY29uc3QgZmVlZGJhY2tBcmVhID0gY2hvY29sYXRlRmFjdG9yeS5xdWVyeVNlbGVjdG9yKCcuanMtZXJyb3ItYXJlYScpO1xuXG4gICAgICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IGh0bWxcbiAgICAgICAgaWYoaXNzZXQoZmVlZGJhY2tBcmVhKSkgZmVlZGJhY2tBcmVhLmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAgIC8vIENsZWFyIHRoZSBwcmV2aW91cyBtYXJrZWQgamFja2V0c1xuICAgICAgICBDaG9jb2xhdGVGYWN0b3J5Ll9jbGVhclByZXZpb3VzTWFya2VkSmFja2V0cyhjaG9jb2xhdGVGYWN0b3J5KTtcblxuICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goZnVuY3Rpb24odmlzaXRvcikge1xuXG4gICAgICAgICAgICBsZXQgamFja2V0ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCB2aXNpdG9yRmVlZGJhY2tBcmVhID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gSG9uZXkgZWxlbWVudHMgZG9lc24ndCBoYXMgYSBhY2Nlc3NpYmxlIGVsZW1lbnRcbiAgICAgICAgICAgIGlmKHZpc2l0b3IgIT09ICdfaG9uZXknICYmIHZpc2l0b3IgIT09ICdfc2VjcmV0Q29kZScpIHtcblxuICAgICAgICAgICAgICAgIC8vIEdyYWIgdGhlIHZpc2l0b3JcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yTm9kZSA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvcignIycgKyB2aXNpdG9yKTtcblxuICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGphY2tldCBvZiBhIHZpc2l0b3JcbiAgICAgICAgICAgICAgICBqYWNrZXQgPSBDaG9jb2xhdGVGYWN0b3J5Ll9ncmFiVmlzaXRvckphY2tldCh2aXNpdG9yTm9kZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBmb3VuZCBnZXQgdGhlIGRlc2lyZWQgYXJlYVxuICAgICAgICAgICAgICAgIGlmKGlzc2V0KGphY2tldCkpIHZpc2l0b3JGZWVkYmFja0FyZWEgPSBqYWNrZXQucXVlcnlTZWxlY3RvcignLmpzLWZvcm0tZWxlbWVudC1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgaHRtbFxuICAgICAgICAgICAgICAgIGlmKGlzc2V0KHZpc2l0b3JGZWVkYmFja0FyZWEpKSB2aXNpdG9yRmVlZGJhY2tBcmVhLmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgZmVlZGJhY2sgZm9yIHRoaXMgdmlzaXRvclxuICAgICAgICAgICAgY29uc3QgdmlzaXRvckZlZWRiYWNrID0gZXJyb3JzW3Zpc2l0b3JdO1xuXG4gICAgICAgICAgICAvLyBTcGl0IG91dCBlYWNoIGxpbmVcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JGZWVkYmFja0Ftb3VudCA9IHZpc2l0b3JGZWVkYmFjay5sZW5ndGg7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdmlzaXRvckZlZWRiYWNrQW1vdW50OyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JGZWVkYmFja0xpbmUgPSB2aXNpdG9yRmVlZGJhY2tbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBIb25leSBlbGVtZW50cyBkb2Vzbid0IGhhcyBhIGFjY2Vzc2libGUgZWxlbWVudCBhcmVhXG4gICAgICAgICAgICAgICAgaWYodmlzaXRvciAhPT0gJ19ob25leScgJiYgdmlzaXRvciAhPT0gJ19zZWNyZXRDb2RlJykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIGphY2tldFxuICAgICAgICAgICAgICAgICAgICBpZihpc3NldChqYWNrZXQpKSBqYWNrZXQuY2xhc3NMaXN0LmFkZCgnaGFzLWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGZlZWRiYWNrIHRvIHZpc2l0b3IgZmVlZGJhY2sgYXJlYSBpZiBkZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KHZpc2l0b3JGZWVkYmFja0FyZWEpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZlZWRiYWNrQXJlYSA9IHZpc2l0b3JGZWVkYmFja0FyZWEuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlZWRiYWNrQXJlYSArPSAnPHNwYW4+JyArIHZpc2l0b3JGZWVkYmFja0xpbmUgKyAnPC9zcGFuPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yRmVlZGJhY2tBcmVhLmlubmVySFRNTCA9IGN1cnJlbnRGZWVkYmFja0FyZWE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgZmVlZGJhY2sgdG8gZmFjdG9yeSBmZWVkYmFjayBhcmVhIGlmIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZihpc3NldChmZWVkYmFja0FyZWEpKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGZWVkYmFja0FyZWEgPSBmZWVkYmFja0FyZWEuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVlZGJhY2tBcmVhICs9ICc8bGk+JyArIHZpc2l0b3JGZWVkYmFja0xpbmUgKyAnPC9saT4nO1xuICAgICAgICAgICAgICAgICAgICBmZWVkYmFja0FyZWEuaW5uZXJIVE1MID0gY3VycmVudEZlZWRiYWNrQXJlYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgcHJldmlvdXMgbWFya2VkIGphY2tldHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfY2xlYXJQcmV2aW91c01hcmtlZEphY2tldHMoY2hvY29sYXRlRmFjdG9yeSkge1xuXG4gICAgICAgIGNvbnN0IG1hcmtlZEphY2tldHMgPSBjaG9jb2xhdGVGYWN0b3J5LnF1ZXJ5U2VsZWN0b3JBbGwoJy5oYXMtZXJyb3InKTtcbiAgICAgICAgY29uc3QgbWFya2VkSmFja2V0c0Ftb3VudCA9IG1hcmtlZEphY2tldHMubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBtYXJrZWRKYWNrZXRzQW1vdW50OyBpKyspe1xuICAgICAgICAgICAgbWFya2VkSmFja2V0c1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmFiIHRoZSBqYWNrZXQgb2YgdGhlIHZpc2l0b3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aXNpdG9yXG4gICAgICogQHJldHVybnMge251bGx8KnwoKCkgPT4gKE5vZGUgfCBudWxsKSl8QWN0aXZlWC5JWE1MRE9NTm9kZXwoTm9kZSAmIFBhcmVudE5vZGUpfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2dyYWJWaXNpdG9ySmFja2V0OiBmdW5jdGlvbih2aXNpdG9yKXtcblxuICAgICAgICAvLyBDaGVjayBpZiB2aXNpdG9yIGlzIGRlZmluZWRcbiAgICAgICAgaWYgKCFpc3NldCh2aXNpdG9yKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgLy8gRG8gbG9vcCBzZXR0aW5nc1xuICAgICAgICBjdXJyZW50TGF5ZXIgPSB2aXNpdG9yO1xuICAgICAgICBzYWZldHlCcmVhayA9IDA7XG5cbiAgICAgICAgLy8gR3JhYiB0aGUgbmV4dCBsYXllciB0aWxsIGl0IGlzIHRoZSBqYWNrZXQgKG9yIHNhZmV0eUJyZWFrIGhhcyBiZWVuIHJlYWNoZWRcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgc2FmZXR5QnJlYWsrKztcbiAgICAgICAgICAgIGN1cnJlbnRMYXllciA9IGN1cnJlbnRMYXllci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYoY3VycmVudExheWVyLmNsYXNzTGlzdC5jb250YWlucygnanMtZm9ybS1lbGVtZW50JykpIHJldHVybiBjdXJyZW50TGF5ZXI7XG4gICAgICAgIH0gd2hpbGUgKGN1cnJlbnRMYXllci50YWdOYW1lICE9PSAnQk9EWScgJiYgc2FmZXR5QnJlYWsgPD0gMTApO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZWRpcmVjdCB0aGUgdmlzaXRvciB0byB0aGUgdGhhbmtzIHBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0U3RvcFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RoYW5rc0ZvclZpc2l0aW5nOiBmdW5jdGlvbiAobmV4dFN0b3ApIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uID0gbmV4dFN0b3A7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVua25vd24gZXJyb3Igb2NjdXJyZWQsIGxvZyB0aGUgZXJyb3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdW5rbm93bkdhcEluRmFjdG9yeTogZnVuY3Rpb24gKGNob2NvbGF0ZUZhY3RvcnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaG9jb2xhdGVGYWN0b3J5OiBVbmtvd24gRXJyb3InKTtcbiAgICB9LFxufTtcblxuQ2hvY29sYXRlRmFjdG9yeS5lbnRlcigpOyJdLCJzb3VyY2VSb290IjoiIn0=