vendor: 14,690 bytes, line 1
1!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=n(1),a=(o(r),n(6)),u=o(a),c=n(7),s=o(c),f=n(8),d=o(f),l=n(9),p=o(l),m=n(10),b=o(m),v=n(11),y=o(v),g=n(14),h=o(g),w=[],k=!1,x={offset:120,delay:0,easing:"ease",duration:400,disable:!1,once:!1,startEvent:"DOMContentLoaded",throttleDelay:99,debounceDelay:50,disableMutationObserver:!1},j=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay")})},S=function(e){return e===!0||"mobile"===e&&p.default.mobile()||"phone"===e&&p.default.phone()||"tablet"===e&&p.default.tablet()||"function"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '),x.disableMutationObserver=!0),document.querySelector("body").setAttribute("data-aos-easing",x.easing),document.querySelector("body").setAttribute("data-aos-duration",x.duration),document.querySelector("body").setAttribute("data-aos-delay",x.delay),"DOMContentLoaded"===x.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1?j(!0):"load"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener("resize",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("orientationchange",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("scroll",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready("[data-aos]",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){"use strict";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S="maxWait"in n,y=S?x(u(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError(s);return i(o)&&(r="leading"in o?!!o.leading:r,a="trailing"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t="undefined"==typeof e?"undefined":c(e);return!!e&&("object"==t||"function"==t)}function r(e){return!!e&&"object"==("undefined"==typeof e?"undefined":c(e))}function a(e){return"symbol"==("undefined"==typeof e?"undefined":c(e))||r(e)&&k.call(e)==d}function u(e){if("number"==typeof e)return e;if(a(e))return f;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(l,"");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c="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},s="Expected a function",f=NaN,d="[object Symbol]",l=/^\s+|\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,g="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,h=y||g||Function("return this")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){"use strict";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S="maxWait"in n,y=S?k(a(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t="undefined"==typeof e?"undefined":u(e);return!!e&&("object"==t||"function"==t)}function i(e){return!!e&&"object"==("undefined"==typeof e?"undefined":u(e))}function r(e){return"symbol"==("undefined"==typeof e?"undefined":u(e))||i(e)&&w.call(e)==f}function a(e){if("number"==typeof e)return e;if(r(e))return s;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(d,"");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u="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},c="Expected a function",s=NaN,f="[object Symbol]",d=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v="object"==("undefined"==typeof t?"undefined":u(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,g=v||y||Function("return this")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){"use strict";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;t<e.length;t+=1){if(o=e[t],o.dataset&&o.dataset.aos)return!0;if(i=o.children&&n(o.children))return!0}return!1}function o(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function i(){return!!o()}function r(e,t){var n=window.document,i=o(),r=new i(a);u=t,r.observe(n.documentElement,{childList:!0,subtree:!0,removedNodes:!0})}function a(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),o=Array.prototype.slice.call(e.removedNodes),i=t.concat(o);if(n(i))return u()})}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){};t.default={isSupported:i,ready:r}},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(){return navigator.userAgent||navigator.vendor||window.opera||""}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),r=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,a=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,u=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,c=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,s=function(){function e(){n(this,e)}return i(e,[{key:"phone",value:function(){var e=o();return!(!r.test(e)&&!a.test(e.substr(0,4)))}},{key:"mobile",value:function(){var e=o();return!(!u.test(e)&&!c.test(e.substr(0,4)))}},{key:"tablet",value:function(){return this.mobile()&&!this.phone()}}]),e}();t.default=new s},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n){var o=e.node.getAttribute("data-aos-once");t>e.position?e.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&e.node.classList.remove("aos-animate")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add("aos-init"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute("data-aos-offset"),anchor:e.getAttribute("data-aos-anchor"),anchorPlacement:e.getAttribute("data-aos-anchor-placement")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case"top-bottom":break;case"center-bottom":n+=e.offsetHeight/2;break;case"bottom-bottom":n+=e.offsetHeight;break;case"top-center":n+=i/2;break;case"bottom-center":n+=i/2+e.offsetHeight;break;case"center-center":n+=i/2+e.offsetHeight/2;break;case"top-top":n+=i;break;case"bottom-top":n+=e.offsetHeight+i;break;case"center-top":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return e=e||document.querySelectorAll("[data-aos]"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});
1 2/** 3 * Owl Carousel v2.3.4 4 * Copyright 2013-2018 David Deutsch 5 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 6 */�
vendor: 31,998 bytes, lines 6-7
6 7!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,checkVisibility:!0,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",slideTransition:"",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g>0;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i,g-=1;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c<b;)d=f[c-1]||0,e=this._widths[this.relative(c)]+this.settings.margin,f.push(d+e*a);this._coordinates=f}},{filter:["width","items","settings"],run:function(){var a=this.settings.stagePadding,b=this._coordinates,c={width:Math.ceil(Math.abs(b[b.length-1]))+2*a,"padding-left":a||"","padding-right":a||""};this.$stage.css(c)}},{filter:["width","items","settings"],run:function(a){var b=this._coordinates.length,c=!this.settings.autoWidth,d=this.$stage.children();if(c&&a.items.merge)for(;b--;)a.css.width=this._widths[this.relative(b)],d.eq(b).css(a.css);else c&&(a.css.width=a.items.width,d.css(a.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(a){a.current=a.current?this.$stage.children().index(a.current):0,a.current=Math.max(this.minimum(),Math.min(this.maximum(),a.current)),this.reset(a.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var a,b,c,d,e=this.settings.rtl?1:-1,f=2*this.settings.stagePadding,g=this.coordinates(this.current())+f,h=g+this.width()*e,i=[];for(c=0,d=this._coordinates.length;c<d;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.$stage.children(".center").removeClass("center"),this.settings.center&&this.$stage.children().eq(this.current()).addClass("center")}}],e.prototype.initializeStage=function(){this.$stage=this.$element.find("."+this.settings.stageClass),this.$stage.length||(this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+">",{class:this.settings.stageClass}).wrap(a("<div/>",{class:this.settings.stageOuterClass})),this.$element.append(this.$stage.parent()))},e.prototype.initializeItems=function(){var b=this.$element.find(".owl-item");if(b.length)return this._items=b.get().map(function(b){return a(b)}),this._mergers=this._items.map(function(){return 1}),void this.refresh();this.replace(this.$element.children().not(this.$stage.parent())),this.isVisible()?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass)},e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var a,b,c;a=this.$element.find("img"),b=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,c=this.$element.children(b).width(),a.length&&c<=0&&this.preloadAutoWidthImages(a)}this.initializeStage(),this.initializeItems(),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.isVisible=function(){return!this.settings.checkVisibility||this.$element.is(":visible")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b<c;)(this._invalidated.all||a.grep(this._pipe[b].filter,d).length>0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.isVisible()&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)<Math.abs(d.y)&&this.is("valid")||(b.preventDefault(),this.enter("dragging"),this.trigger("drag"))},this)))},e.prototype.onDragMove=function(a){var b=null,c=null,d=null,e=this.difference(this._drag.pointer,this.pointer(a)),f=this.difference(this._drag.stage.start,e);this.is("dragging")&&(a.preventDefault(),this.settings.loop?(b=this.coordinates(this.minimum()),c=this.coordinates(this.maximum()+1)-b,f.x=((f.x-b)%c+c)%c+b):(b=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),c=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),d=this.settings.pullDrag?-1*e.x/5:0,f.x=Math.max(Math.min(f.x,b+d),c+d)),this._drag.stage.current=f,this.animate(f.x))},e.prototype.onDragEnd=function(b){var d=this.difference(this._drag.pointer,this.pointer(b)),e=this._drag.stage.current,f=d.x>0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var e=-1,f=30,g=this.width(),h=this.coordinates();return this.settings.freeDrag||a.each(h,a.proxy(function(a,i){return"left"===c&&b>i-f&&b<i+f?e=a:"right"===c&&b>i-g-f&&b<i-g+f?e=a+1:this.op(b,"<",i)&&this.op(b,">",h[a+1]!==d?h[a+1]:i-g)&&(e="left"===c?a+1:a),-1===e},this)),this.settings.loop||(this.op(b,">",h[this.minimum()])?e=b=this.minimum():this.op(b,"<",h[this.maximum()])&&(e=b=this.maximum())),e},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"+(this.settings.slideTransition?" "+this.settings.slideTransition:"")}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){(a=this.normalize(a))!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){if(b=this._items.length)for(c=this._items[--b].width(),d=this.$element.width();b--&&!((c+=this._items[b].width()+this.settings.margin)>d););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2==0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=-1*f*g),a=c+e,(d=((a-h)%g+g)%g+h)!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.isVisible()&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){(a=this.normalize(a,!0))!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),!1!==this.settings.responsive&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$stage.remove(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a<c;case">":return d?a<c:a>c;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&-1!==a.namespace.indexOf("owl")?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.isVisible(),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.isVisible()!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type)){var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&-1*e||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);for(c.lazyLoadEager>0&&(e+=c.lazyLoadEager,c.loop&&(g-=c.lazyLoadEager,e++));f++<e;)this.load(h/2+this._core.relative(g)),h&&a.each(this._core.clones(this._core.relative(g)),i),g++}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={lazyLoad:!1,lazyLoadEager:0},e.prototype.load=function(c){var d=this._core.$stage.children().eq(c),e=d&&d.find(".owl-lazy");!e||a.inArray(d.get(0),this._loaded)>-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src")||f.attr("data-srcset");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):f.is("source")?f.one("load.owl.lazy",a.proxy(function(){this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("srcset",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(c){this._core=c,this._previousHeight=null,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"===a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._intervalId=null;var d=this;a(b).on("load",function(){d._core.settings.autoHeight&&d.update()}),a(b).resize(function(){d._core.settings.autoHeight&&(null!=d._intervalId&&clearTimeout(d._intervalId),d._intervalId=setTimeout(function(){d.update()},250))})};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.settings.lazyLoad,e=this._core.$stage.children().toArray().slice(b,c),f=[],g=0;a.each(e,function(b,c){f.push(a(c).height())}),g=Math.max.apply(null,f),g<=1&&d&&this._previousHeight&&(g=this._previousHeight),this._previousHeight=g,this._core.$stage.parent().height(g).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?"width:"+c.width+"px;height:"+c.height+"px;":"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(c){e='<div class="owl-video-play-icon"></div>',d=k.lazyLoad?a("<div/>",{class:"owl-video-tn "+j,srcType:c}):a("<div/>",{class:"owl-video-tn",style:"opacity:1;background-image:url("+c+")"}),b.after(d),b.after(e)};if(b.wrap(a("<div/>",{class:"owl-video-wrapper",style:g})),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),c=a('<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>'),c.attr("height",h),c.attr("width",g),"youtube"===f.type?c.attr("src","//www.youtube.com/embed/"+f.id+"?autoplay=1&rel=0&v="+f.id):"vimeo"===f.type?c.attr("src","//player.vimeo.com/video/"+f.id+"?autoplay=1"):"vzaar"===f.type&&c.attr("src","//view.vzaar.com/"+f.id+"/player?autoplay=true"),a(c).wrap('<div class="owl-video-frame" />').insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,
vendor: 3,708 bytes, lines 7-8
7 8animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype._next=function(d){this._call=b.setTimeout(a.proxy(this._next,this,d),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("interacting")||c.hidden||this._core.next(d||this._core.settings.autoplaySpeed)},e.prototype.read=function(){return(new Date).getTime()-this._time},e.prototype.play=function(c,d){var e;this._core.is("rotating")||this._core.enter("rotating"),c=c||this._core.settings.autoplayTimeout,e=Math.min(this._time%(this._timeout||c),c),this._paused?(this._time=this.read(),this._paused=!1):b.clearTimeout(this._call),this._time+=this.read()%c-e,this._timeout=c,this._call=b.setTimeout(a.proxy(this._next,this,d),c-e)},e.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,b.clearTimeout(this._call),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,b.clearTimeout(this._call))},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";
vendor: 5,783 bytes, line 8
8var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:['<span aria-label="Previous">‹</span>','<span aria-label="Next">›</span>'],navSpeed:!1,navElement:'button type="button" role="presentation"',navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a('<button role="button">').addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","button",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d,e;e=this._core.settings;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)"$relative"===b&&e.navContainer?this._controls[b].html(""):this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a<e;a++){if(b>=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(
8window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("<support>").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document); 9 10$(document).ready(function () { 11 // console.log('owl') 12 const IS_RTL = $('body').hasClass('rtl'); 13 const NAV_TEXT = 14 IS_RTL ? 15 [ 16 '<i class="fa fa-angle-right" aria-hidden="true"> </i>', 17 '<i class="fa fa-angle-left" aria-hidden="true"> </i>' 18 ] : 19 [ 20 '<i class="fa fa-angle-left" aria-hidden="true"> </i>', 21 '<i class="fa fa-angle-right" aria-hidden="true"> </i>' 22 ]; 23 24 $('.column-owl-slider').each(function () { 25 $items = Number($(this).data('items')); 26 // console.log($items - 2); 27 $(this).owlCarousel({ 28 // items : $items, 29 slideBy: 1, 30 arrows: $(this).data('arrows') == false ? false : true, 31 rtl: IS_RTL, 32 dots: $(this).data('dots') == 'true' ? true : false, 33 navText: $(this).data('arrows') == false ? '' : NAV_TEXT, 34 navContainer: $(this).parent().find('.custom-nav'), 35 responsiveClass: true, 36 responsiveBaseElement: 'body', 37 responsive: { 38 0: { 39 items: (($items - 2) > 0) ? $items - 2 : 1 40 }, 41 700: { 42 items: (($items - 1) > 0) ? $items - 1 : ($items == 1) ? 1 : 2 43 }, 44 1201: { 45 items: $items 46 } 47 } 48 }); 49 });
50 51 $('.header-slider').owlCarousel({ 52 items: 1, 53 slideBy: 1, 54 arrows: $(this).data('arrows') == false ? false : true, 55 rtl: IS_RTL, 56 dots: $(this).data('dots') == 'true' ? true : false, 57 navText: $(this).data('arrows') == false ? '' : NAV_TEXT, 58 navContainer: $('.header-slider').parent().find('.custom-nav'), 59 }); 60 61 62 $('.single-video-owl').owlCarousel({ 63 loop: false, 64 margin: 10, 65 items: 1, 66 arrows: $(this).data('arrows') == false ? false : true, 67 rtl: IS_RTL, 68 dots: $(this).data('dots') == 'true' ? true : false, 69 navText: $(this).data('arrows') == false ? '' : NAV_TEXT, 70 navContainer: '.single-video-owl-warpper .custom-nav', 71 }).on('dragged.owl.carousel', function (e) { 72 stopVideoOwl(); 73 }).on('changed.owl.carousel', function (e) { 74 stopVideoOwl(); 75 }); 76 77 78 /* For carousel-sync */ 79 let sync1 = $('.carousel-sync1'); 80 let sync2 = $('.carousel-sync2'); 81 let duration = 300; 82 83 84 // Sync nav 85 $('.carousel-sync1__warpper').on('click', '.owl-next', function () { 86 sync2.trigger('next.owl.carousel') 87 }); 88 $('.carousel-sync1__warpper').on('click', '.owl-prev', function () { 89 sync2.trigger('prev.owl.carousel') 90 }); 91 92 93 sync1.owlCarousel({ 94 loop: false, 95 margin: 10, 96 items: 1, 97 smartSpeed: duration, 98 arrows: $(this).data('arrows') == false ? false : true, 99 rtl: IS_RTL, 100 dots: $(this).data('dots') == 'true' ? true : false, 101 navText: $(this).data('arrows') == false ? '' : NAV_TEXT, 102 navContainer: '.carousel-sync1__warpper .custom-nav', 103 }).on('dragged.owl.carousel', function (e) { 104 if (e.relatedTarget._drag.direction == 'left') { 105 sync2.trigger('next.owl.carousel') 106 } else { 107 sync2.trigger('prev.owl.carousel') 108 } 109 }); 110 111 sync2.owlCarousel({ 112 loop: false, 113 margin: 15, 114 dots: false, 115 nav: false, 116 rtl: IS_RTL, 117 smartSpeed: duration, 118 responsiveBaseElement: 'body', 119 responsive: { 120 480: { 121 items: 3, 122 }, 123 1000: { 124 items: 5, 125 }, 126 1201: { 127 items: 5, 128 } 129 } 130 131 }).on('click', '.owl-item', function () { 132 var number = $(this).index(); 133 sync1.data('owl.carousel').to(number, 300, true); 134 }); 135 136 /*****************************************************************/ 137 138 $('[owl-jump-to]').click(function () { 139 let itemNo = $(this).data('item-no'); 140 // if you need animation leave only the itemNo //[itemNo,0,false] - no animation //[itemNo] - animation 141 $('.owl-carousel').trigger('to.owl.carousel', [itemNo, 0, false]); 142 }); 143 144 145}); 146 147 148function stopVideoOwl() { 149 $iframe = $('.owl-item.active iframe'); // get the active iframe from owl item 150 $iframe_src = $iframe.attr('src'); // get the src video 151 $iframe_src = $iframe.attr('src', $iframe_src); // reset the iframe 152} 153 154 155 156let currency = $("html").attr("lang") == "he-IL" ? "âª" : "$"; 157 158function changeCurrency(me) { 159 var elements = document.getElementsByClassName("currency"); 160 Array.prototype.forEach.call(elements, function (element) { 161 element.innerHTML = me.value; 162 }); 163 currency = me.value; 164} 165 166if (document.getElementById("ks-current-symbol")) { 167 var inputHiddenCurrency = document.getElementById("ks-current-symbol").value; 168 if (inputHiddenCurrency == "â¬") { 169 currency = inputHiddenCurrency; 170 } 171} 172 173$(document).ready(function () { 174 if ( 175 inputHiddenCurrency == "â¬" && 176 $(".donation_btn_wi").val().includes("Moyens") 177 ) { 178 $(".personal-details-form-button input").css("width", "250px"); 179 } 180 const CookieCartList = "cartList"; 181 const isSingle = $("body").hasClass("single-projects_don"); 182 183 let monthlyDonation = true; //handel if its monthlyDonation 184 let cartSum = 0; // handle the sum of cart 185 186 let cartList = getCookie(CookieCartList); // handel the cart list 187 if (cartList == null || !cartList.length) { 188 cartList = []; 189 oneTimeClicked(); 190 } else renderCartList(); 191 if (isSingle) { 192 renderSingleItem(); 193 } 194 195 function renderCartList() { 196 if (isSingle) return; 197 monthlyDonation = cartList[0].monthlyDonation; 198 // return; 199 let html = ""; 200 let month = monthlyDonation 201 ? $("body").hasClass("rtl") 202 ? "××××ש" 203 : "for month" 204 : ""; 205 cartList.map((data) => { 206 html += `<div class="donations-list-item" donation-list-item-${data.id}> 207 <div>${data.title}</div> 208 <div>${data.amount}</div> 209 <div><span class="currency">${inputHiddenCurrency}</span>${ 210 data.price 211 } ${month}</div> 212 <button remove-from-cart data-project-id="${data.id}" data-sum="${ 213 data.amount * data.price 214 }"> <i class="fas fa-times"></i> </button> 215 </div> `; 216 cartSum += data.amount * data.price; 217 const box = $(`#${data.id}`); 218 box.find("[add-to-cart]").hide(); 219 box.find(".added-to-cart").addClass("active"); 220 });
221 222 $(".donations-list").append(html); 223 totalCartSum(cartSum); 224 225 changeTabClicked(monthlyDonation ? $("#monthlyTab") : $("#oneTimeTab")); 226 } 227 228 function renderSingleItem() { 229 const _id = $("button[add-to-cart]").data("project-id"); 230 if (cartList.filter((i) => i.id === _id).length) { 231 const box = $(`#${_id}`); 232 box.find("[add-to-cart]").hide(); 233 box.find(".added-to-cart").addClass("active"); 234 } 235 } 236 237 if ($("#projects").val()) { 238 const ProjectArr = JSON.parse($("#projects").val()); 239 // console.log(ProjectArr); 240 } 241 242 //open cart on mobile 243 $(".donation-cart").on("click", ".donation-title", function () { 244 $(".donation-cart").toggleClass("active"); 245 }); 246 247 function oneTimeClicked() { 248 // console.log('oneTimeClicked'); 249 250 $("[data-for-month]").hide(); 251 $("[data-cart-title]").each((i, el) => { 252 $(el).html($(el).data("onetime-title")); 253 }); 254 let options = ""; 255 for (let i = 1; i <= 12; i++) { 256 options += `<option value="${i}">${i}</option>`; 257 } 258 $("#payments").html(options); 259 monthlyDonation = false; 260 } 261 262 function monthlyClicked() { 263 // console.log('monthly click'); 264 $("[data-for-month]").show(); 265 $("[data-cart-title]").each((i, el) => { 266 $(el).html($(el).data("month-title")); 267 }); 268 let unlimit = $("body").hasClass("rtl") ? "××× ×××××" : "Unlimited"; 269 let monthPay = [3, 6, 12, 18, 24, 36]; 270 let options = `<option value="unlimit">${unlimit}</option>`; 271 for (let j = 0; j < monthPay.length; j++) { 272 const i = monthPay[j]; 273 options += `<option value="${i}">${i}</option>`; 274 } 275 $("#payments").html(options); 276 277 monthlyDonation = true; 278 } 279 280 //open tab 281 $(".tablinks").on("click", function () { 282 // console.log('click'); 283 //check that the type of donations does not conflict 284 if (cartList.length == 0) { 285 changeTabClicked($(this)); 286 } else { 287 $("#don_modal .modal-text").html($("#donError").val()); 288 $("#don_modal").addClass("active error_msg"); 289 } 290 }); 291 292 // change the view by who was clicked 293 function changeTabClicked($cliked) { 294 $cliked.parent().children(".tablinks").removeClass("active"); 295 $cliked.addClass("active"); 296 297 $(".tabcontent").removeClass("active"); 298 $($cliked.data("tab-id")).addClass("active"); 299 300 if ($cliked.data("tab-id") == "#one-time") { 301 oneTimeClicked(); 302 } else { 303 monthlyClicked(); 304 } 305 } 306 307 //add to cart function 308 $(".donation-types-wrap , .single-projects_don").on( 309 "click", 310 "[add-to-cart]", 311 function () { 312 $this = $(this); 313 let amount = $("#" + $this.data("project-id")) 314 .find("[name=amount]") 315 .val(); 316 if (isSingle) { 317 monthlyDonation = $("input#monthly").length ? true : false; 318 } 319 if (!amount || amount < 1) { 320 amount = 1; 321 } 322 let data = { 323 id: $this.data("project-id"), 324 title: $this.data("title"), 325 price: $this.data("price"), 326 amount: amount, 327 }; 328 329 if (pushToCart(data)) { 330 $(this).css("display", "none"); 331 $("#" + $this.data("project-id")) 332 .find(".added-to-cart") 333 .addClass("active"); 334 if (isSingle) { 335 $("#" + $this.data("project-id")) 336 .find(".added-to-cart") 337 .append("<br />", $("input[name=moveMsg]").val()); 338 setTimeout(function () { 339 window.location.replace($("input[name=goto]").val()); 340 }, 5000); 341 } 342 } 343 } 344 ); 345 346 //add to cart from modal function 347 $("#don_modal").on("click", "[add-to-cart]", function () { 348 $this = $(this); 349 let amount = $("#don_modal").find("[name=amount]").val(); 350 if (amount < 1) { 351 amount = 1; 352 } 353 let data = { 354 id: $this.data("project-id"), 355 title: $this.data("title"), 356 price: $this.data("price"), 357 amount: amount, 358 }; 359 360 if (pushToCart(data)) { 361 $(this).css("display", "none"); 362 $("#" + $this.data("project-id")) 363 .find("[add-to-cart]") 364 .css("display", "none"); 365 366 $("#" + $this.data("project-id")) 367 .find(".added-to-cart") 368 .addClass("active"); 369 $("#don_modal").find(".added-to-cart").addClass("active"); 370 } 371 }); 372 373 $(".donation-price-wrap").on("click", ".donation-price-item", function () { 374 $(".donation-price-item").removeClass("active"); 375 $(".freeAmount").val(""); 376 $this = $(this); 377 $this.addClass("active"); 378 addtocartfunc(); 379 }); 380 381 $(".donation-price-wrap").on("click", "[add-to-cart]", function () { 382 addtocartfunc(); 383 }); 384 385 function addtocartfunc() { 386 price = 387 $(".freeAmount").val() && $(".freeAmount").val() > 0 388 ? $(".freeAmount").val() 389 : $(".donation-price-item.active").data("price"); 390 391 if (!price || price < 0) return; 392 393 id = $("#one-time").hasClass("active") ? 753 : 751; 394 let data = { 395 id: id, 396 title: $(".tablinks.active h3").html(), 397 price: price, 398 amount: 1, 399 }; 400 401 if (pushToCart(data)) { 402 $(".donation-price-item").removeClass("active"); 403 $(".freeAmount").val(""); 404 } 405 } 406 407 $("input.freeAmount").focus(function () { 408 $(".donation-price-item").removeClass("active"); 409 }); 410 411 //remove project from cart 412 $(".donations-list").on("click", "[remove-from-cart]", function () { 413 $this = $(this); 414 pro_id = $this.data("project-id"); 415 $("[donation-list-item-" + pro_id + "]").remove(); 416 417 cartList = cartList.filter((cart) => cart.id !== pro_id); 418 419 $("#" + pro_id) 420 .find(".added-to-cart") 421 .removeClass("active"); 422 $("#" + pro_id) 423 .find("[add-to-cart]") 424 .css("display", ""); 425 426 totalCartSum((cartSum -= $this.data("sum"))); 427
428 setCookie(CookieCartList, JSON.stringify(cartList), 10); 429 }); 430 431 // push the project to cart and calc the sum 432 function pushToCart(data) { 433 //check if the project is already exists by is id 434 if (cartList.filter((cart) => cart.id === data.id).length) return false; 435 436 //check if there is any change with monthlyDonation's from the single page - if exsist change clear the cart 437 if (cartList.length) { 438 for (const item of cartList) { 439 if (item.monthlyDonation != monthlyDonation) { 440 cartList = []; 441 break; 442 } 443 } 444 } 445 data.monthlyDonation = monthlyDonation; 446 cartList.push(data); 447 setCookie(CookieCartList, JSON.stringify(cartList), 10); 448 449 cartSum += data.amount * data.price; 450 let month = monthlyDonation 451 ? $("body").hasClass("rtl") 452 ? "××××ש" 453 : "for month" 454 : ""; 455 456 html = `<div class="donations-list-item" donation-list-item-${data.id}> 457 <div>${data.title}</div> 458 <div>${data.amount}</div> 459 <div><span class="currency">${currency}</span>${data.price} ${month}</div> 460 <button remove-from-cart data-project-id="${data.id}" data-sum="${ 461 data.amount * data.price 462 }"> <i class="fas fa-times"></i> </button> 463 </div> `; 464 465 $(".donations-list").append(html); 466 totalCartSum(cartSum); 467 468 return true; 469 } 470 471 function totalCartSum(cartSum) { 472 $(".total-summ-sum").html(cartSum); 473 } 474 $(".donation-types-wrap").on("focus", "input,textarea", function () { 475 if ($(window).width() > 700) return; 476 $("html, body").animate( 477 { 478 scrollTop: 479 $(this).offset().top - 480 ($(window).height() - $(this).outerHeight(true)) / 2, 481 }, 482 "fast" 483 ); 484 }); 485 486 function setCookie(cname, cvalue, exdays) { 487 let d = new Date(); 488 d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); 489 let expires = "expires=" + d.toUTCString(); 490 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 491 } 492 493 function getCookie(name) { 494 let nameEQ = name + "="; 495 let ca = document.cookie.split(";"); 496 for (let i = 0; i < ca.length; i++) { 497 let c = ca[i]; 498 while (c.charAt(0) == " ") c = c.substring(1, c.length); 499 if (c.indexOf(nameEQ) === 0) { 500 return JSON.parse(c.substring(nameEQ.length, c.length)); 501 } 502 } 503 return null; 504 } 505 506 function getCurrencyIso() { 507 switch (currency) { 508 case "âª": 509 return "ILS"; 510 case "$": 511 return "USD"; 512 case "â¬": 513 return "EUR"; 514 default: 515 return "ILS"; 516 break; 517 } 518 } 519 520 // Donation process 521 $("[move-to-personal-details]").click(function () { 522 if (!cartList.length) return; 523 $(".main-donation-container").removeClass("active"); 524 $(".personal-details-main-container").addClass("active"); 525 526 $("[data-cart-payments]").html($("#payments").val()); 527 528 $("html, body").animate( 529 { 530 scrollTop: $(".personal-details-main-container").offset().top - 100, 531 }, 532 "fast" 533 ); 534 535 if ($("#payments").val() != 1) { 536 $('[data-pay-via="stripe"]').hide(); 537 } else { 538 $('[data-pay-via="stripe"]').show(); 539 } 540 }); 541 542 function isEmail(email) { 543 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 544 return regex.test(email); 545 } 546 547 function creditCardRequired(required = true) { 548 $("[data-credit-card]").prop("required", required); 549 } 550 551function getDonationData() { 552 let valid = true; 553 $("input[required]").each(function () { 554 const $this = $(this); 555 $this.parent(".personal-details-form-content").removeClass("input-error"); 556 if ( 557 $this.val().length < 1 || 558 ($this.prop("type") == "checkbox" && !$this.is(":checked")) 559 ) { 560 //$this.parent(".personal-details-form-content").addClass("input-error"); 561 //valid = false; 562 } 563 }); 564 565 if (!valid) return false; 566 567 let f_name = $("input[name=f_name]").val(); 568 let l_name = $("input[name=l_name]").val(); 569 let email = $("input[name=email]").val(); 570 let phone = $("input[name=phone]").val(); 571 let reception_name = $("input[name=reception_name]").val(); 572 let street = $("input[name=street]").val(); 573 let apartment = $("input[name=apartment]").val();
574 let city = $("input[name=city]").val(); 575 let comments = $("input[name=comments]").val(); 576 577 let credit_card = $("input[data-og=cardnumber]").length 578 ? $("input[data-og=cardnumber]").val() 579 : ""; 580 let og_token = $("#og-token").val(); 581 582 //check if is valid inputs 583 if (email && !isEmail(email)) { 584 $("input[name=email]").addClass("input-error"); 585 $("input[name=email]").next().addClass("error"); 586 return false; 587 } 588 589 let requiredInputs = [email]; 590 $.each(requiredInputs, function (i, val) { 591 if (val.length < 1) return false; 592 }); 593 594 var currency_iso = getCurrencyIso(); 595 596 let donData = { 597 first_name: f_name, 598 last_name: l_name, 599 email: email, 600 phone: phone, 601 reception_name: reception_name, 602 street: street, 603 apartment: apartment, 604 city: city, 605 comments: comments, 606 type: $(".tablinks.active").data("type"), 607 payments: $("select[name=payments]").val(), 608 currency: currency, 609 currency_iso: currency_iso, 610 total: cartSum, 611 projects: cartList, 612 "4digits": credit_card.substr(credit_card.length - 4), 613 "og-token": og_token, 614 }; 615 616 // ××ספת ש××ת ×ר×× 617 if ($('#enable_greeting').length && $('#enable_greeting').is(':checked')) { 618 donData.enable_greeting = 'true'; 619 donData.full_name_to_send_a_greeting = $('#full_name_to_send_a_greeting').val(); 620 donData.mail_name_to_send_a_greeting = $('#mail_name_to_send_a_greeting').val(); 621 donData.content_of_the_blessing = $('#content_of_the_blessing').val(); 622 623 // ×××××צ×× ×©× ×©××ת ××ר×× 624 if (!donData.full_name_to_send_a_greeting || 625 !donData.mail_name_to_send_a_greeting || 626 !donData.content_of_the_blessing) { 627 628 alert($('body').hasClass('rtl') ? 629 '×× × ××× ×ת ×× ×©××ת ××ר××' : 630 'Please fill all greeting fields'); 631 632 // ××סף ס×××× ×××× ×ש××ת ר××§×× 633 if (!donData.full_name_to_send_a_greeting) { 634 $('#full_name_to_send_a_greeting').parent().addClass("input-error"); 635 } 636 if (!donData.mail_name_to_send_a_greeting) { 637 $('#mail_name_to_send_a_greeting').parent().addClass("input-error"); 638 } 639 if (!donData.content_of_the_blessing) { 640 $('#content_of_the_blessing').parent().addClass("input-error"); 641 } 642 643 // ×××× ×ש××ת ××ר×× 644 $('html, body').animate({ 645 scrollTop: $('.greeting-section').offset().top - 100 646 }, 'fast'); 647 648 return false; 649 } 650 651 // ×××××צ×× ×©× ×××××× 652 if (!isEmail(donData.mail_name_to_send_a_greeting)) { 653 alert($('body').hasClass('rtl') ? 654 '×× × ××× ×¡ ×ת××ת ×××××× ×ª×§×× × ×¢××ר ××§×× ××ר××' : 655 'Please enter a valid email for the greeting recipient'); 656 $('#mail_name_to_send_a_greeting').parent().addClass('input-error'); 657 658 // ×××× ×ש×× ××××××× 659 $('html, body').animate({ 660 scrollTop: $('#mail_name_to_send_a_greeting').offset().top - 100 661 }, 'fast'); 662 663 return false; 664 } 665 } else { 666 donData.enable_greeting = 'false'; 667 } 668 669 return donData; 670} 671 672 $("#donationForm").submit(function (e) { 673 e.preventDefault(); 674 }); 675 676 // wait one second for office guy token 677 function waitOneSecond() { 678 return new Promise((resolve) => { 679 setTimeout(() => { 680 resolve("resolved"); 681 }, 2000); 682 }); 683 } 684 685 $("[donation-now]").click(async function () { 686 const btn = $(this); 687 688 // Disable button immediately to prevent double clicks 689 if (btn.prop("disabled")) { 690 return; // Already processing, ignore click 691 } 692 btn.prop("disabled", true); 693 694 if (!cartList.length) { 695 btn.prop("disabled", false); 696 return; 697 } 698 699 // check the pay type if its by officeguy get token 700 let pay_via = $(this).data("pay-via"); 701 if (pay_via == "officeguy") { 702 creditCardRequired(); 703 OfficeGuy.Payments.BindFormSubmit({ 704 CompanyID: "69230014", 705 APIPublicKey: "ich35R7SWWuK5FNjcc2rYZ725df3HFqysEtiGAwFJbPXubr7A8", 706 }); 707 $("#donationForm").submit(); 708 await waitOneSecond(); 709 // Don't re-enable button here - it will stay disabled until success/error 710 } else { 711 creditCardRequired(false); 712 } 713 714 let donData = getDonationData(); 715 // console.log(donData); 716 if (donData == false) { 717 btn.prop("disabled", false); 718 return; 719 } 720 721 //add the action to data for ajax 722 donData.action = "new_donation"; 723 donData.pay_via = pay_via; 724 donData.nonce = ajax_params.ajax_nonce; 725 726 $.ajax({
727 url: ajax_params.ajax_url, 728 type: "POST", 729 data: donData, 730 beforeSend: function () { 731 // Button is already disabled at click, keep it disabled 732 btn.prop("disabled", true); 733 }, 734 success: function (response) { 735 res = response; 736 try { 737 res = JSON.parse(response); 738 console.log('ð¦ Donation response:', res); 739 } catch (error) { 740 console.error('â Error parsing response:', error); 741 //enabled the button 742 btn.prop("disabled", false); 743 } 744 // if was an error 745 if ( 746 res.hasOwnProperty("action") && 747 res["action"] == "redirectUrl" && 748 res.hasOwnProperty("url") 749 ) { 750 // Revenue tracking will be sent on the success page 751 console.log('ð Redirecting to success page (revenue will be tracked there)...'); 752 window.location.href = res["url"]; 753 } else if ( 754 res.hasOwnProperty("action") && 755 res["action"] == "redirectStripe" && 756 res.hasOwnProperty("sessionId") 757 ) { 758 const stripePublic = $("#stripe_public").val(); 759 if (!stripePublic) { 760 console.log("No stripe key"); 761 btn.prop("disabled", false); 762 return; 763 } 764 const stripe = Stripe(stripePublic); 765 stripe.redirectToCheckout({ sessionId: res["sessionId"] }); 766 } else if (res.hasOwnProperty("Status") && res["Status"]) { 767 console.error("Thre is an error : " + res["UserErrorMessage"]); 768 $("#tnx-errors").addClass("error"); 769 btn.prop("disabled", false); 770 } else { 771 if ( 772 res.hasOwnProperty("Data") && 773 res["Data"]["Payment"] && 774 res["Data"]["Payment"]["ValidPayment"] 775 ) { 776 $(".og-errors").html(""); 777 // Revenue tracking will be sent on the success page after redirect 778 // window.location.href = "https://netzach.shimon-k.com/%d7%aa%d7%95%d7%93%d7%94-%d7%a2%d7%9c-%d7%aa%d7%a8%d7%95%d7%9e%d7%aa%d7%9a/"; 779 } else { 780 // Payment failed or error 781 if (res["Data"] && res["Data"]["Payment"] && res["Data"]["Payment"]["StatusDescription"]) { 782 $(".og-errors").html(res["Data"]["Payment"]["StatusDescription"]); 783 } else { 784 $(".og-errors").html("ש×××× ××¢×××× ×תש×××. ×× × × ×¡× ×©××."); 785 } 786 btn.prop("disabled", false); 787 } 788 } 789 }, 790 }); 791 }); 792}); 793 794jQuery(function ($) { // use jQuery code inside this to avoid "$ is not defined" error 795 $('[loadmore]').click(function () { 796 797 let button = $(this), 798 data = { 799 'action': 'loadmore', 800 'query': ajax_params.posts, // that's how we get params from wp_localize_script() function 801 'page': ajax_params.current_page 802 }; 803 804 $.ajax({ // you can also use $.post here 805 url: ajax_params.ajax_url, // AJAX handler 806 data: data, 807 type: 'POST', 808 beforeSend: function (xhr) { 809 button.text('×××¢×...'); // change the button text, you can also add a preloader image 810 }, 811 success: function (data) { 812 if (data['success']) { 813 // console.log(data); 814 button.text('××¢× ×¢××'); // insert new posts 815 $('[loadmore-content]').append(data['data']) 816 ajax_params.current_page++; 817 818 if (ajax_params.current_page == ajax_params.max_page) 819 button.remove(); // if last page, remove the button 820 821 // you can also fire the "post-load" event here if you use a plugin that requires it 822 // $( document.body ).trigger( 'post-load' ); 823 } else { 824 button.remove(); // if no data, remove the button as well 825 } 826 } 827 }); 828 }); 829}); 830const log = (x => console.log()); 831$(document).ready(function () { 832 // log('start'); 833 AOS.init({ 834 once: true, 835 }); 836 837 antiSpamCommnets(); 838 // shareInit(); 839 840 $('[data-tab-clicker]').click(function () { 841 const $this = $(this); 842 const tabName = $this.data('tab-name'); 843 const targget = $($this.data('tab'));
844 $(`[data-tab-name="${tabName}"][data-tab-content]`).slideUp(); 845 if ($this.hasClass('active')) { 846 $(`[data-tab-name="${tabName}"]`).removeClass('active'); 847 } 848 else { 849 $(`[data-tab-name="${tabName}"]`).removeClass('active'); 850 $this.addClass('active'); 851 targget.slideDown(); 852 } 853 }) 854 855 /* mobile nav bar */ 856 $('#masthead').on('click', '.nav-warp', function (e) { 857 if (e.target.id != "nav-warp") return; 858 $('#nav-warp').toggleClass('active'); 859 }) 860 861 $('#masthead').on('click', '.hamburger-menu', function () { 862 $('#nav-warp').toggleClass('active'); 863 }) 864 865 $('ul.cat-menu li').each(function () { 866 if ($(this).hasClass('current-cat')) 867 $(this).addClass('current-menu-item'); 868 }) 869 870 $('.header-sub-menu').on('click', '.current-menu-item', function (e) { 871 e.preventDefault(); 872 $('.header-sub-menu ul.menu').toggleClass('hide'); 873 // console.log('click'); 874 }) 875 876 /****************/ 877 878 $('.toggle-menu').on('click',function () { 879 $(this).toggleClass('active'); 880 $('.header-menu-container').toggleClass('active'); 881 }); 882 883 // $('.hp_top__video__button').click(function () { 884 // console.log("click"); 885 // if ($(this).hasClass('fa-play-circle')) { 886 // //start video 887 // $('#hp_top__video')[0].src += "&autoplay=1"; 888 // } else { 889 // //stop video 890 // let videoURL = $('#hp_top__video').prop('src'); 891 // videoURL = videoURL.replace("&autoplay=1", ""); 892 // $('#hp_top__video').prop('src', videoURL); 893 // } 894 // $(this).toggleClass('fa-play-circle fa-pause-circle'); 895 896 // }); 897 898 $('.hp_top__video__button').on("click", function () { 899 const vid = document.querySelector(".hp_top__video_warp video"); 900 if ($(this).hasClass('fa-play-circle')) { 901 vid.play(); 902 } else { 903 vid.pause(); 904 } 905 $(this).toggleClass('fa-play-circle fa-pause-circle'); 906 907 }); 908 909 function isEmail(email) { 910 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 911 return regex.test(email); 912 } 913 914 /*Valid comment*/ 915 $('#commentform').on('submit', function (e) { 916 let unvalid = false; // handle if un valid 917 918 $('input#author,input#email,textarea#comment').removeClass('error-input'); // reset the class 919 920 // if exsist author and email check valid 921 if ($('input#author').length && $('input#email').length) { 922 if ($('input#author').val().length < 2) { 923 $('input#author').addClass('error-input'); unvalid = true; 924 } 925 if (!isEmail($('input#email').val())) { 926 $('input#email').addClass('error-input'); unvalid = true; 927 } 928 } 929 if ($('textarea#comment').val().length < 3) { 930 $('textarea#comment').addClass('error-input'); unvalid = true; 931 } 932 if (unvalid) { 933 e.preventDefault(); 934 } 935 }) 936 937 $('#header-menu').on('click', '.menu-item-has-children > a' , function (e) { 938 e.preventDefault(); 939 if($(document).width() > 700) return; 940 if ($(this).parents('li').find('.sub-menu').hasClass('active')) { 941 $(this).parents('ul').find('.active').slideToggle(250).removeClass('active'); 942 } else { 943 $(this).parents('ul').find('.active').slideToggle(250).removeClass('active'); 944 $(this).parents('li').find('.sub-menu').slideToggle(250).toggleClass('active'); 945 } 946 }); 947 948 /*************************/ 949 950 951 bgImgResize(); 952 dataDecoration() 953 954 955 956}); 957 958$(window).resize(function () { 959 bgImgResize(); 960 dataDecoration() 961}); 962$(document).ajaxComplete(function () { 963 bgImgResize(); 964}); 965 966 967function dataDecoration() { 968 $('[data-decoration]').each(function () { 969 border_right_size = $(this).data('border-right'); 970 border_right_size = $(window).width() * (border_right_size / 100); 971 border_left_size = $(window).width() - border_right_size + 1; 972 973 $(this).css({ "--size-border-right": border_right_size + "px", "--size-border-left": border_left_size + "px" }); 974 }); 975} 976 977function bgImgResize() { 978 $('[bg-img-resize-elipse]').each(function () { 979 $this = $(this); 980 width = $this.width(); 981 $this.height(width + 100); 982 }); 983 $('[bg-img-resize-circle]').each(function () { 984 $this = $(this); 985 width = $this.width(); 986 $this.height(width); 987 }); 988} 989 990function format(num) { 991 return String(num).replace(/\B(?=(\d{3})+(?!\d))/g, ","); 992} 993 994var numbersToUp = document.querySelector('.numbers-to-up-container'); 995var hasEntered = false; 996if (numbersToUp) { 997 window.addEventListener('scroll', (e) => { 998 var shouldAnimate = (window.scrollY + window.innerHeight) >= numbersToUp.offsetTop; 999 1000 1001 if (shouldAnimate && !hasEntered) { 1002 hasEntered = true; 1003 $('.numbers-to-up').each(function () { 1004 $(this).prop('Counter', 0).animate({ 1005 Counter: $(this).text() 1006 }, { 1007 duration: 4000, 1008 easing: 'swing', 1009 step: function (now) { 1010 $(this).text(Math.ceil(now)); 1011 }, 1012 complete: function () { 1013 $(this).text(format($(this).text())); 1014 } 1015 }); 1016 }); 1017 } 1018 }); 1019} 1020 1021$(window).on("scroll", function () { 1022 if ($(window).scrollTop() > 50) { 1023 $("#masthead").addClass("sticky"); 1024 } else { 1025 //remove the background property so it comes transparent again (defined in your css) 1026 $("#masthead").removeClass("sticky"); 1027 } 1028}); 1029 1030 1031 1032/*********Header Slider*************/ 1033 1034$(document).ready(function () { 1035 1036 if ($('#imgSlider').val()) { 1037 var imgSlider = JSON.parse($('#imgSlider').val()); 1038 var Slider = $('.entry-header-slider'); 1039 $('#imgSlider').remove(); 1040 // console.log(imgSlider); 1041 1042 setInterval(function () { 1043 slideshow(); 1044 }, 3000); 1045 } 1046 let slideIndex = 0; 1047 1048 function slideshow(direction = 1) { 1049 1050 slideIndex = slideIndex + direction; 1051 if (slideIndex >= imgSlider.length) slideIndex = 0; 1052 else if (slideIndex < 0) slideIndex = imgSlider.length - 1; 1053 1054 let nextSlide = imgSlider[slideIndex]; 1055 1056 Slider.animate({ opacity: 0 }, 'slow', function () { 1057 $(this).css({ '--bg-url': 'url(' + nextSlide['img'] + ')' }) 1058 .animate({ opacity: 1 }); 1059 });
1060 1061 $('.entry-header-slider-title').animate({ opacity: 0 }, 'slow', function () { 1062 $(this).html(nextSlide['title']) 1063 .animate({ opacity: 1 }); 1064 }); 1065 1066 }; 1067 1068 1069 $('[my-slider-next]').click(function () { 1070 slideshow(1); 1071 }) 1072 $('[my-slider-prev]').click(function () { 1073 slideshow(-1); 1074 }) 1075 1076 1077 1078}); 1079 1080 1081function antiSpamCommnets() { 1082 const comment_1 = $("#just_another_id"); 1083 if (!comment_1.length) return; 1084 const comment_2 = $("#comment"); 1085 comment_1.on("input", function () { 1086 comment_2.val(comment_1.val()); 1087 }); 1088} 1089 1090// function shareInit(){ 1091// if(!$('#share-warp').length) return; 1092// if(!navigator.share){ 1093// $('.share-it .navigator').hide(); 1094// $('.share-it .not-navigator').show(); 1095// } 1096// $('.navigator').on("click",".share-btn",function () { 1097// title = $(this).data('title'); 1098// url = $(this).data('url'); 1099// if (navigator.share) { 1100// navigator.share({ 1101// title: title, 1102// url: url, 1103// }).then(() => {console.log('Thanks for sharing!');}) 1104// .catch(console.error); 1105// } 1106// }); 1107// } 1108 1109/**********************************/ 1110 1111$(document).ready(function () { 1112 //disable the display none 1113 $('.modal').show(); 1114 1115 $('[open-modal]').click(function () { 1116 if ($(this).is('[data-get-content-to-modal]')) return; //if need to get content return and wait the content 1117 openModal($(this).data('modal-id')); //send modal to open modal function 1118 }); 1119 1120 $('[close-modal]').click(function () { 1121 $modal = $(this).data('modal-id'); 1122 $($modal).removeClass('active'); // close modal 1123 $('body').removeClass('modal-is-active'); 1124 1125 //$($modal +' .modal-content').css('margin-top', '0px'); // reset the postion for the animation 1126 if ($($modal).hasClass('owl-video-modal')) { 1127 stopVideoOwl(); 1128 } else { 1129 $($modal + ' iframe').attr('src', ''); // reset the iframe 1130 } 1131 }); 1132 1133 $('[data-get-content-to-modal]').click(function () { 1134 post_id = $(this).data('post-id'); 1135 modal = $(this).data('modal-id'); 1136 let data = { 1137 'action': 'get_post_content_api', 1138 'post_id': post_id 1139 } 1140 if ($('body').hasClass('page-template-page-donation')) { 1141 data.currency = $('select[name=donations-currency]').val(); 1142 } 1143 $.ajax({
1144 url: ajax_params.ajax_url, 1145 type: "POST", 1146 data: data, 1147 success: function (res) { 1148 $(modal + ' .modal-text').html(res); 1149 openModal(modal); 1150 // console.log(res); 1151 } 1152 }) 1153 1154 }); 1155 function openModal(modal) { 1156 $(modal).addClass('active'); // open modal 1157 $('body').addClass('modal-is-active'); 1158 //$(modal + ' .modal-content' ).css('margin-top',($(window).scrollTop()+200)+'px'); // position the modal 200px from top window 1159 } 1160 $('[modal-video]').click(function () { 1161 url = $(this).data('video-url'); // get the video url 1162 modal = $(this).data('modal-id'); // get the modal id 1163 // console.log(url) 1164 $(modal + ' iframe').attr('src', url); // update the iframe url 1165 }); 1166 1167 1168}) 1169//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFvcy5qcyIsIm93bC5jYXJvdXNlbC5taW4uanMiLCJvd2wuanMiLCJkb25hdGlvbi5qcyIsImxvYWRtb3JlLmpzIiwibWFpbi5qcyIsIm1vZGFsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDdlJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoibWFpbi5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLkFPUz10KCk6ZS5BT1M9dCgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobyl7aWYobltvXSlyZXR1cm4gbltvXS5leHBvcnRzO3ZhciBpPW5bb109e2V4cG9ydHM6e30saWQ6byxsb2FkZWQ6ITF9O3JldHVybiBlW29dLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLHQpLGkubG9hZGVkPSEwLGkuZXhwb3J0c312Y
1169XIgbj17fTtyZXR1cm4gdC5tPWUsdC5jPW4sdC5wPVwiZGlzdC9cIix0KDApfShbZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBpPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIG8gaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmKGVbb109bltvXSl9cmV0dXJuIGV9LHI9bigxKSxhPShvKHIpLG4oNikpLHU9byhhKSxjPW4oNykscz1vKGMpLGY9big4KSxkPW8oZiksbD1uKDkpLHA9byhsKSxtPW4oMTApLGI9byhtKSx2PW4oMTEpLHk9byh2KSxnPW4oMTQpLGg9byhnKSx3PVtdLGs9ITEseD17b2Zmc2V0OjEyMCxkZWxheTowLGVhc2luZzpcImVhc2VcIixkdXJhdGlvbjo0MDAsZGlzYWJsZTohMSxvbmNlOiExLHN0YXJ0RXZlbnQ6XCJET01Db250ZW50TG9hZGVkXCIsdGhyb3R0bGVEZWxheTo5OSxkZWJvdW5jZURlbGF5OjUwLGRpc2FibGVNdXRhdGlvbk9ic2VydmVyOiExfSxqPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZihlJiYoaz0hMCksaylyZXR1cm4gdz0oMCx5LmRlZmF1bHQpKHcseCksKDAsYi5kZWZhdWx0KSh3LHgub25jZSksd30sTz1mdW5jdGlvbigpe3c9KDAsaC5kZWZhdWx0KSgpLGooKX0sTT1mdW5jdGlvbigpe3cuZm9yRWFjaChmdW5jdGlvbihlLHQpe2Uubm9kZS5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWFvc1wiKSxlLm5vZGUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1hb3MtZWFzaW5nXCIpLGUubm9kZS5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWFvcy1kdXJhdGlvblwiKSxlLm5vZGUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1hb3MtZGVsYXlcIil9KX0sUz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PSEwfHxcIm1vYmlsZVwiPT09ZSYmcC5kZWZhdWx0Lm1vYmlsZSgpfHxcInBob25lXCI9PT1lJiZwLmRlZmF1bHQucGhvbmUoKXx8XCJ0YWJsZXRcIj09PWUmJnAuZGVmYXVsdC50YWJsZXQoKXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpPT09ITB9LF89ZnVuY3Rpb24oZSl7eD1pKHgsZSksdz0oMCxoLmRlZmF1bHQpKCk7dmFyIHQ9ZG9jdW1lbnQuYWxsJiYhd2luZG93LmF0b2I7cmV0dXJuIFMoeC5kaXNhYmxlKXx8dD9NKCk6KHguZGlzYWJsZU11dGF0aW9uT2JzZXJ2ZXJ8fGQuZGVmYXVsdC5pc1N1cHBvcnRlZCgpfHwoY29uc29sZS5pbmZvKCdcXG4gICAgICBhb3M6IE11dGF0aW9uT2JzZXJ2ZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGJyb3dzZXIsXFxuICAgICAgY29kZSBtdXRhdGlvbnMgb2JzZXJ2aW5nIGhhcyBiZWVuIGRpc2FibGVkLlxcbiAgICAgIFlvdSBtYXkgaGF2ZSB0byBjYWxsIFwicmVmcmVzaEhhcmQoKVwiIGJ5IHlvdXJzZWxmLlxcbiAgICAnKSx4LmRpc2FibGVNdXRhdGlvbk9ic2VydmVyPSEwKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFvcy1lYXNpbmdcIix4LmVhc2luZyksZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikuc2V0QXR0cmlidXRlKFwiZGF0YS1hb3MtZHVyYXRpb25cIix4LmR1cmF0aW9uKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFvcy1kZWxheVwiLHguZGVsYXkpLFwiRE9NQ29udGVudExvYWRlZFwiPT09eC5zdGFydEV2ZW50JiZbXCJjb21wbGV0ZVwiLFwiaW50ZXJhY3RpdmVcIl0uaW5kZXhPZihkb2N1bWVudC5yZWFkeVN0YXRlKT4tMT9qKCEwKTpcImxvYWRcIj09PXguc3RhcnRFdmVudD93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcih4LnN0YXJ0RXZlbnQsZnVuY3Rpb24oKXtqKCEwKX0pOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoeC5zdGFydEV2ZW50LGZ1bmN0aW9uKCl7aighMCl9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCgwLHMuZGVmYXVsdCkoaix4LmRlYm91bmNlRGVsYXksITApKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsKDAscy5kZWZhdWx0KShqLHguZGVib3VuY2VEZWxheSwhMCkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsKDAsdS5kZWZhdWx0KShmdW5jdGlvbigpeygwLGIuZGVmYXVsdCkodyx4Lm9uY2UpfSx4LnRocm90dGxlRGVsYXkpKSx4LmRpc2FibGVNdXRhdGlvbk9ic2VydmVyfHxkLmRlZmF1bHQucmVhZHkoXCJbZGF0YS1hb3NdXCIsTyksdyl9O2UuZXhwb3J0cz17aW5pdDpfLHJlZnJlc2g6aixyZWZyZXNoSGFyZDpPfX0sZnVuY3Rpb24oZSx0KXt9LCwsLCxmdW5jdGlvbihlLHQpeyhmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxuKXtmdW5jdGlvbiBvKHQpe3ZhciBuPWIsbz12O3JldHVybiBiPXY9dm9pZCAwLGs9dCxnPWUuYXBwbHkobyxuKX1mdW5jdGlvbiByKGUpe3JldHVybiBrPWUsaD1zZXRUaW1lb3V0KGYsdCksTT9vKGUpOmd9ZnVuY3Rpb24gYShlKXt2YXIgbj1lLXcsbz1lLWssaT10LW47cmV0dXJuIFM/aihpLHktbyk6aX1mdW5jdGlvbiBjKGUpe3ZhciBuPWUtdyxvPWUtaztyZXR1cm4gdm9pZCAwPT09d3x8bj49dHx8bjwwfHxTJiZvPj15fWZ1bmN0aW9uIGYoKXt2YXIgZT1PKCk7cmV0dXJuIGMoZSk/ZChlKTp2b2lkKGg9c2V0VGltZW91dChmLGEoZSkpKX1mdW5jdGlvbiBkKGUpe3JldHVybiBoPXZvaWQgMCxfJiZiP28oZSk6KGI9dj12b2lkIDAsZyl9ZnVuY3Rpb24gbCgpe3ZvaWQgMCE9PWgmJmNsZWFyVGltZW91dChoKSxrPTAsYj13PXY9aD12b2lkIDB9ZnVuY3Rpb24gcCgpe3JldHVybiB2b2lkIDA9PT1oP2c6ZChPKCkpfWZ1bmN0aW9uIG0oKXt2YXIgZT1PKCksbj1jKGUpO2lmKGI9YXJndW1lbnRzLHY9dGhpcyx3PWUsbil7aWYodm9pZCAwPT09aClyZXR1cm4gcih3KTtpZihTKXJldHVybi
1169BoPXNldFRpbWVvdXQoZix0KSxvKHcpfXJldHVybiB2b2lkIDA9PT1oJiYoaD1zZXRUaW1lb3V0KGYsdCkpLGd9dmFyIGIsdix5LGcsaCx3LGs9MCxNPSExLFM9ITEsXz0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3Iocyk7cmV0dXJuIHQ9dSh0KXx8MCxpKG4pJiYoTT0hIW4ubGVhZGluZyxTPVwibWF4V2FpdFwiaW4gbix5PVM/eCh1KG4ubWF4V2FpdCl8fDAsdCk6eSxfPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOl8pLG0uY2FuY2VsPWwsbS5mbHVzaD1wLG19ZnVuY3Rpb24gbyhlLHQsbyl7dmFyIHI9ITAsYT0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3Iocyk7cmV0dXJuIGkobykmJihyPVwibGVhZGluZ1wiaW4gbz8hIW8ubGVhZGluZzpyLGE9XCJ0cmFpbGluZ1wiaW4gbz8hIW8udHJhaWxpbmc6YSksbihlLHQse2xlYWRpbmc6cixtYXhXYWl0OnQsdHJhaWxpbmc6YX0pfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9XCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjpjKGUpO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2YgZT9cInVuZGVmaW5lZFwiOmMoZSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuXCJzeW1ib2xcIj09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6YyhlKSl8fHIoZSkmJmsuY2FsbChlKT09ZH1mdW5jdGlvbiB1KGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybi
1169BlO2lmKGEoZSkpcmV0dXJuIGY7aWYoaShlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1pKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKGwsXCJcIik7dmFyIG49bS50ZXN0KGUpO3JldHVybiBufHxiLnRlc3QoZSk/dihlLnNsaWNlKDIpLG4/Mjo4KTpwLnRlc3QoZSk/ZjorZX12YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxzPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLGY9TmFOLGQ9XCJbb2JqZWN0IFN5bWJvbF1cIixsPS9eXFxzK3xcXHMrJC9nLHA9L15bLStdMHhbMC05YS1mXSskL2ksbT0vXjBiWzAxXSskL2ksYj0vXjBvWzAtN10rJC9pLHY9cGFyc2VJbnQseT1cIm9iamVjdFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHQ/XCJ1bmRlZmluZWRcIjpjKHQpKSYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQsZz1cIm9iamVjdFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGY/XCJ1bmRlZmluZWRcIjpjKHNlbGYpKSYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaD15fHxnfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksdz1PYmplY3QucHJvdG90eXBlLGs9dy50b1N0cmluZyx4PU1hdGgubWF4LGo9TWF0aC5taW4sTz1mdW5jdGlvbigpe3JldHVybiBoLkRhdGUubm93KCl9O2UuZXhwb3J0cz1vfSkuY2FsbCh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbihlLHQpeyhmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxuKXtmdW5jdGlvbiBpKHQpe3ZhciBuPWIsbz12O3JldHVybiBiPXY9dm9pZCAwLE89dCxnPWUuYXBwbHkobyxuKX1mdW5jdGlvbiByKGUpe3JldHVybiBPPWUsaD1zZXRUaW1lb3V0KGYsdCksTT9pKGUpOmd9ZnVuY3Rpb24gdShlKXt2YXIgbj1lLXcsbz1lLU8saT10LW47cmV0dXJuIFM/eChpLHktbyk6aX1mdW5jdGlvbiBzKGUpe3ZhciBuPWUtdyxvPWUtTztyZXR1cm4gdm9pZCAwPT09d3x8bj49dHx8bjwwfHxTJiZvPj15fWZ1bmN0aW9uIGYoKXt2YXIgZT1qKCk7cmV0dXJuIHMoZSk/ZChlKTp2b2lkKGg9c2V0VGltZW91dChmLHUoZSkpKX1mdW5jdGlvbiBkKGUpe3JldHVybiBoPXZvaWQgMCxfJiZiP2koZSk6KGI9dj12b2lkIDAsZyl9ZnVuY3Rpb24gbCgpe3ZvaWQgMCE9PWgmJmNsZWFyVGltZW91dChoKSxPPTAsYj13PXY9aD12b2lkIDB9ZnVuY3Rpb24gcCgpe3JldHVybiB2b2lkIDA9PT1oP2c6ZChqKCkpfWZ1bmN0aW9uIG0oKXt2YXIgZT1qKCksbj1zKGUpO2lmKGI9YXJndW1lbnRzLHY9dGhpcyx3PWUsbil7aWYodm9pZCAwPT09aClyZXR1cm4gcih3KTtpZihTKXJldHVybi
1169BoPXNldFRpbWVvdXQoZix0KSxpKHcpfXJldHVybiB2b2lkIDA9PT1oJiYoaD1zZXRUaW1lb3V0KGYsdCkpLGd9dmFyIGIsdix5LGcsaCx3LE89MCxNPSExLFM9ITEsXz0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoYyk7cmV0dXJuIHQ9YSh0KXx8MCxvKG4pJiYoTT0hIW4ubGVhZGluZyxTPVwibWF4V2FpdFwiaW4gbix5PVM/ayhhKG4ubWF4V2FpdCl8fDAsdCk6eSxfPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOl8pLG0uY2FuY2VsPWwsbS5mbHVzaD1wLG19ZnVuY3Rpb24gbyhlKXt2YXIgdD1cInVuZGVmaW5lZFwiPT10eXBlb2YgZT9cInVuZGVmaW5lZFwiOnUoZSk7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBpKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6dShlKSl9ZnVuY3Rpb24gcihlKXtyZXR1cm5cInN5bWJvbFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjp1KGUpKXx8aShlKSYmdy5jYWxsKGUpPT1mfWZ1bmN0aW9uIGEoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYocihlKSlyZXR1cm4gcztpZihvKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPW8odCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UoZCxcIlwiKTt2YXIgbj1wLnRlc3QoZSk7cmV0dXJuIG58fG0udGVzdChlKT9iKGUuc2xpY2UoMiksbj8yOjgpOmwudGVzdChlKT9zOitlfXZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LGM9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIscz1OYU4sZj1cIltvYmplY3QgU3ltYm9sXVwiLGQ9L15cXHMrfFxccyskL2csbD0vXlstK10weFswLTlhLWZdKyQvaSxwPS9eMGJbMDFdKyQvaSxtPS9eMG9bMC03XSskL2ksYj1wYXJzZUludCx2PVwib2JqZWN0XCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2YgdD9cInVuZGVmaW5lZFwiOnUodCkpJiZ0JiZ0Lk9iamVjdD09PU9iamVjdCYmdCx5PVwib2JqZWN0XCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZj9cInVuZGVmaW5lZFwiOnUoc2VsZikpJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixnPXZ8fHl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxoPU9iamVjdC5wcm90b3R5cGUsdz1oLnRvU3RyaW5nLGs9TWF0aC5tYXgseD1NYXRoLm1pbixqPWZ1bmN0aW9uKCl7cmV0dXJuIGcuRGF0ZS5ub3coKX07ZS5leHBvcnRzPW59KS5jYWxsKHQsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKSl9LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXt2YXIgdD12b2lkIDAsbz12b2lkIDAsaT12b2lkIDA7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrPTEpe2lmKG89ZVt0XSxvLmRhdGFzZXQmJm8uZGF0YXNldC5hb3MpcmV0dXJuITA7aWYoaT1vLmNoaWxkcmVuJiZuKG8uY2hpbGRyZW4pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG8oKXtyZXR1cm4gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXJ8fHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyfHx3aW5kb3cuTW96TXV0YXRpb25PYnNlcnZlcn1mdW5jdGlvbiBpKCl7cmV0dXJuISFvKCl9ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXdpbmRvdy5kb2N1bWVudCxpPW8oKSxyPW5ldyBpKGEpO3U9dCxyLm9ic2VydmUobi5kb2N1bWVudEVsZW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwLHJlbW92ZWROb2RlczohMH0pfWZ1bmN0aW9uIGEoZSl7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYWRkZWROb2Rlcyksbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLnJlbW92ZWROb2RlcyksaT10LmNvbmNhdChvKTtpZihuKGkpKXJldHVybiB1KCl9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgdT1mdW5jdGlvbigpe307dC5kZWZhdWx0PXtpc1N1cHBvcnRlZDppLHJlYWR5OnJ9fSxmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudHx8bmF2aWdhdG9yLnZlbmRvcnx8d2luZG93Lm9wZXJhfHxcIlwifU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixvKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxvJiZlKHQsbyksdH19KCkscj0vKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vL2ksYT0vMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298c1xcLSl8YWko
1169a298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcXC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcXC0obnx1KXxjNTVcXC98Y2FwaXxjY3dhfGNkbVxcLXxjZWxsfGNodG18Y2xkY3xjbWRcXC18Y28obXB8bmQpfGNyYXd8ZGEoaXR8bGx8bmcpfGRidGV8ZGNcXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcXC18Xyl8ZzEgdXxnNTYwfGdlbmV8Z2ZcXC01fGdcXC1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkXFwtKG18cHx0KXxoZWlcXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1xcLWN8aHQoYyhcXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXFwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFxcLXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djXFwtfGt5byhjfGspfGxlKG5vfHhpKXxsZyggZ3xcXC8oa3xsfHUpfDUwfDU0fFxcLVthLXddKXxsaWJ3fGx5bnh8bTFcXC13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVxcLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFxcLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pXFwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcXC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cXC0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHRcXC1nfHFhXFwtYXxxYygwN3wxMnwyMXwzMnw2MHxcXC1bMi03XXxpXFwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFxcLXxvb3xwXFwtKXxzZGtcXC98c2UoYyhcXC18M
1169HwxKXw0N3xtY3xuZHxyaSl8c2doXFwtfHNoYXJ8c2llKFxcLXxtKXxza1xcLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aFxcLXx2XFwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXFwtfHRkZ1xcLXx0ZWwoaXxtKXx0aW1cXC18dFxcLW1vfHRvKHBsfHNoKXx0cyg3MHxtXFwtfG0zfG01KXx0eFxcLTl8dXAoXFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfFxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXFwtfHlvdXJ8emV0b3x6dGVcXC0vaSx1PS8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyBjZXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaSxjPS8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXFwtKXxhaShrb3xybil8YWwoYXZ8Y2F8Y28pfGFtb2l8YW4oZXh8bnl8eXcpfGFwdHV8YXIoY2h8Z28pfGFzKHRlfHVzKXxhdHR3fGF1KGRpfFxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1xcLShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtXFwtfGNlbGx8Y2h0bXxjbGRjfGNtZFxcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1xcLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8XFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFxcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlxcLTV8Z1xcLW1vfGdvKFxcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcXC0obXxwfHQpfGhlaVxcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXFwtY3xodChjKFxcLXwgfF98YXxnfHB8c3x0KXx0cCl8aHUoYXd8dGMpfGlcXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XFwtfFxcLyl8aWJyb3xpZGVhfGlnMDF8aWtvbXxpbTFrfGlubm98aXBhcXxpcmlzfGphKHR8dilhfGpicm98amVtdXxqaWdzfGtkZGl8a2VqaXxrZ3QoIHxcXC8pfGtsb258a3B0IHxrd2NcXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFxcLyhrfGx8dSl8NTB8NTR8XFwtW2Etd10pfGxpYnd8bHlueHxtMVxcLXd8bTNnYXxtNTBcXC98bWEodGV8dWl8eG8pfG1jKDAxfDIxfGNhKXxtXFwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcXC18b258dGZ8d2Z8d2d8d3QpfG5vayg2fGkpfG56cGh8bzJpbXxvcCh0aXx3dil8b3Jhbnxvd2cxfHA4MDB8cGFuKGF8ZHx0KXxwZHhnfHBnKDEzfFxcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblxcLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFxcLWd8cWFcXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFxcLVsyLTddfGlcXC0pfHF0ZWt8cjM4MHxyNjAwfHJha3N8cmltOXxybyh2ZXx6byl8czU1XFwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXFwtfG9vfHBcXC0pfHNka1xcL3xzZShjKFxcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcXC18c2hhcnxzaWUoXFwtfG0pfHNrXFwtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXFwtfHZcXC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcXC18dGRnXFwtfHRlbChpfG0pfHRpbVxcLXx0XFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cXC18bTN8bTUpfHR4XFwtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XFwtdil8dm00MHx2b2RhfHZ1bGN8dngoNTJ8NTN8NjB8NjF8NzB8ODB8ODF8ODN8ODV8OTgpfHczYyhcXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcXC18eW91cnx6ZXRvfHp0ZVxcLS9pLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bih0aGlzLGUpfXJldHVybiBpKGUsW3trZXk6XCJwaG9uZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9bygpO3JldHVybiEoIXIudGVzdChlKSYmIWEudGVzdChlLnN1YnN0cigwLDQpKSl9fSx7a2V5OlwibW9iaWxlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1vKCk7cmV0dXJuISghdS50ZXN0KGUpJiYhYy50ZXN0KGUuc3Vic3RyKDAsNCkpKX19LHtrZXk6XCJ0YWJsZXRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vYmlsZSgpJiYhdGhpcy5waG9uZSgpfX1dKSxlfSgpO3QuZGVmYXVsdD1uZXcgc30sZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIG89ZS5ub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtYW9zLW9uY2VcIik7dD5lLnBvc2l0aW9uP2Uubm9kZS5jbGFzc0xpc3QuYWRkKFwiYW9zLWFuaW1hdGVcIik6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG8mJihcImZhbHNlXCI9PT1vfHwhbiYmXCJ0cnVlXCIhPT1vKSYmZS5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhb3MtYW5pbWF0ZVwiKX0sbz1mdW5jdGlvbihlLHQpe3ZhciBvPXdpbmRvdy5wYWdlWU9mZnNldCxpPXdpbmRvdy5pbm5lckhlaWdodDtlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtuKGUsaStvLHQpfSl9O3QuZGVmYXVsdD1vfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9bigxMikscj1vKGkpLGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZS5ub2RlLmNsYXNzTGlzdC5hZGQoXCJhb3MtaW5pdFwiKSxlLnBvc2l0aW9uPSgwLHIuZGVmYXVsdCkoZS5ub2RlLHQub2Zmc2V0KX0pLGV9O3QuZGVmYXVsdD1hfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9bigxMykscj1vKGkpLGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wLG89MCxpPXdpbmRvdy5pbm5lckhlaWdodCxhPXtvZmZzZXQ6ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFvcy1vZmZzZXRcIiksYW5jaG9yOmUuZ2V0QXR0cmlidXRlKFwiZGF0YS1hb3MtYW5jaG9yXCIpLGFuY2hvclBsYWNlbWVudDplLmdldEF0dHJpYnV0ZShcImRhdGEtYW9zLWFuY2hvci1wbGFjZW1lbnRcIil9O3N3aXRjaC
1169hhLm9mZnNldCYmIWlzTmFOKGEub2Zmc2V0KSYmKG89cGFyc2VJbnQoYS5vZmZzZXQpKSxhLmFuY2hvciYmZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChhLmFuY2hvcikmJihlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYS5hbmNob3IpWzBdKSxuPSgwLHIuZGVmYXVsdCkoZSkudG9wLGEuYW5jaG9yUGxhY2VtZW50KXtjYXNlXCJ0b3AtYm90dG9tXCI6YnJlYWs7Y2FzZVwiY2VudGVyLWJvdHRvbVwiOm4rPWUub2Zmc2V0SGVpZ2h0LzI7YnJlYWs7Y2FzZVwiYm90dG9tLWJvdHRvbVwiOm4rPWUub2Zmc2V0SGVpZ2h0O2JyZWFrO2Nhc2VcInRvcC1jZW50ZXJcIjpuKz1pLzI7YnJlYWs7Y2FzZVwiYm90dG9tLWNlbnRlclwiOm4rPWkvMitlLm9mZnNldEhlaWdodDticmVhaztjYXNlXCJjZW50ZXItY2VudGVyXCI6bis9aS8yK2Uub2Zmc2V0SGVpZ2h0LzI7YnJlYWs7Y2FzZVwidG9wLXRvcFwiOm4rPWk7YnJlYWs7Y2FzZVwiYm90dG9tLXRvcFwiOm4rPWUub2Zmc2V0SGVpZ2h0K2k7YnJlYWs7Y2FzZVwiY2VudGVyLXRvcFwiOm4rPWUub2Zmc2V0SGVpZ2h0LzIraX1yZXR1cm4gYS5hbmNob3JQbGFjZW1lbnR8fGEub2Zmc2V0fHxpc05hTih0KXx8KG89dCksbitvfTt0LmRlZmF1bHQ9YX0sZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTA7ZSYmIWlzTmFOKGUub2Zmc2V0TGVmdCkmJiFpc05hTihlLm9mZnNldFRvcCk7KXQrPWUub2Zmc2V0TGVmdC0oXCJCT0RZXCIhPWUudGFnTmFtZT9lLnNjcm9sbExlZnQ6MCksbis9ZS5vZmZzZXRUb3AtKFwiQk9EWVwiIT1lLnRhZ05hbWU/ZS5zY3JvbGxUb3A6MCksZT1lLm9mZnNldFBhcmVudDtyZXR1cm57dG9wOm4sbGVmdDp0fX07dC5kZWZhdWx0PW59LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFvc11cIiksQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsZnVuY3Rpb24oZSl7cmV0dXJue25vZGU6ZX19KX07dC5kZWZhdWx0PW59XSl9KTsiLCIvKipcbiAqIE93bCBDYXJvdXNlbCB2Mi4zLjRcbiAqIENvcHlyaWdodCAyMDEzLTIwMTggRGF2aWQgRGV1dHNjaFxuICogTGljZW5zZWQgdW5kZXI6IFNFRSBMSUNFTlNFIElOIGh0dHBzOi8vZ2l0aHViLmNvbS9Pd2xDYXJvdXNlbDIvT3dsQ2Fyb3VzZWwyL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuIWZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjKXt0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGUuRGVmYXVsdHMsYyksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuX2hhbmRsZXJzPXt9LHRoaXMuX3BsdWdpbnM9e30sdGhpcy5fc3VwcmVzcz17fSx0aGlzLl9jdXJyZW50PW51bGwsdGhpcy5fc3BlZWQ9bnVsbCx0aGlzLl9jb29yZGluYXRlcz1bXSx0aGlzLl9icmVha3BvaW50PW51bGwsdGhpcy5fd2lkdGg9bnVsbCx0aGlzLl9pdGVtcz1bXSx0aGlzLl9jbG9uZXM9W10sdGhpcy5fbWVyZ2Vycz1bXSx0aGlzLl93aWR0aHM9W10sdGhpcy5faW52YWxpZGF0ZWQ9e30sdGhpcy5fcGlwZT1bXSx0aGlzLl9kcmFnPXt0aW1lOm51bGwsdGFyZ2V0Om51bGwscG9pbnRlcjpudWxsLHN0YWdlOntzdGFydDpudWxsLGN1cnJlbnQ6bnVsbH0sZGlyZWN0aW9uOm51bGx9LHRoaXMuX3N0YXRlcz17Y3VycmVudDp7fSx0YWdzOntpbml0aWFsaXppbmc6W1wiYnVzeVwiXSxhbmltYXRpbmc6W1wiYnVzeVwiXSxkcmFnZ2luZzpbXCJpbnRlcmFjdGluZ1wiXX19LGEuZWFjaChbXCJvblJlc2l6ZVwiLFwib25UaHJvdHRsZWRSZXNpemVcIl0sYS5wcm94eShmdW5jdGlvbihiLGMpe3RoaXMuX2hhbmRsZXJzW2NdPWEucHJveHkodGhpc1tjXSx0aGlzKX0sdGhpcykpLGEuZWFjaChlLlBsdWdpbnMsYS5wcm94eShmdW5jdGlvbihhLGIpe3RoaXMuX3BsdWdpbnNbYS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSthLnNsaWNlKDEpXT1uZXcgYih0aGlzKX0sdGhpcykpLGEuZWFjaChlLldvcmtlcnMsYS5wcm94eShmdW5jdGlvbihiLGMpe3RoaXMuX3BpcGUucHVzaCh7ZmlsdGVyOmMuZmlsdGVyLHJ1bjphLnByb3h5KGMucnVuLHRoaXMpfSl9LHRoaXMpKSx0aGlzLnNldHVwKCksdGhpcy5pbml0aWFsaXplKCl9ZS5EZWZhdWx0cz17aXRlbXM6Myxsb29wOiExLGNlbnRlcjohMSxyZXdpbmQ6ITEsY2hlY2tWaXNpYmlsaXR5OiEwLG1vdXNlRHJhZzohMCx0b3VjaERyYWc6ITAscHVsbERyYWc6ITAsZnJlZURyYWc6ITEsbWFyZ2luOjAsc3RhZ2VQYWRkaW5nOjAsbWVyZ2U6ITEsbWVyZ2VGaXQ6ITAsYXV0b1dpZHRoOiExLHN0YXJ0UG9zaXRpb246MCxydGw6ITEsc21hcnRTcGVlZDoyNTAsZmx1aWRTcGVlZDohMSxkcmFnRW5kU3BlZWQ6ITEscmVzcG9uc2l2ZTp7fSxyZXNwb25zaXZlUmVmcmVzaFJhdGU6MjAwLHJlc3BvbnNpdmVCYXNlRWxlbWVudDpiLGZhbGxiYWNrRWFzaW5nOlwic3dpbmdcIixzbGlkZVRyYW5zaXRpb246XCJcIixpbmZvOiExLG5lc3RlZEl0ZW1TZWxlY3RvcjohMSxpdGVtRWxlbWVudDpcImRpdlwiLHN0YWdlRWxlbWVudDpcImRpdlwiLHJlZnJlc2hDbGFzczpcIm93bC1yZWZyZXNoXCIsbG9hZGVkQ2xhc3M6XCJvd2wtbG9hZGVkXCIsbG9hZGluZ0NsYXNzOlwib3dsLWxvYWRpbmdcIixydGxDbGFzczpcIm93bC1ydGxcIixyZXNwb25zaXZlQ2xhc3M6XCJvd2wtcmVzcG9uc2l2ZVwiLGRyYWdDbGFzczpcIm93bC1kcmFnXCIsaXRlbUNsYXNzOlwib3dsLWl0ZW1cIixzdGFnZUNsYXNzOlwib3dsLXN0YWdlXCIsc3RhZ2VPdXRlckNsYXNzOlwib3dsLXN0YWdlLW91dGVyXCIsZ3JhYkNsYXNzOlwib3dsLWdyYWJcIn0sZS5XaWR0aD17RGVmYXVsdDpcImRlZmF1bHRcIixJbm5lcjpcImlubmVyXCIsT3V0ZXI6XCJvdXRlclwifSxlLlR5cGU9e0V2ZW50OlwiZXZlbnRcIixTdGF0ZTpcInN0YXRlXCJ9LGUuUGx1Z2lucz17fSxlLldvcmtlcnM9W3tmaWx0ZXI6W1wid2lkdGhcIixcInNldHRpbmdzXCJdLHJ1bjpmdW5jdGlvbigpe3RoaXMuX3dpZHRoPXRoaXMuJGVsZW1lbnQud2lkdGgoKX19LHtmaWx0ZXI6W1wid2lkdGhcIixcIml0ZW1zXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oYSl7YS5jdXJyZW50PXRoaXMuX2l0ZW
11691zJiZ0aGlzLl9pdGVtc1t0aGlzLnJlbGF0aXZlKHRoaXMuX2N1cnJlbnQpXX19LHtmaWx0ZXI6W1wiaXRlbXNcIixcInNldHRpbmdzXCJdLHJ1bjpmdW5jdGlvbigpe3RoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNsb25lZFwiKS5yZW1vdmUoKX19LHtmaWx0ZXI6W1wid2lkdGhcIixcIml0ZW1zXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZXR0aW5ncy5tYXJnaW58fFwiXCIsYz0hdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGgsZD10aGlzLnNldHRpbmdzLnJ0bCxlPXt3aWR0aDpcImF1dG9cIixcIm1hcmdpbi1sZWZ0XCI6ZD9iOlwiXCIsXCJtYXJnaW4tcmlnaHRcIjpkP1wiXCI6Yn07IWMmJnRoaXMuJHN0YWdlLmNoaWxkcmVuKCkuY3NzKGUpLGEuY3NzPWV9fSx7ZmlsdGVyOltcIndpZHRoXCIsXCJpdGVtc1wiLFwic2V0dGluZ3NcIl0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiPSh0aGlzLndpZHRoKCkvdGhpcy5zZXR0aW5ncy5pdGVtcykudG9GaXhlZCgzKS10aGlzLnNldHRpbmdzLm1hcmdpbixjPW51bGwsZD10aGlzLl9pdGVtcy5sZW5ndGgsZT0hdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGgsZj1bXTtmb3IoYS5pdGVtcz17bWVyZ2U6ITEsd2lkdGg6Yn07ZC0tOyljPXRoaXMuX21lcmdlcnNbZF0sYz10aGlzLnNldHRpbmdzLm1lcmdlRml0JiZNYXRoLm1pbihjLHRoaXMuc2V0dGluZ3MuaXRlbXMpfHxjLGEuaXRlbXMubWVyZ2U9Yz4xfHxhLml0ZW1zLm1lcmdlLGZbZF09ZT9iKmM6dGhpcy5faXRlbXNbZF0ud2lkdGgoKTt0aGlzLl93aWR0aHM9Zn19LHtmaWx0ZXI6W1wiaXRlbXNcIixcInNldHRpbmdzXCJdLHJ1bjpmdW5jdGlvbigpe3ZhciBiPVtdLGM9dGhpcy5faXRlbXMsZD10aGlzLnNldHRpbmdzLGU9TWF0aC5tYXgoMipkLml0ZW1zLDQpLGY9MipNYXRoLmNlaWwoYy5sZW5ndGgvMiksZz1kLmxvb3AmJmMubGVuZ3RoP2QucmV3aW5kP2U6TWF0aC5tYXgoZSxmKTowLGg9XCJcIixpPVwiXCI7Zm9yKGcvPTI7Zz4wOyliLnB1c2godGhpcy5ub3JtYWxpemUoYi5sZW5ndGgvMiwhMCkpLGgrPWNbYltiLmxlbmd0aC0xXV1bMF0ub3V0ZXJIVE1MLGIucHVzaCh0aGlzLm5vcm1hbGl6ZShjLmxlbmd0aC0xLShiLmxlbmd0aC0xKS8yLCEwKSksaT1jW2JbYi5sZW5ndGgtMV1dWzBdLm91dGVySFRNTCtpLGctPTE7dGhpcy5fY2xvbmVzPWIsYShoKS5hZGRDbGFzcyhcImNsb25lZFwiKS5hcHBlbmRUbyh0aGlzLiRzdGFnZSksYShpKS5hZGRDbGFzcyhcImNsb25lZFwiKS5wcmVwZW5kVG8odGhpcy4kc3RhZ2UpfX0se2ZpbHRlcjpbXCJ3aWR0aFwiLFwiaXRlbXNcIixcInNldHRpbmdzXCJdLHJ1bjpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnNldHRpbmdzLnJ0bD8xOi0xLGI9dGhpcy5fY2xvbmVzLmxlbmd0aCt0aGlzLl9pdGVtcy5sZW5ndGgsYz0tMSxkPTAsZT0wLGY9W107KytjPGI7KWQ9ZltjLTFdfHwwLGU9dGhpcy5fd2lkdGhzW3RoaXMucmVsYXRpdmUoYyldK3RoaXMuc2V0dGluZ3MubWFyZ2luLGYucHVzaChkK2UqYSk7dGhpcy5fY29vcmRpbmF0ZXM9Zn19LHtmaWx0ZXI6W1wid2lkdGhcIixcIml0ZW1zXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNldHRpbmdzLnN0YWdlUGFkZGluZyxiPXRoaXMuX2Nvb3JkaW5hdGVzLGM9e3dpZHRoOk1hdGguY2VpbChNYXRoLmFicyhiW2IubGVuZ3RoLTFdKSkrMiphLFwicGFkZGluZy1sZWZ0XCI6YXx8XCJcIixcInBhZGRpbmctcmlnaHRcIjphfHxcIlwifTt0aGlzLiRzdGFnZS5jc3MoYyl9fSx7ZmlsdGVyOltcIndpZHRoXCIsXCJpdGVtc1wiLFwic2V0dGluZ3NcIl0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aCxjPSF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCxkPXRoaXMuJHN0YWdlLmNoaWxkcmVuKCk7aWYoYyYmYS5pdGVtcy5tZXJnZSlmb3IoO2ItLTspYS5jc3Mud2lkdGg9dGhpcy5fd2lkdGhzW3RoaXMucmVsYXRpdmUoYildLGQuZXEoYikuY3NzKGEuY3NzKTtlbHNlIGMmJihhLmNzcy53aWR0aD1hLml0ZW1zLndpZHRoLGQuY3NzKGEuY3NzKSl9fSx7ZmlsdGVyOltcIml0ZW1zXCJdLHJ1bjpmdW5jdGlvbigpe3RoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aDwxJiZ0aGlzLiRzdGFnZS5yZW1vdmVBdHRyKFwic3R5bGVcIil9fSx7ZmlsdGVyOltcIndpZHRoXCIsXCJpdGVtc1wiLFwic2V0dGluZ3NcIl0scnVuOmZ1bmN0aW9uKGEpe2EuY3VycmVudD1hLmN1cnJlbnQ/dGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5pbmRleChhLmN1cnJlbnQpOjAsYS5jdXJyZW50PU1hdGgubWF4KHRoaXMubWluaW11bSgpLE1hdGgubWluKHRoaXMubWF4aW11bSgpLGEuY3VycmVudCkpLHRoaXMucmVzZXQoYS5jdXJyZW50KX19LHtmaWx0ZXI6W1wicG9zaXRpb25cIl0scnVuOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRlKHRoaXMuY29vcmRpbmF0ZXModGhpcy5fY3VycmVudCkpfX0se2ZpbHRlcjpbXCJ3aWR0aFwiLFwicG9zaXRpb25cIixcIml0ZW1zXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlPXRoaXMuc2V0dGluZ3MucnRsPzE6LTEsZj0yKnRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nLGc9dGhpcy5jb29yZGluYXRlcyh0aGlzLmN1cnJlbnQoKSkrZixoPWcrdGhpcy53aWR0aCgpKmUsaT1bXTtmb3IoYz0wLGQ9dGhpcy5fY29vcmRpbmF0ZXMubGVuZ3RoO2M8ZDtjKyspYT10aGlzLl9jb29yZGluYXRlc1tjLTFdfHwwLGI9TWF0aC5hYnModGhpcy5fY29vcmRpbmF0ZXNbY10pK2YqZSwodGhpcy5vcChhLFwiPD1cIixnKSYmdGhpcy5vcChhLFwiPlwiLGgpfHx0aGlzLm9wKGIsXCI8XCIsZykmJnRoaXMub3AoYixcIj5cIixoKSkmJmkucHVzaChjKTt0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksdGhpcy4kc3RhZ2UuY2hpbGRyZW4oXCI6ZXEoXCIraS5qb2luKFwiKSwgOmVxKFwiKStcIilcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIiksdGhpcy4kc3RhZ2UuY2hpbGRyZW4oXCIuY2VudGVyXCIpLnJlbW92ZUNsYXNzKFwiY2VudGVyXCIpLHRoaXMuc2V0dGluZ3MuY2VudGVyJiZ0aGlzLiRzdGFnZS5jaGlsZHJlbigpLmVxKHRoaXMuY3VycmVudCgpKS5hZGRDbGFzcyhcImNlbnRlclwiKX19XSxlLnByb3RvdHlwZS5pbml0aWFsaXplU3RhZ2U9ZnVuY3Rpb24oKXt0aGlzLiRzdGFnZT10aGlzLiRlbGVtZW50LmZpbmQoXCIuXCIrdGh
1169pcy5zZXR0aW5ncy5zdGFnZUNsYXNzKSx0aGlzLiRzdGFnZS5sZW5ndGh8fCh0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLHRoaXMuJHN0YWdlPWEoXCI8XCIrdGhpcy5zZXR0aW5ncy5zdGFnZUVsZW1lbnQrXCI+XCIse2NsYXNzOnRoaXMuc2V0dGluZ3Muc3RhZ2VDbGFzc30pLndyYXAoYShcIjxkaXYvPlwiLHtjbGFzczp0aGlzLnNldHRpbmdzLnN0YWdlT3V0ZXJDbGFzc30pKSx0aGlzLiRlbGVtZW50LmFwcGVuZCh0aGlzLiRzdGFnZS5wYXJlbnQoKSkpfSxlLnByb3RvdHlwZS5pbml0aWFsaXplSXRlbXM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLiRlbGVtZW50LmZpbmQoXCIub3dsLWl0ZW1cIik7aWYoYi5sZW5ndGgpcmV0dXJuIHRoaXMuX2l0ZW1zPWIuZ2V0KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBhKGIpfSksdGhpcy5fbWVyZ2Vycz10aGlzLl9pdGVtcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gMX0pLHZvaWQgdGhpcy5yZWZyZXNoKCk7dGhpcy5yZXBsYWNlKHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy4kc3RhZ2UucGFyZW50KCkpKSx0aGlzLmlzVmlzaWJsZSgpP3RoaXMucmVmcmVzaCgpOnRoaXMuaW52YWxpZGF0ZShcIndpZHRoXCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRpbmdDbGFzcykuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRlZENsYXNzKX0sZS5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZW50ZXIoXCJpbml0aWFsaXppbmdcIiksdGhpcy50cmlnZ2VyKFwiaW5pdGlhbGl6ZVwiKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMuc2V0dGluZ3MucnRsQ2xhc3MsdGhpcy5zZXR0aW5ncy5ydGwpLHRoaXMuc2V0dGluZ3MuYXV0b1dpZHRoJiYhdGhpcy5pcyhcInByZS1sb2FkaW5nXCIpKXt2YXIgYSxiLGM7YT10aGlzLiRlbGVtZW50LmZpbmQoXCJpbWdcIiksYj10aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3Rvcj9cIi5cIit0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvcjpkLGM9dGhpcy4kZWxlbWVudC5jaGlsZHJlbihiKS53aWR0aCgpLGEubGVuZ3RoJiZjPD0wJiZ0aGlzLnByZWxvYWRBdXRvV2lkdGhJbWFnZXMoYSl9dGhpcy5pbml0aWFsaXplU3RhZ2UoKSx0aGlzLmluaXRpYWxpemVJdGVtcygpLHRoaXMucmVnaXN0ZXJFdmVudEhhbmRsZXJzKCksdGhpcy5sZWF2ZShcImluaXRpYWxpemluZ1wiKSx0aGlzLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiKX0sZS5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc2V0dGluZ3MuY2hlY2tWaXNpYmlsaXR5fHx0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIil9LGUucHJvdG90eXBlLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWV3cG9ydCgpLGM9dGhpcy5vcHRpb25zLnJlc3BvbnNpdmUsZD0tMSxlPW51bGw7Yz8oYS5lYWNoKGMsZnVuY3Rpb24oYSl7YTw9YiYmYT5kJiYoZD1OdW1iZXIoYSkpfSksZT1hLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMsY1tkXSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5zdGFnZVBhZGRpbmcmJihlLnN0YWdlUGFkZGluZz1lLnN0YWdlUGFkZGluZygpKSxkZWxldGUgZS5yZXNwb25zaXZlLGUucmVzcG9uc2l2ZUNsYXNzJiZ0aGlzLiRlbGVtZW50LmF0dHIoXCJjbGFzc1wiLHRoaXMuJGVsZW1lbnQuYXR0cihcImNsYXNzXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcIit0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUNsYXNzK1wiLSlcXFxcUytcXFxcc1wiLFwiZ1wiKSxcIiQxXCIrZCkpKTplPWEuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyksdGhpcy50cmlnZ2VyKFwiY2hhbmdlXCIse3Byb3BlcnR5OntuYW1lOlwic2V0dGluZ3NcIix2YWx1ZTplfX0pLHRoaXMuX2JyZWFrcG9pbnQ9ZCx0aGlzLnNldHRpbmdzPWUsdGhpcy5pbnZhbGlkYXRlKFwic2V0dGluZ3NcIiksdGhpcy50cmlnZ2VyKFwiY2hhbmdlZFwiLHtwcm9wZXJ0eTp7bmFtZTpcInNldHRpbmdzXCIsdmFsdWU6dGhpcy5zZXR0aW5nc319KX0sZS5wcm90b3R5cGUub3B0aW9uc0xvZ2ljPWZ1bmN0aW9uKCl7dGhpcy5zZXR0aW5ncy5hdXRvV2lkdGgmJih0aGlzLnNldHRpbmdzLnN0YWdlUGFkZGluZz0hMSx0aGlzLnNldHRpbmdzLm1lcmdlPSExKX0sZS5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzLnRyaWdnZXIoXCJwcmVwYXJlXCIse2NvbnRlbnQ6Yn0pO3JldHVybiBjLmRhdGF8fChjLmRhdGE9YShcIjxcIit0aGlzLnNldHRpbmdzLml0ZW1FbGVtZW50K1wiLz5cIikuYWRkQ2xhc3ModGhpcy5vcHRpb25zLml0ZW1DbGFzcykuYXBwZW5kKGIpKSx0aGlzLnRyaWdnZXIoXCJwcmVwYXJlZFwiLHtjb250ZW50OmMuZGF0YX0pLGMuZGF0YX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPTAsYz10aGlzLl9waXBlLmxlbmd0aCxkPWEucHJveHkoZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXNbYV19LHRoaXMuX2ludmFsaWRhdGVkKSxlPXt9O2I8YzspKHRoaXMuX2ludmFsaWRhdGVkLmFsbHx8YS5ncmVwKHRoaXMuX3BpcGVbYl0uZmlsdGVyLGQpLmxlbmd0aD4wKSYmdGhpcy5fcGlwZVtiXS5ydW4oZSksYisrO3RoaXMuX2ludmFsaWRhdGVkPXt9LCF0aGlzLmlzKFwidmFsaWRcIikmJnRoaXMuZW50ZXIoXCJ2YWxpZFwiKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oYSl7c3dpdGNoKGE9YXx8ZS5XaWR0aC5EZWZhdWx0KXtjYXNlIGUuV2lkdGguSW5uZXI6Y2FzZSBlLldpZHRoLk91dGVyOnJldHVybiB0aGlzLl93aWR0aDtkZWZhdWx0OnJldHVybiB0aGlzLl93aWR0aC0yKnRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nK3RoaXMuc2V0dGluZ3MubWFyZ2lufX0sZS5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3RoaXMuZW50ZXIoXCJyZWZyZXNoaW5nXCIpLHRoaXMudHJpZ2dlcihcInJlZnJlc2hcIiksdGhpcy5zZXR1cCgpLHRoaXMub3B0aW9uc0xvZ2ljKCksdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMucmVmcmVzaENsYXNzKSx0aGlzLnVwZGF0ZSgpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLnJlZnJlc2hDbGFzcyksdGhpcy5sZWF2ZShcInJlZnJlc2hpbmdcIiksdGhpcy50cmlnZ2VyKFwicmVmcmVzaGVkXCIpfSxlLnByb3RvdHlwZS5vblRocm90dGxlZFJlc2l6ZT1mdW5jdGlvbigpe2IuY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZXIpLHRoaXMucmVzaXplVGltZXI9Yi5zZXRUaW
11691lb3V0KHRoaXMuX2hhbmRsZXJzLm9uUmVzaXplLHRoaXMuc2V0dGluZ3MucmVzcG9uc2l2ZVJlZnJlc2hSYXRlKX0sZS5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2l0ZW1zLmxlbmd0aCYmKHRoaXMuX3dpZHRoIT09dGhpcy4kZWxlbWVudC53aWR0aCgpJiYoISF0aGlzLmlzVmlzaWJsZSgpJiYodGhpcy5lbnRlcihcInJlc2l6aW5nXCIpLHRoaXMudHJpZ2dlcihcInJlc2l6ZVwiKS5pc0RlZmF1bHRQcmV2ZW50ZWQoKT8odGhpcy5sZWF2ZShcInJlc2l6aW5nXCIpLCExKToodGhpcy5pbnZhbGlkYXRlKFwid2lkdGhcIiksdGhpcy5yZWZyZXNoKCksdGhpcy5sZWF2ZShcInJlc2l6aW5nXCIpLHZvaWQgdGhpcy50cmlnZ2VyKFwicmVzaXplZFwiKSkpKSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyRXZlbnRIYW5kbGVycz1mdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRzdGFnZS5vbihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQrXCIub3dsLmNvcmVcIixhLnByb3h5KHRoaXMub25UcmFuc2l0aW9uRW5kLHRoaXMpKSwhMSE9PXRoaXMuc2V0dGluZ3MucmVzcG9uc2l2ZSYmdGhpcy5vbihiLFwicmVzaXplXCIsdGhpcy5faGFuZGxlcnMub25UaHJvdHRsZWRSZXNpemUpLHRoaXMuc2V0dGluZ3MubW91c2VEcmFnJiYodGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZHJhZ0NsYXNzKSx0aGlzLiRzdGFnZS5vbihcIm1vdXNlZG93bi5vd2wuY29yZVwiLGEucHJveHkodGhpcy5vbkRyYWdTdGFydCx0aGlzKSksdGhpcy4kc3RhZ2Uub24oXCJkcmFnc3RhcnQub3dsLmNvcmUgc2VsZWN0c3RhcnQub3dsLmNvcmVcIixmdW5jdGlvbigpe3JldHVybiExfSkpLHRoaXMuc2V0dGluZ3MudG91Y2hEcmFnJiYodGhpcy4kc3RhZ2Uub24oXCJ0b3VjaHN0YXJ0Lm93bC5jb3JlXCIsYS5wcm94eSh0aGlzLm9uRHJhZ1N0YXJ0LHRoaXMpKSx0aGlzLiRzdGFnZS5vbihcInRvdWNoY2FuY2VsLm93bC5jb3JlXCIsYS5wcm94eSh0aGlzLm9uRHJhZ0VuZCx0aGlzKSkpfSxlLnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihiKXt2YXIgZD1udWxsOzMhPT1iLndoaWNoJiYoYS5zdXBwb3J0LnRyYW5zZm9ybT8oZD10aGlzLiRzdGFnZS5jc3MoXCJ0cmFuc2Zvcm1cIikucmVwbGFjZSgvLipcXCh8XFwpfCAvZyxcIlwiKS5zcGxpdChcIixcIiksZD17eDpkWzE2PT09ZC5sZW5ndGg/MTI6NF0seTpkWzE2PT09ZC5sZW5ndGg/MTM6NV19KTooZD10aGlzLiRzdGFnZS5wb3NpdGlvbigpLGQ9e3g6dGhpcy5zZXR0aW5ncy5ydGw/ZC5sZWZ0K3RoaXMuJHN0YWdlLndpZHRoKCktdGh
1169pcy53aWR0aCgpK3RoaXMuc2V0dGluZ3MubWFyZ2luOmQubGVmdCx5OmQudG9wfSksdGhpcy5pcyhcImFuaW1hdGluZ1wiKSYmKGEuc3VwcG9ydC50cmFuc2Zvcm0/dGhpcy5hbmltYXRlKGQueCk6dGhpcy4kc3RhZ2Uuc3RvcCgpLHRoaXMuaW52YWxpZGF0ZShcInBvc2l0aW9uXCIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMub3B0aW9ucy5ncmFiQ2xhc3MsXCJtb3VzZWRvd25cIj09PWIudHlwZSksdGhpcy5zcGVlZCgwKSx0aGlzLl9kcmFnLnRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCksdGhpcy5fZHJhZy50YXJnZXQ9YShiLnRhcmdldCksdGhpcy5fZHJhZy5zdGFnZS5zdGFydD1kLHRoaXMuX2RyYWcuc3RhZ2UuY3VycmVudD1kLHRoaXMuX2RyYWcucG9pbnRlcj10aGlzLnBvaW50ZXIoYiksYShjKS5vbihcIm1vdXNldXAub3dsLmNvcmUgdG91Y2hlbmQub3dsLmNvcmVcIixhLnByb3h5KHRoaXMub25EcmFnRW5kLHRoaXMpKSxhKGMpLm9uZShcIm1vdXNlbW92ZS5vd2wuY29yZSB0b3VjaG1vdmUub3dsLmNvcmVcIixhLnByb3h5KGZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnBvaW50ZXIsdGhpcy5wb2ludGVyKGIpKTthKGMpLm9uKFwibW91c2Vtb3ZlLm93bC5jb3JlIHRvdWNobW92ZS5vd2wuY29yZVwiLGEucHJveHkodGhpcy5vbkRyYWdNb3ZlLHRoaXMpKSxNYXRoLmFicyhkLngpPE1hdGguYWJzKGQueSkmJnRoaXMuaXMoXCJ2YWxpZFwiKXx8KGIucHJldmVudERlZmF1bHQoKSx0aGlzLmVudGVyKFwiZHJhZ2dpbmdcIiksdGhpcy50cmlnZ2VyKFwiZHJhZ1wiKSl9LHRoaXMpKSl9LGUucHJvdG90eXBlLm9uRHJhZ01vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxjPW51bGwsZD1udWxsLGU9dGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlcix0aGlzLnBvaW50ZXIoYSkpLGY9dGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcuc3RhZ2Uuc3RhcnQsZSk7dGhpcy5pcyhcImRyYWdnaW5nXCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0dGluZ3MubG9vcD8oYj10aGlzLmNvb3JkaW5hdGVzKHRoaXMubWluaW11bSgpKSxjPXRoaXMuY29vcmRpbmF0ZXModGhpcy5tYXhpbXVtKCkrMSktYixmLng9KChmLngtYiklYytjKSVjK2IpOihiPXRoaXMuc2V0dGluZ3MucnRsP3RoaXMuY29vcmRpbmF0ZXModGhpcy5tYXhpbXVtKCkpOnRoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpLGM9dGhpcy5zZXR0aW5ncy5ydGw/dGhpcy5jb29yZGluYXRlcyh0aGlzLm1pbmltdW0oKSk6dGhpcy5jb29yZGluYXRlcyh0aGlzLm1heGltdW0oKSksZD10aGlzLnNldHRpbmdzLnB1bGxEcmFnPy0xKmUueC81OjAsZi54PU1hdGgubWF4KE1hdGgubWluKGYueCxiK2QpLGMrZCkpLHRoaXMuX2RyYWcuc3RhZ2UuY3VycmVudD1mLHRoaXMuYW5pbWF0ZShmLngpKX0sZS5wcm90b3R5cGUub25EcmFnRW5kPWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnBvaW50ZXIsdGhpcy5wb2ludGVyKGIpKSxlPXRoaXMuX2RyYWcuc3RhZ2UuY3VycmVudCxmPWQueD4wXnRoaXMuc2V0dGluZ3MucnRsP1wibGVmdFwiOlwicmlnaHRcIjthKGMpLm9mZihcIi5vd2wuY29yZVwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ncmFiQ2xhc3MpLCgwIT09ZC54JiZ0aGlzLmlzKFwiZHJhZ2dpbmdcIil8fCF0aGlzLmlzKFwidmFsaWRcIikpJiYodGhpcy5zcGVlZCh0aGlzLnNldHRpbmdzLmRyYWdFbmRTcGVlZHx8dGhpcy5zZXR0aW5ncy5zbWFydFNwZWVkKSx0aGlzLmN1cnJlbnQodGhpcy5jbG9zZXN0KGUueCwwIT09ZC54P2Y6dGhpcy5fZHJhZy5kaXJlY3Rpb24pKSx0aGlzLmludmFsaWRhdGUoXCJwb3NpdGlvblwiKSx0aGlzLnVwZGF0ZSgpLHRoaXMuX2RyYWcuZGlyZWN0aW9uPWYsKE1hdGguYWJzKGQueCk+M3x8KG5ldyBEYXRlKS5nZXRUaW1lKCktdGhpcy5fZHJhZy50aW1lPjMwMCkmJnRoaXMuX2RyYWcudGFyZ2V0Lm9uZShcImNsaWNrLm93bC5jb3JlXCIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pKSx0aGlzLmlzKFwiZHJhZ2dpbmdcIikmJih0aGlzLmxlYXZlKFwiZHJhZ2dpbmdcIiksdGhpcy50cmlnZ2VyKFwiZHJhZ2dlZFwiKSl9LGUucHJvdG90eXBlLmNsb3Nlc3Q9ZnVuY3Rpb24oYixjKXt2YXIgZT0tMSxmPTMwLGc9dGhpcy53aWR0aCgpLGg9dGhpcy5jb29yZGluYXRlcygpO3JldHVybiB0aGlzLnNldHRpbmdzLmZyZWVEcmFnfHxhLmVhY2goaCxhLnByb3h5KGZ1bmN0aW9uKGEsaSl7cmV0dXJuXCJsZWZ0XCI9PT1jJiZiPmktZiYmYjxpK2Y/ZT1hOlwicmlnaHRcIj09PWMmJmI+aS1nLWYmJmI8aS1nK2Y/ZT1hKzE6dGhpcy5vcChiLFwiPFwiLGkpJiZ0aGlzLm9wKGIsXCI+XCIsaFthKzFdIT09ZD9oW2ErMV06aS1nKSYmKGU9XCJsZWZ0XCI9PT1jP2ErMTphKSwtMT09PWV9LHRoaXMpKSx0aGlzLnNldHRpbmdzLmxvb3B8fCh0aGlzLm9wKGIsXCI+XCIsaFt0aGlzLm1pbmltdW0oKV0pP2U9Yj10aGlzLm1pbmltdW0oKTp0aGlzLm9wKGIsXCI8XCIsaFt0aGlzLm1heGltdW0oKV0pJiYoZT1iPXRoaXMubWF4aW11bSgpKSksZX0sZS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzLnNwZWVkKCk+MDt0aGlzLmlzKFwiYW5pbWF0aW5nXCIpJiZ0aGlzLm9uVHJhbnNpdGlvbkVuZCgpLGMmJih0aGlzLmVudGVyKFwiYW5pbWF0aW5nXCIpLHRoaXMudHJpZ2dlcihcInRyYW5zbGF0ZVwiKSksYS5zdXBwb3J0LnRyYW5zZm9ybTNkJiZhLnN1cHBvcnQudHJhbnNpdGlvbj90aGlzLiRzdGFnZS5jc3Moe3RyYW5zZm9ybTpcInRyYW5zbGF0ZTNkKFwiK2IrXCJweCwwcHgsMHB4KVwiLHRyYW5zaXRpb246dGhpcy5zcGVlZCgpLzFlMytcInNcIisodGhpcy5zZXR0aW5ncy5zbGlkZVRyYW5zaXRpb24/XCIgXCIrdGhpcy5zZXR0aW5ncy5zbGlkZVRyYW5zaXRpb246XCJcIil9KTpjP3RoaXMuJHN0YWdlLmFuaW1hdGUoe2xlZnQ6YitcInB4XCJ9LHRoaXMuc3BlZWQoKSx0aGlzLnNldHRpbmdzLmZhbGxiYWNrRWFzaW5nLGEucHJveHkodGhpcy5vblRyYW5zaXRpb25FbmQsdGhpcykpOnRoaXMuJHN0YWdlLmNzcyh7bGVmdDpiK1wicHhcIn0pfSxlLnByb3RvdHlwZS5pcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fc3RhdGVzLmN1cnJlbnRbYV0mJnRoaXMuX3N0YXRlcy5jdXJyZW50W2FdPjB9LGUucHJvdG90eXBlLmN1cnJlbnQ9ZnVuY3Rpb24oYSl7aWYoYT09PWQpcmV0dXJuIHRoaXMuX2N1cnJlbnQ7aWYoMD09PXRoaXMuX2l0ZW
11691zLmxlbmd0aClyZXR1cm4gZDtpZihhPXRoaXMubm9ybWFsaXplKGEpLHRoaXMuX2N1cnJlbnQhPT1hKXt2YXIgYj10aGlzLnRyaWdnZXIoXCJjaGFuZ2VcIix7cHJvcGVydHk6e25hbWU6XCJwb3NpdGlvblwiLHZhbHVlOmF9fSk7Yi5kYXRhIT09ZCYmKGE9dGhpcy5ub3JtYWxpemUoYi5kYXRhKSksdGhpcy5fY3VycmVudD1hLHRoaXMuaW52YWxpZGF0ZShcInBvc2l0aW9uXCIpLHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7cHJvcGVydHk6e25hbWU6XCJwb3NpdGlvblwiLHZhbHVlOnRoaXMuX2N1cnJlbnR9fSl9cmV0dXJuIHRoaXMuX2N1cnJlbnR9LGUucHJvdG90eXBlLmludmFsaWRhdGU9ZnVuY3Rpb24oYil7cmV0dXJuXCJzdHJpbmdcIj09PWEudHlwZShiKSYmKHRoaXMuX2ludmFsaWRhdGVkW2JdPSEwLHRoaXMuaXMoXCJ2YWxpZFwiKSYmdGhpcy5sZWF2ZShcInZhbGlkXCIpKSxhLm1hcCh0aGlzLl9pbnZhbGlkYXRlZCxmdW5jdGlvbihhLGIpe3JldHVybiBifSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKGEpeyhhPXRoaXMubm9ybWFsaXplKGEpKSE9PWQmJih0aGlzLl9zcGVlZD0wLHRoaXMuX2N1cnJlbnQ9YSx0aGlzLnN1cHByZXNzKFtcInRyYW5zbGF0ZVwiLFwidHJhbnNsYXRlZFwiXSksdGhpcy5hbmltYXRlKHRoaXMuY29vcmRpbmF0ZXMoYSkpLHRoaXMucmVsZWFzZShbXCJ0cmFuc2xhdGVcIixcInRyYW5zbGF0ZWRcIl0pKX0sZS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5faXRlbXMubGVuZ3RoLGU9Yj8wOnRoaXMuX2Nsb25lcy5sZW5ndGg7cmV0dXJuIXRoaXMuaXNOdW1lcmljKGEpfHxjPDE/YT1kOihhPDB8fGE+PWMrZSkmJihhPSgoYS1lLzIpJWMrYyklYytlLzIpLGF9LGUucHJvdG90eXBlLnJlbGF0aXZlPWZ1bmN0aW9uKGEpe3JldHVybiBhLT10aGlzLl9jbG9uZXMubGVuZ3RoLzIsdGhpcy5ub3JtYWxpemUoYSwhMCl9LGUucHJvdG90eXBlLm1heGltdW09ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpcy5zZXR0aW5ncyxmPXRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aDtpZihlLmxvb3ApZj10aGlzLl9jbG9uZXMubGVuZ3RoLzIrdGhpcy5faXRlbXMubGVuZ3RoLTE7ZWxzZSBpZihlLmF1dG9XaWR0aHx8ZS5tZXJnZSl7aWYoYj10aGlzLl9pdGVtcy5sZW5ndGgpZm9yKGM9dGhpcy5faXRlbXNbLS1iXS53aWR0aCgpLGQ9dGhpcy4kZWxlbWVudC53aWR0aCgpO2ItLSYmISgoYys9dGhpcy5faXRlbXNbYl0ud2lkdGgoKSt0aGlzLnNldHRpbmdzLm1hcmdpbik+ZCk7KTtmPWIrMX1lbHNlIGY9ZS5jZW50ZXI/dGhpcy5faXRlbXMubGVuZ3RoLTE6dGhpcy5faXRlbXMubGVuZ3RoLWUuaXRlbXM7cmV0dXJuIGEmJihmLT10aGlzLl9jbG9uZXMubGVuZ3RoLzIpLE1hdGgubWF4KGYsMCl9LGUucHJvdG90eXBlLm1pbmltdW09ZnVuY3Rpb24oYSl7cmV0dXJuIGE/MDp0aGlzLl9jbG9uZXMubGVuZ3RoLzJ9LGUucHJvdG90eXBlLml0ZW1zPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09ZD90aGlzLl9pdGVtcy5zbGljZSgpOihhPXRoaXMubm9ybWFsaXplKGEsITApLHRoaXMuX2l0ZW1zW2FdKX0sZS5wcm90b3R5cGUubWVyZ2Vycz1mdW5jdGlvbihhKXtyZXR1cm4gYT09PWQ/dGhpcy5fbWVyZ2Vycy5zbGljZSgpOihhPXRoaXMubm9ybWFsaXplKGEsITApLHRoaXMuX21lcmdlcnNbYV0pfSxlLnByb3RvdHlwZS5jbG9uZXM9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5fY2xvbmVzLmxlbmd0aC8yLGU9Yyt0aGlzLl9pdGVtcy5sZW5ndGgsZj1mdW5jdGlvbihhKXtyZXR1cm4gYSUyPT0wP2UrYS8yOmMtKGErMSkvMn07cmV0dXJuIGI9PT1kP2EubWFwKHRoaXMuX2Nsb25lcyxmdW5jdGlvbihhLGIpe3JldHVybiBmKGIpfSk6YS5tYXAodGhpcy5fY2xvbmVzLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE9PT1iP2YoYyk6bnVsbH0pfSxlLnByb3RvdHlwZS5zcGVlZD1mdW5jdGlvbihhKXtyZXR1cm4gYSE9PWQmJih0aGlzLl9zcGVlZD1hKSx0aGlzLl9zcGVlZH0sZS5wcm90b3R5cGUuY29vcmRpbmF0ZXM9ZnVuY3Rpb24oYil7dmFyIGMsZT0xLGY9Yi0xO3JldHVybiBiPT09ZD9hLm1hcCh0aGlzLl9jb29yZGluYXRlcyxhLnByb3h5KGZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZXMoYil9LHRoaXMpKToodGhpcy5zZXR0aW5ncy5jZW50ZXI/KHRoaXMuc2V0dGluZ3MucnRsJiYoZT0tMSxmPWIrMSksYz10aGlzLl9jb29yZGluYXRlc1tiXSxjKz0odGhpcy53aWR0aCgpLWMrKHRoaXMuX2Nvb3JkaW5hdGVzW2ZdfHwwKSkvMiplKTpjPXRoaXMuX2Nvb3JkaW5hdGVzW2ZdfHwwLGM9TWF0aC5jZWlsKGMpKX0sZS5wcm90b3R5cGUuZHVyYXRpb249ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAwPT09Yz8wOk1hdGgubWluKE1hdGgubWF4KE1hdGguYWJzKGItYSksMSksNikqTWF0aC5hYnMoY3x8dGhpcy5zZXR0aW5ncy5zbWFydFNwZWVkKX0sZS5wcm90b3R5cGUudG89ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmN1cnJlbnQoKSxkPW51bGwsZT1hLXRoaXMucmVsYXRpdmUoYyksZj0oZT4wKS0oZTwwKSxnPXRoaXMuX2l0ZW1zLmxlbmd0aCxoPXRoaXMubWluaW11bSgpLGk9dGhpcy5tYXhpbXVtKCk7dGhpcy5zZXR0aW5ncy5sb29wPyghdGhpcy5zZXR0aW5ncy5yZXdpbmQmJk1hdGguYWJzKGUpPmcvMiYmKGUrPS0xKmYqZyksYT1jK2UsKGQ9KChhLWgpJWcrZyklZytoKSE9PWEmJmQtZTw9aSYmZC1lPjAmJihjPWQtZSxhPWQsdGhpcy5yZXNldChjKSkpOnRoaXMuc2V0dGluZ3MucmV3aW5kPyhpKz0xLGE9KGElaStpKSVpKTphPU1hdGgubWF4KGgsTWF0aC5taW4oaSxhKSksdGhpcy5zcGVlZCh0aGlzLmR1cmF0aW9uKGMsYSxiKSksdGhpcy5jdXJyZW50KGEpLHRoaXMuaXNWaXNpYmxlKCkmJnRoaXMudXBkYXRlKCl9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYSl7YT1hfHwhMSx0aGlzLnRvKHRoaXMucmVsYXRpdmUodGhpcy5jdXJyZW50KCkpKzEsYSl9LGUucHJvdG90eXBlLnByZXY9ZnVuY3Rpb24oYSl7YT1hfHwhMSx0aGlzLnRvKHRoaXMucmVsYXRpdmUodGhpcy5jdXJyZW50KCkpLTEsYSl9LGUucHJvdG90eXBlLm9uVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihhKXtpZihhIT09ZCYmKGEuc3RvcFByb3BhZ2F0aW9uKCksKGEudGFyZ2V0fHxhLnNyY0VsZW1lbnR8fGEub3JpZ2luYWxUYXJnZXQpIT09dGhpcy4kc3RhZ2UuZ2V0KDApKSlyZXR1cm4hMTt0aGlzLmxlYXZlKFwiYW5pbWF0aW5nXCIpLHRoaXMudHJpZ2dlcihcInRyYW5zbGF0ZWRcIil9LGUucHJvdG90eXBlLnZpZXdwb3J0PWZ1bmN0aW9uKCl7dmFyIGQ7cmV0dXJuIHRoaXMub3B0aW9ucy5yZXNwb25zaXZlQmFzZUVsZW1lbnQhPT1iP2Q9YSh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUJhc2VFbGVtZW50KS53aWR0aCgpOmIuaW5uZXJXaWR0aD9kPWIuaW5uZXJXaWR0aDpjLmRvY3VtZW50RWxlbWVudCYmYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg/ZD1jLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDpjb25zb2xlLndhcm4oXCJDYW4gbm90IGRldGVjdCB2aWV3cG9ydCB3aWR0aC5cIiksZH0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihiKXt0aGlzLiRzdGFnZS5lbXB0eSgpLHRoaXMuX2l0ZW
11691zPVtdLGImJihiPWIgaW5zdGFuY2VvZiBqUXVlcnk/YjphKGIpKSx0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvciYmKGI9Yi5maW5kKFwiLlwiK3RoaXMuc2V0dGluZ3MubmVzdGVkSXRlbVNlbGVjdG9yKSksYi5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubm9kZVR5cGV9KS5lYWNoKGEucHJveHkoZnVuY3Rpb24oYSxiKXtiPXRoaXMucHJlcGFyZShiKSx0aGlzLiRzdGFnZS5hcHBlbmQoYiksdGhpcy5faXRlbXMucHVzaChiKSx0aGlzLl9tZXJnZXJzLnB1c2goMSpiLmZpbmQoXCJbZGF0YS1tZXJnZV1cIikuYWRkQmFjayhcIltkYXRhLW1lcmdlXVwiKS5hdHRyKFwiZGF0YS1tZXJnZVwiKXx8MSl9LHRoaXMpKSx0aGlzLnJlc2V0KHRoaXMuaXNOdW1lcmljKHRoaXMuc2V0dGluZ3Muc3RhcnRQb3NpdGlvbik/dGhpcy5zZXR0aW5ncy5zdGFydFBvc2l0aW9uOjApLHRoaXMuaW52YWxpZGF0ZShcIml0ZW1zXCIpfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixjKXt2YXIgZT10aGlzLnJlbGF0aXZlKHRoaXMuX2N1cnJlbnQpO2M9Yz09PWQ/dGhpcy5faXRlbXMubGVuZ3RoOnRoaXMubm9ybWFsaXplKGMsITApLGI9YiBpbnN0YW5jZW9mIGpRdWVyeT9iOmEoYiksdGhpcy50cmlnZ2VyKFwiYWRkXCIse2NvbnRlbnQ6Yixwb3NpdGlvbjpjfSksYj10aGlzLnByZXBhcmUoYiksMD09PXRoaXMuX2l0ZW1zLmxlbmd0aHx8Yz09PXRoaXMuX2l0ZW1zLmxlbmd0aD8oMD09PXRoaXMuX2l0ZW1zLmxlbmd0aCYmdGhpcy4kc3RhZ2UuYXBwZW5kKGIpLDAhPT10aGlzLl9pdGVtcy5sZW5ndGgmJnRoaXMuX2l0ZW1zW2MtMV0uYWZ0ZXIoYiksdGhpcy5faXRlbXMucHVzaChiKSx0aGlzLl9tZXJnZXJzLnB1c2goMSpiLmZpbmQoXCJbZGF0YS1tZXJnZV1cIikuYWRkQmFjayhcIltkYXRhLW1lcmdlXVwiKS5hdHRyKFwiZGF0YS1tZXJnZVwiKXx8MSkpOih0aGlzLl9pdGVtc1tjXS5iZWZvcmUoYiksdGhpcy5faXRlbXMuc3BsaWNlKGMsMCxiKSx0aGlzLl9tZXJnZXJzLnNwbGljZShjLDAsMSpiLmZpbmQoXCJbZGF0YS1tZXJnZV1cIikuYWRkQmFjayhcIltkYXRhLW1lcmdlXVwiKS5hdHRyKFwiZGF0YS1tZXJnZVwiKXx8MSkpLHRoaXMuX2l0ZW1zW2VdJiZ0aGlzLnJlc2V0KHRoaXMuX2l0ZW1zW2VdLmluZGV4KCkpLHRoaXMuaW52YWxpZGF0ZShcIml0ZW1zXCIpLHRoaXMudHJpZ2dlcihcImFkZGVkXCIse2NvbnRlbnQ6Yixwb3NpdGlvbjpjfSl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXsoYT10aGlzLm5vcm1hbGl6ZShhLCEwKSkhPT1kJiYodGhpcy50cmlnZ2VyKFwicmVtb3ZlXCIse2NvbnRlbnQ6dGhpcy5faXRlbXNbYV0scG9zaXRpb246YX0pLHRoaXMuX2l0ZW1zW2FdLnJlbW92ZSgpLHRoaXMuX2l0ZW1zLnNwbGljZShhLDEpLHRoaXMuX21lcmdlcnMuc3BsaWNlKGEsMSksdGhpcy5pbnZhbGlkYXRlKFwiaXRlbXNcIiksdGhpcy50cmlnZ2VyKFwicmVtb3ZlZFwiLHtjb250ZW50Om51bGwscG9zaXRpb246YX0pKX0sZS5wcm90b3R5cGUucHJlbG9hZEF1dG9XaWR0aEltYWdlcz1mdW5jdGlvbihiKXtiLmVhY2goYS5wcm94eShmdW5jdGlvbihiLGMpe3RoaXMuZW50ZXIoXCJwcmUtbG9hZGluZ1wiKSxjPWEoYyksYShuZXcgSW1hZ2UpLm9uZShcImxvYWRcIixhLnByb3h5KGZ1bmN0aW9uKGEpe2MuYXR0cihcInNyY1wiLGEudGFyZ2V0LnNyYyksYy5jc3MoXCJvcGFjaXR5XCIsMSksdGhpcy5sZWF2ZShcInByZS1sb2FkaW5nXCIpLCF0aGlzLmlzKFwicHJlLWxvYWRpbmdcIikmJiF0aGlzLmlzKFwiaW5pdGlhbGl6aW5nXCIpJiZ0aGlzLnJlZnJlc2goKX0sdGhpcykpLmF0dHIoXCJzcmNcIixjLmF0dHIoXCJzcmNcIil8fGMuYXR0cihcImRhdGEtc3JjXCIpfHxjLmF0dHIoXCJkYXRhLXNyYy1yZXRpbmFcIikpfSx0aGlzKSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50Lm9mZihcIi5vd2wuY29yZVwiKSx0aGlzLiRzdGFnZS5vZmYoXCIub3dsLmNvcmVcIiksYShjKS5vZmYoXCIub3dsLmNvcmVcIiksITEhPT10aGlzLnNldHRpbmdzLnJlc3BvbnNpdmUmJihiLmNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVyKSx0aGlzLm9mZihiLFwicmVzaXplXCIsdGhpcy5faGFuZGxlcnMub25UaHJvdHRsZWRSZXNpemUpKTtmb3IodmFyIGQgaW4gdGhpcy5fcGx1Z2lucyl0aGlzLl9wbHVnaW5zW2RdLmRlc3Ryb3koKTt0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5jbG9uZWRcIikucmVtb3ZlKCksdGhpcy4kc3RhZ2UudW53cmFwKCksdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5jb250ZW50cygpLnVud3JhcCgpLHRoaXMuJHN0YWdlLmNoaWxkcmVuKCkudW53cmFwKCksdGhpcy4kc3RhZ2UucmVtb3ZlKCksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMucmVmcmVzaENsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMubG9hZGluZ0NsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMubG9hZGVkQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ydGxDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRyYWdDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmdyYWJDbGFzcykuYXR0cihcImNsYXNzXCIsdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIikucmVwbGFjZShuZXcgUmVnRXhwKHRoaXMub3B0aW9ucy5yZXNwb25zaXZlQ2xhc3MrXCItXFxcXFMrXFxcXHNcIixcImdcIiksXCJcIikpLnJlbW92ZURhdGEoXCJvd2wuY2Fyb3VzZWxcIil9LGUucHJvdG90eXBlLm9wPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnNldHRpbmdzLnJ0bDtzd2l0Y2goYil7Y2FzZVwiPFwiOnJldHVybiBkP2E+YzphPGM7Y2FzZVwiPlwiOnJldHVybiBkP2E8YzphPmM7Y2FzZVwiPj1cIjpyZXR1cm4gZD9hPD1jOmE+PWM7Y2FzZVwiPD1cIjpyZXR1cm4gZD9hPj1jOmE8PWN9fSxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbihhLGIsYyxkKXthLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKGIsYyxkKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KFwib25cIitiLGMpfSxlLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24oYSxiLGMsZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyP2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsZCk6YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudChcIm9uXCIrYixjKX0sZS5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbihiLGMsZCxmLGcpe3ZhciBoPXtpdGVtOntjb3VudDp0aGlzLl9pdGVtcy5sZW5ndGgsaW5kZXg6dGhpcy5jdXJyZW50KCl9fSxpPWEuY2FtZWxDYXNlKGEuZ3JlcChbXCJvblwiLGIsZF0sZnVuY3Rpb24oYSl7cmV0dXJuIGF9KS5qb2luKFwiLVwiKS50b0xvd2VyQ2FzZSgpKSxqPWEuRXZlbnQoW2IsXCJvd2xcIixkfHxcImNhcm91c2VsXCJdLmpvaW4oXCIuXCIpLnRvTG93ZXJDYXNlKCksYS5leHRlbmQoe3JlbGF0ZWRUYXJnZXQ6dGhpc30saCxjKSk7cmV0dXJuIHRoaXMuX3N1cHJlc3NbYl18fChhLmVhY2godGhpcy5fcGx1Z2lucyxmdW5jdGlvbihhLGIpe2Iub25UcmlnZ2VyJiZiLm9uVHJpZ2dlcihqKX0pLHRoaXMucmVnaXN0ZXIoe3R5cGU6ZS5UeXBlLkV2ZW50LG5hbWU6Yn0pLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihqKSx0aGlzLnNldHRpbmdzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLnNldHRpbmdzW2ldJiZ0aGlzLnNldHRpbmdzW2ldLmNhbGwodGhpcyxqKSksan0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oYil7YS5lYWNoKFtiXS5jb25jYXQodGhpcy5fc3RhdGVzLnRhZ3NbYl18fFtdKSxhLnByb3h5KGZ1bmN0aW9uKGEsYil7dGhpcy5fc3RhdGVzLmN1cnJlbnRbYl09PT1kJiYodGhpcy5fc3RhdGVzLmN1cnJlbnRbYl09MCksdGhpcy5fc3RhdGVzLmN1cnJlbnRbYl0rK30sdGhpcykpfSxlLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihiKXthLmVhY2goW2JdLmNvbmNhdCh0aGlzLl9zdGF0ZXMudGFnc1tiXXx8W10pLGEucHJveHkoZnVuY3Rpb24oYSxiKXt0aGlzLl9zdGF0ZXMuY3VycmVudFtiXS0tf
1169Sx0aGlzKSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKGIpe2lmKGIudHlwZT09PWUuVHlwZS5FdmVudCl7aWYoYS5ldmVudC5zcGVjaWFsW2IubmFtZV18fChhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXT17fSksIWEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdLm93bCl7dmFyIGM9YS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQ7YS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIWN8fCFjLmFwcGx5fHxhLm5hbWVzcGFjZSYmLTEhPT1hLm5hbWVzcGFjZS5pbmRleE9mKFwib3dsXCIpP2EubmFtZXNwYWNlJiZhLm5hbWVzcGFjZS5pbmRleE9mKFwib3dsXCIpPi0xOmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXS5vd2w9ITB9fWVsc2UgYi50eXBlPT09ZS5UeXBlLlN0YXRlJiYodGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXT90aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdPXRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0uY29uY2F0KGIudGFncyk6dGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXT1iLnRhZ3MsdGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXT1hLmdyZXAodGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXSxhLnByb3h5KGZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuaW5BcnJheShjLHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0pPT09ZH0sdGhpcykpKX0sZS5wcm90b3R5cGUuc3VwcHJlc3M9ZnVuY3Rpb24oYil7YS5lYWNoKGIsYS5wcm94eShmdW5jdGlvbihhLGIpe3RoaXMuX3N1cHJlc3NbYl09ITB9LHRoaXMpKX0sZS5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbihiKXthLmVhY2goYixhLnByb3h5KGZ1bmN0aW9uKGEsYil7ZGVsZXRlIHRoaXMuX3N1cHJlc3NbYl19LHRoaXMpKX0sZS5wcm90b3R5cGUucG9pbnRlcj1mdW5jdGlvbihhKXt2YXIgYz17eDpudWxsLHk6bnVsbH07cmV0dXJuIGE9YS5vcmlnaW5hbEV2ZW50fHxhfHxiLmV2ZW50LGE9YS50b3VjaGVzJiZhLnRvdWNoZXMubGVuZ3RoP2EudG91Y2hlc1swXTphLmNoYW5nZWRUb3VjaGVzJiZhLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD9hLmNoYW5nZWRUb3VjaGVzWzBdOmEsYS5wYWdlWD8oYy54PWEucGFnZVgsYy55PWEucGFnZVkpOihjLng9YS5jbGllbnRYLGMueT1hLmNsaWVudFkpLGN9LGUucHJvdG90eXBlLmlzTnVtZXJpYz1mdW5jdGlvbihhKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChhKSl9LGUucHJvdG90eXBlLmRpZmZlcmVuY2U9ZnVuY3Rpb24oYSxiKXtyZXR1cm57eDphLngtYi54LHk6YS55LWIueX19LGEuZm4ub3dsQ2Fyb3VzZWw9ZnVuY3Rpb24oYil7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGY9ZC5kYXRhKFwib3dsLmNhcm91c2VsXCIpO2Z8fChmPW5ldyBlKHRoaXMsXCJvYmplY3RcIj09dHlwZW9mIGImJmIpLGQuZGF0YShcIm93bC5jYXJvdXNlbFwiLGYpLGEuZWFjaChbXCJuZXh0XCIsXCJwcmV2XCIsXCJ0b1wiLFwiZGVzdHJveVwiLFwicmVmcmVzaFwiLFwicmVwbGFjZVwiLFwiYWRkXCIsXCJyZW1vdmVcIl0sZnVuY3Rpb24oYixjKXtmLnJlZ2lzdGVyKHt0eXBlOmUuVHlwZS5FdmVudCxuYW1lOmN9KSxmLiRlbGVtZW50Lm9uKGMrXCIub3dsLmNhcm91c2VsLmNvcmVcIixhLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZhLnJlbGF0ZWRUYXJnZXQhPT10aGlzJiYodGhpcy5zdXBwcmVzcyhbY10pLGZbY10uYXBwbHkodGhpcyxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSksdGhpcy5yZWxlYXNlKFtjXSkpfSxmKSl9KSksXCJzdHJpbmdcIj09dHlwZW9mIGImJlwiX1wiIT09Yi5jaGFyQXQoMCkmJmZbYl0uYXBwbHkoZixjKX0pfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yPWV9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWZ1bmN0aW9uKGIpe3RoaXMuX2NvcmU9Yix0aGlzLl9pbnRlcnZhbD1udWxsLHRoaXMuX3Zpc2libGU9bnVsbCx0aGlzLl9oYW5kbGVycz17XCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZ0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9SZWZyZXNoJiZ0aGlzLndhdGNoKCl9LHRoaXMpfSx0aGlzLl9jb3JlLm9wdGlvbnM9YS5leHRlbmQoe30sZS5EZWZhdWx0cyx0aGlzLl9jb3JlLm9wdGlvbnMpLHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpfTtlLkRlZmF1bHRzPXthdXRvUmVmcmVzaDohMCxhdXRvUmVmcmVzaEludGVydmFsOjUwMH0sZS5wcm90b3R5cGUud2F0Y2g9ZnVuY3Rpb24oKXt0aGlzLl9pbnRlcnZhbHx8KHRoaXMuX3Zpc2libGU9dGhpcy5fY29yZS5pc1Zpc2libGUoKSx0aGlzLl9pbnRlcnZhbD1iLnNldEludGVydmFsKGEucHJveHkodGhpcy5yZWZyZXNoLHRoaXMpLHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b1JlZnJlc2hJbnRlcnZhbCkpfSxlLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dGhpcy5fY29yZS5pc1Zpc2libGUoKSE9PXRoaXMuX3Zpc2libGUmJih0aGlzLl92aXNpYmxlPSF0aGlzLl92aXNpYmxlLHRoaXMuX2NvcmUuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoXCJvd2wtaGlkZGVuXCIsIXRoaXMuX3Zpc2libGUpLHRoaXMuX3Zpc2libGUmJnRoaXMuX2NvcmUuaW52YWxpZGF0ZShcIndpZHRoXCIpJiZ0aGlzLl9jb3JlLnJlZnJlc2goKSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYSxjO2IuY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7Zm9yKGEgaW4gdGhpcy5faGFuZGxlcnMpdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYSx0aGlzLl9oYW5kbGVyc1thXSk7Zm9yKGMgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1tjXSYmKHRoaXNbY109bnVsbCl9LGEuZm4ub3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5BdXRvUmVmcmVzaD1lfSh3aW5kb3cuWmVwdG98fHdpbmRvdy5qUXVlcnksd2luZG93LGRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihiKXt0aGlzLl9jb3JlPWIsdGhpcy5fbG9hZGVkPVtdLHRoaXMuX2hhbmRsZXJzPXtcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbCBjaGFuZ2Uub3dsLmNhcm91c2VsIHJlc2l6ZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihiKXtpZihiLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5zZXR0aW5ncyYmdGhpcy5fY29yZS5zZXR0aW5ncy5sYXp5TG9hZCYmKGIucHJvcGVydHkmJlwicG9zaXRpb25cIj09Yi5wcm9wZXJ0eS5uYW1lfHxcImluaXRpYWxpemVkXCI9PWIudHlwZSkpe3ZhciBjPXRoaXMuX2NvcmUuc2V0dGluZ3MsZT1jLmNlbnRlciYmTWF0aC5jZWlsKGMuaXRlbXMvMil8fGMuaXRlbXMsZj1jLmNlbnRlciYmLTEqZXx8MCxnPShiLnByb3BlcnR5JiZiLnByb3BlcnR5LnZhbHVlIT09ZD9iLnByb3BlcnR5LnZhbHVlOnRoaXMuX2NvcmUuY3VycmVudCgpKStmLGg9dGhpcy5fY29yZS5jbG9uZXMoKS5sZW5ndGgsaT1hLnByb3h5KGZ1bmN0aW9uKGEsYil7dGhpcy5sb2FkKGIpfSx0aGlzKTtmb3IoYy5sYXp5TG9hZEVhZ2VyPjAmJihlKz1jLmxhenlMb2FkRWFnZXIsYy5sb29wJiYoZy09Yy5sYXp5TG9hZEVhZ2VyLGUrKykpO2YrKzxlOyl0aGlzLmxvYWQoaC8yK3RoaXMuX2NvcmUucmVsYXRpdmUoZykpLGgmJmEuZWFjaCh0aGlzLl9jb3JlLmNsb25lcyh0aGlzLl9jb3JlLnJlbGF0aXZlKGcpKSxpKSxnKyt9fSx0aGlzKX0sdGhpcy5fY29yZS5vcHRpb25zPWEuZXh0ZW5kKHt9LGUuRGVmYXVsdHMsdGhpcy5fY29yZS5vcHRpb25zKSx0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKX07ZS5EZWZhdWx0cz17bGF6eUxvYWQ6ITEsbGF6eUxvYWRFYWdlcjowfSxlLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCkuZXEoYyksZT1kJiZkLmZpbmQoXCIub3dsLWxhenlcIik7IWV8fGEuaW5BcnJheShkLmdldCgwKSx0aGlzLl9sb2FkZWQpPi0xfHwoZS5lYWNoKGEucHJveHkoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoZCksZz1iLmRldmljZVBpeGVsUmF0aW8+MSYmZi5hdHRyKFwiZGF0YS1zcmMtcmV0aW5hXCIpfHxmLmF0dHIoXCJkYXRhLXNyY1wiKXx8Zi5hdHRyKFwiZGF0YS1zcmNzZXRcIik7dGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZFwiLHtlbGVtZW50OmYsdXJsOmd9LFwibGF6eVwiKSxmLmlzKFwiaW1nXCIpP2Yub25lKFwibG9h
1169ZC5vd2wubGF6eVwiLGEucHJveHkoZnVuY3Rpb24oKXtmLmNzcyhcIm9wYWNpdHlcIiwxKSx0aGlzLl9jb3JlLnRyaWdnZXIoXCJsb2FkZWRcIix7ZWxlbWVudDpmLHVybDpnfSxcImxhenlcIil9LHRoaXMpKS5hdHRyKFwic3JjXCIsZyk6Zi5pcyhcInNvdXJjZVwiKT9mLm9uZShcImxvYWQub3dsLmxhenlcIixhLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZGVkXCIse2VsZW1lbnQ6Zix1cmw6Z30sXCJsYXp5XCIpfSx0aGlzKSkuYXR0cihcInNyY3NldFwiLGcpOihlPW5ldyBJbWFnZSxlLm9ubG9hZD1hLnByb3h5KGZ1bmN0aW9uKCl7Zi5jc3Moe1wiYmFja2dyb3VuZC1pbWFnZVwiOid1cmwoXCInK2crJ1wiKScsb3BhY2l0eTpcIjFcIn0pLHRoaXMuX2NvcmUudHJpZ2dlcihcImxvYWRlZFwiLHtlbGVtZW50OmYsdXJsOmd9LFwibGF6eVwiKX0sdGhpcyksZS5zcmM9Zyl9LHRoaXMpKSx0aGlzLl9sb2FkZWQucHVzaChkLmdldCgwKSkpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGEsYjtmb3IoYSBpbiB0aGlzLmhhbmRsZXJzKXRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsdGhpcy5oYW5kbGVyc1thXSk7Zm9yKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1tiXSYmKHRoaXNbYl09bnVsbCl9LGEuZm4ub3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5MYXp5PWV9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWZ1bmN0aW9uKGMpe3RoaXMuX2NvcmU9Yyx0aGlzLl9wcmV2aW91c0hlaWdodD1udWxsLHRoaXMuX2hhbmRsZXJzPXtcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbCByZWZyZXNoZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0JiZ0aGlzLnVwZGF0ZSgpfSx0aGlzKSxcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0JiZcInBvc2l0aW9uXCI9PT1hLnByb3BlcnR5Lm5hbWUmJnRoaXMudXBkYXRlKCl9LHRoaXMpLFwibG9hZGVkLm93bC5sYXp5XCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0JiZhLmVsZW1lbnQuY2xvc2VzdChcIi5cIit0aGlzLl9jb3JlLnNldHRpbmdzLml0ZW1DbGFzcykuaW5kZXgoKT09PXRoaXMuX2NvcmUuY3VycmVudCgpJiZ0aGlzLnVwZGF0ZSgpfSx0aGlzKX0sdGhpcy5fY29yZS5vcHRpb25zPWEuZXh0ZW5kKHt9LGUuRGVmYXVsdHMsdGhpcy5fY29yZS5vcHRpb25zKSx0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKSx0aGlzLl9pbnRlcnZhbElkPW51bGw7dmFyIGQ9dGhpczthKGIpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7ZC5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0JiZkLnVwZGF0ZSgpfSksYShiKS5yZXNpemUoZnVuY3Rpb24oKXtkLl9jb3JlLnNldHRpbmdzLmF1dG9IZWlnaHQmJihudWxsIT1kLl9pbnRlcnZhbElkJiZjbGVhclRpbWVvdXQoZC5faW50ZXJ2YWxJZCksZC5faW50ZXJ2YWxJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC51cGRhdGUoKX0sMjUwKSl9KX07ZS5EZWZhdWx0cz17YXV0b0hlaWdodDohMSxhdXRvSGVpZ2h0Q2xhc3M6XCJvd2wtaGVpZ2h0XCJ9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvcmUuX2N1cnJlbnQsYz1iK3RoaXMuX2NvcmUuc2V0dGluZ3MuaXRlbXMsZD10aGlzLl9jb3JlLnNldHRpbmdzLmxhenlMb2FkLGU9dGhpcy5fY29yZS4kc3RhZ2UuY2hpbGRyZW4oKS50b0FycmF5KCkuc2xpY2UoYixjKSxmPVtdLGc9MDthLmVhY2goZSxmdW5jdGlvbihiLGMpe2YucHVzaChhKGMpLmhlaWdodCgpKX0pLGc9TWF0aC5tYXguYXBwbHkobnVsbCxmKSxnPD0xJiZkJ
1169iZ0aGlzLl9wcmV2aW91c0hlaWdodCYmKGc9dGhpcy5fcHJldmlvdXNIZWlnaHQpLHRoaXMuX3ByZXZpb3VzSGVpZ2h0PWcsdGhpcy5fY29yZS4kc3RhZ2UucGFyZW50KCkuaGVpZ2h0KGcpLmFkZENsYXNzKHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodENsYXNzKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhLGI7Zm9yKGEgaW4gdGhpcy5faGFuZGxlcnMpdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYSx0aGlzLl9oYW5kbGVyc1thXSk7Zm9yKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1tiXSYmKHRoaXNbYl09bnVsbCl9LGEuZm4ub3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5BdXRvSGVpZ2h0PWV9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWZ1bmN0aW9uKGIpe3RoaXMuX2NvcmU9Yix0aGlzLl92aWRlb3M9e30sdGhpcy5fcGxheWluZz1udWxsLHRoaXMuX2hhbmRsZXJzPXtcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUucmVnaXN0ZXIoe3R5cGU6XCJzdGF0ZVwiLG5hbWU6XCJwbGF5aW5nXCIsdGFnczpbXCJpbnRlcmFjdGluZ1wiXX0pfSx0aGlzKSxcInJlc2l6ZS5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZ0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvJiZ0aGlzLmlzSW5GdWxsU2NyZWVuKCkmJmEucHJldmVudERlZmF1bHQoKX0sdGhpcyksXCJyZWZyZXNoZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5pcyhcInJlc2l6aW5nXCIpJiZ0aGlzLl9jb3JlLiRzdGFnZS5maW5kKFwiLmNsb25lZCAub3dsLXZpZGVvLWZyYW1lXCIpLnJlbW92ZSgpfSx0aGlzKSxcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmXCJwb3NpdGlvblwiPT09YS5wcm9wZXJ0eS5uYW1lJiZ0aGlzLl9wbGF5aW5nJiZ0aGlzLnN0b3AoKX0sdGhpcyksXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGIpe2lmKGIubmFtZXNwYWNlKXt2YXIgYz1hKGIuY29udGVudCkuZmluZChcIi5vd2wtdmlkZW9cIik7Yy5sZW5ndGgmJihjLmNzcyhcImRpc3BsYXlcIixcIm5vbmVcIiksdGhpcy5mZXRjaChjLGEoYi5jb250ZW50KSkpfX0sdGhpcyl9LHRoaXMuX2NvcmUub3B0aW9ucz1hLmV4dGVuZCh7fSxlLkRlZmF1bHRzLHRoaXMuX2NvcmUub3B0aW9ucyksdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksdGhpcy5fY29yZS4kZWxlbWVudC5vbihcImNsaWNrLm93bC52aWRlb1wiLFwiLm93bC12aWRlby1wbGF5LWljb25cIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMucGxheShhKX0sdGhpcykpfTtlLkRlZmF1bHRzPXt2aWRlbzohMSx2aWRlb0hlaWdodDohMSx2aWRlb1dpZHRoOiExfSxlLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXR0cihcImRhdGEtdmltZW8taWRcIik/XCJ2aW1lb1wiOmEuYXR0cihcImRhdGEtdnphYXItaWRcIik/XCJ2emFhclwiOlwieW91dHViZVwifSgpLGQ9YS5hdHRyKFwiZGF0YS12aW1lby1pZFwiKXx8YS5hdHRyKFwiZGF0YS15b3V0dWJlLWlkXCIpfHxhLmF0dHIoXCJkYXRhLXZ6YWFyLWlkXCIpLGU9YS5hdHRyKFwiZGF0YS13aWR0aFwiKXx8dGhpcy5fY29yZS5zZXR0aW5ncy52aWRlb1dpZHRoLGY9YS5hdHRyKFwiZGF0YS1oZWlnaHRcIil8fHRoaXMuX2NvcmUuc2V0dGluZ3MudmlkZW9IZWlnaHQsZz1hLmF0dHIoXCJocmVmXCIpO2lmKCFnKXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdmlkZW8gVVJMLlwiKTtpZihkPWcubWF0Y2goLyhodHRwOnxodHRwczp8KVxcL1xcLyhwbGF5ZXIufHd3dy58YXBwLik/KHZpbWVvXFwuY29tfHlvdXR1KGJlXFwuY29tfFxcLmJlfGJlXFwuZ29vZ2xlYXBpc1xcLmNvbXxiZVxcLW5vY29va2llXFwuY29tKXx2emFhclxcLmNvbSlcXC8odmlkZW9cXC98dmlkZW9zXFwvfGVtYmVkXFwvfGNoYW5uZWxzXFwvLitcXC98Z3JvdXBzXFwvLitcXC98d2F0Y2hcXD92PXx2XFwvKT8oW0EtWmEtejAtOS5fJS1dKikoXFwmXFxTKyk/LyksZFszXS5pbmRleE9mKFwieW91dHVcIik+LTEpYz1cInlvdXR1YmVcIjtlbHNlIGlmKGRbM10uaW5kZXhPZihcInZpbWVvXCIpPi0xKWM9XCJ2aW1lb1wiO2Vsc2V7aWYoIShkWzNdLmluZGV4T2YoXCJ2emFhclwiKT4tMSkpdGhyb3cgbmV3IEVycm9yKFwiVmlkZW8gVVJMIG5vdCBzdXBwb3J0ZWQuXCIpO2M9XCJ2emFhclwifWQ9ZFs2XSx0aGlzLl92aWRlb3NbZ109e3R5cGU6YyxpZDpkLHdpZHRoOmUsaGVpZ2h0OmZ9LGIuYXR0cihcImRhdGEtdmlkZW9cIixnKSx0aGlzLnRodW1ibmFpbChhLHRoaXMuX3ZpZGVvc1tnXSl9LGUucHJvdG90eXBlLnRodW1ibmFpbD1mdW5jdGlvbihiLGMpe3ZhciBkLGUsZixnPWMud2lkdGgmJmMuaGVpZ2h0P1wid2lkdGg6XCIrYy53aWR0aCtcInB4O2hlaWdodDpcIitjLmhlaWdodCtcInB4O1wiOlwiXCIsaD1iLmZpbmQoXCJpbWdcIiksaT1cInNyY1wiLGo9XCJcIixrPXRoaXMuX2NvcmUuc2V0dGluZ3MsbD1mdW5jdGlvbihjKXtlPSc8ZGl2IGNsYXNzPVwib3dsLXZpZGVvLXBsYXktaWNvblwiPjwvZGl2PicsZD1rLmxhenlMb2FkP2EoXCI8ZGl2Lz5cIix7Y2xhc3M6XCJvd2wtdmlkZW8tdG4gXCIraixzcmNUeXBlOmN9KTphKFwiPGRpdi8+XCIse2NsYXNzOlwib3dsLXZpZGVvLXRuXCIsc3R5bGU6XCJvcGFjaXR5OjE7YmFja2dyb3VuZC1pbWFnZTp1cmwoXCIrYytcIilcIn0pLGIuYWZ0ZXIoZCksYi5hZnRlcihlKX07aWYoYi53cmFwKGEoXCI8ZGl2Lz5cIix7Y2xhc3M6XCJvd2wtdmlkZW8td3JhcHBlclwiLHN0eWxlOmd9KSksdGhpcy5fY29yZS5zZXR0aW5ncy5sYXp5TG9hZCYmKGk9XCJkYXRhLXNyY1wiLGo9XCJvd2wtbGF6eVwiKSxoLmxlbmd0aClyZXR1cm4gbChoLmF0dHIoaSkpLGgucmVtb3ZlKCksITE7XCJ5b3V0dWJlXCI9PT1jLnR5cGU/KGY9XCIvL2ltZy55b3V0dWJlLmNvbS92aS9cIitjLmlkK1wiL2hxZG
1169VmYXVsdC5qcGdcIixsKGYpKTpcInZpbWVvXCI9PT1jLnR5cGU/YS5hamF4KHt0eXBlOlwiR0VUXCIsdXJsOlwiLy92aW1lby5jb20vYXBpL3YyL3ZpZGVvL1wiK2MuaWQrXCIuanNvblwiLGpzb25wOlwiY2FsbGJhY2tcIixkYXRhVHlwZTpcImpzb25wXCIsc3VjY2VzczpmdW5jdGlvbihhKXtmPWFbMF0udGh1bWJuYWlsX2xhcmdlLGwoZil9fSk6XCJ2emFhclwiPT09Yy50eXBlJiZhLmFqYXgoe3R5cGU6XCJHRVRcIix1cmw6XCIvL3Z6YWFyLmNvbS9hcGkvdmlkZW9zL1wiK2MuaWQrXCIuanNvblwiLGpzb25wOlwiY2FsbGJhY2tcIixkYXRhVHlwZTpcImpzb25wXCIsc3VjY2VzczpmdW5jdGlvbihhKXtmPWEuZnJhbWVncmFiX3VybCxsKGYpfX0pfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5fY29yZS50cmlnZ2VyKFwic3RvcFwiLG51bGwsXCJ2aWRlb1wiKSx0aGlzLl9wbGF5aW5nLmZpbmQoXCIub3dsLXZpZGVvLWZyYW1lXCIpLnJlbW92ZSgpLHRoaXMuX3BsYXlpbmcucmVtb3ZlQ2xhc3MoXCJvd2wtdmlkZW8tcGxheWluZ1wiKSx0aGlzLl9wbGF5aW5nPW51bGwsdGhpcy5fY29yZS5sZWF2ZShcInBsYXlpbmdcIiksdGhpcy5fY29yZS50cmlnZ2VyKFwic3RvcHBlZFwiLG51bGwsXCJ2aWRlb1wiKX0sZS5wcm90b3R5cGUucGxheT1mdW5jdGlvbihiKXt2YXIgYyxkPWEoYi50YXJnZXQpLGU9ZC5jbG9zZXN0KFwiLlwiK3RoaXMuX2NvcmUuc2V0dGluZ3MuaXRlbUNsYXNzKSxmPXRoaXMuX3ZpZGVvc1tlLmF0dHIoXCJkYXRhLXZpZGVvXCIpXSxnPWYud2lkdGh8fFwiMTAwJVwiLGg9Zi5oZWlnaHR8fHRoaXMuX2NvcmUuJHN0YWdlLmhlaWdodCgpO3RoaXMuX3BsYXlpbmd8fCh0aGlzLl9jb3JlLmVudGVyKFwicGxheWluZ1wiKSx0aGlzLl9jb3JlLnRyaWdnZXIoXCJwbGF5XCIsbnVsbCxcInZpZGVvXCIpLGU9dGhpcy5fY29yZS5pdGVtcyh0aGlzLl9jb3JlLnJlbGF0aXZlKGUuaW5kZXgoKSkpLHRoaXMuX2NvcmUucmVzZXQoZS5pbmRleCgpKSxjPWEoJzxpZnJhbWUgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3dmdWxsc2NyZWVuIG1vemFsbG93ZnVsbHNjcmVlbiB3ZWJraXRBbGxvd0Z1bGxTY3JlZW4gPjwvaWZyYW1lPicpLGMuYXR0cihcImhlaWdodFwiLGgpLGMuYXR0cihcIndpZHRoXCIsZyksXCJ5b3V0dWJlXCI9PT1mLnR5cGU/Yy5hdHRyKFwic3JjXCIsXCIvL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9cIitmLmlkK1wiP2F1dG9wbGF5PTEmcmVsPTAmdj1cIitmLmlkKTpcInZpbWVvXCI9PT1mLnR5cGU/Yy5hdHRyKFwic3JjXCIsXCIvL3BsYXllci52aW1lby5jb20vdmlkZW8vXCIrZi5pZCtcIj9hdXRvcGxheT0xXCIpOlwidnphYXJcIj09PWYudHlwZSYmYy5hdHRyKFwic3JjXCIsXCIvL3ZpZXcudnphYXIuY29tL1wiK2YuaWQrXCIvcGxheWVyP2F1dG9wbGF5PXRydWVcIiksYShjKS53cmFwKCc8ZGl2IGNsYXNzPVwib3dsLXZpZGVvLWZyYW1lXCIgLz4nKS5pbnNlcnRBZnRlcihlLmZpbmQoXCIub3dsLXZpZGVvXCIpKSx0aGlzLl9wbGF5aW5nPWUuYWRkQ2xhc3MoXCJvd2wtdmlkZW8tcGxheWluZ1wiKSl9LGUucHJvdG90eXBlLmlzSW5GdWxsU2NyZWVuPWZ1bmN0aW9uKCl7dmFyIGI9Yy5mdWxsc2NyZWVuRWxlbWVudHx8Yy5tb3pGdWxsU2NyZWVuRWxlbWVudHx8Yy53ZWJraXRGdWxsc2NyZWVuRWxlbWVudDtyZXR1cm4gYiYmYShiKS5wYXJlbnQoKS5oYXNDbGFzcyhcIm93bC12aWRlby1mcmFtZVwiKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhLGI7dGhpcy5fY29yZS4kZWxlbWVudC5vZmYoXCJjbGljay5vd2wudmlkZW9cIik7Zm9yKGEgaW4gdGhpcy5faGFuZGxlcnMpdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYSx0aGlzLl9oYW5kbGVyc1thXSk7Zm9yKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1tiXSYmKHRoaXNbYl09bnVsbCl9LGEuZm4ub3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5WaWRlbz1lfSh3aW5kb3cuWmVwdG98fHdpbmRvdy5qUXVlcnksd2luZG93LGRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihiKXt0aGlzLmNvcmU9Yix0aGlzLmNvcmUub3B0aW9ucz1hLmV4dGVuZCh7fSxlLkRlZmF1bHRzLHRoaXMuY29yZS5vcHRpb25zKSx0aGlzLnN3YXBwaW5nPSEwLHRoaXMucHJldmlvdXM9ZCx0aGlzLm5leHQ9ZCx0aGlzLmhhbmRsZXJzPXtcImNoYW5nZS5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZcInBvc2l0aW9uXCI9PWEucHJvcGVydHkubmFtZSYmKHRoaXMucHJldmlvdXM9dGhpcy5jb3JlLmN1cnJlbnQoKSx0aGlzLm5leHQ9YS5wcm9wZXJ0eS52YWx1ZSl9LHRoaXMpLFwiZHJhZy5vd2wuY2Fyb3VzZWwgZHJhZ2dlZC5vd2wuY2Fyb3VzZWwgdHJhbnNsYXRlZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiYodGhpcy5zd2FwcGluZz1cInRyYW5zbGF0ZWRcIj09YS50eXBlKX0sdGhpcyksXCJ0cmFuc2xhdGUub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5zd2FwcGluZyYmKHRoaXMuY29yZS5vcHRpb25zLmFuaW1hdGVPdXR8fHRoaXMuY29yZS5vcHRpb25zLmFuaW1hdGVJbikmJnRoaXMuc3dhcCgpfSx0aGlzKX0sdGhpcy5jb3JlLiRlbGVtZW50Lm9uKHRoaXMuaGFuZGxlcnMpfTtlLkRlZmF1bHRzPXthbmltYXRlT3V0OiExLFxuYW5pbWF0ZUluOiExfSxlLnByb3RvdHlwZS5zd2FwPWZ1bmN0aW9uKCl7aWYoMT09PXRoaXMuY29yZS5zZXR0aW5ncy5pdGVtcyYmYS5zdXBwb3J0LmFuaW1hdGlvbiYmYS5zdXBwb3J0LnRyYW5zaXRpb24pe3RoaXMuY29yZS5zcGVlZCgwKTt2YXIgYixjPWEucHJveHkodGhpcy5jbGVhcix0aGlzKSxkPXRoaXMuY29yZS4kc3RhZ2UuY2hpbGRyZW4oKS5lcSh0aGlzLnByZXZpb3VzKSxlPXRoaXMuY29yZS4kc3RhZ2UuY2hpbGRyZW4oKS5lcSh0aGlzLm5leHQpLGY9dGhpcy5jb3JlLnNldHRpbmdzLmFuaW1hdGVJbixnPXRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlT3V0O3RoaXMuY29yZS5jdXJyZW50KCkhPT10aGlzLnByZXZpb3VzJiYoZyYmKGI9dGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMucHJldmlvdXMpLXRoaXMuY29yZS5jb29yZGluYX
1169Rlcyh0aGlzLm5leHQpLGQub25lKGEuc3VwcG9ydC5hbmltYXRpb24uZW5kLGMpLmNzcyh7bGVmdDpiK1wicHhcIn0pLmFkZENsYXNzKFwiYW5pbWF0ZWQgb3dsLWFuaW1hdGVkLW91dFwiKS5hZGRDbGFzcyhnKSksZiYmZS5vbmUoYS5zdXBwb3J0LmFuaW1hdGlvbi5lbmQsYykuYWRkQ2xhc3MoXCJhbmltYXRlZCBvd2wtYW5pbWF0ZWQtaW5cIikuYWRkQ2xhc3MoZikpfX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oYil7YShiLnRhcmdldCkuY3NzKHtsZWZ0OlwiXCJ9KS5yZW1vdmVDbGFzcyhcImFuaW1hdGVkIG93bC1hbmltYXRlZC1vdXQgb3dsLWFuaW1hdGVkLWluXCIpLnJlbW92ZUNsYXNzKHRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlSW4pLnJlbW92ZUNsYXNzKHRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlT3V0KSx0aGlzLmNvcmUub25UcmFuc2l0aW9uRW5kKCl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYSxiO2ZvcihhIGluIHRoaXMuaGFuZGxlcnMpdGhpcy5jb3JlLiRlbGVtZW50Lm9mZihhLHRoaXMuaGFuZGxlcnNbYV0pO2ZvcihiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbYl0mJih0aGlzW2JdPW51bGwpfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQW5pbWF0ZT1lfSh3aW5kb3cuWmVwdG98fHdpbmRvdy5qUXVlcnksd2luZG93LGRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihiKXt0aGlzLl9jb3JlPWIsdGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MCx0aGlzLl90aW1lb3V0PTAsdGhpcy5fcGF1c2VkPSEwLHRoaXMuX2hhbmRsZXJzPXtcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmXCJzZXR0aW5nc1wiPT09YS5wcm9wZXJ0eS5uYW1lP3RoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXk/dGhpcy5wbGF5KCk6dGhpcy5zdG9wKCk6YS5uYW1lc3BhY2UmJlwicG9zaXRpb25cIj09PWEucHJvcGVydHkubmFtZSYmdGhpcy5fcGF1c2VkJiYodGhpcy5fdGltZT0wKX0sdGhpcyksXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZ0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5JiZ0aGlzLnBsYXkoKX0sdGhpcyksXCJwbGF5Lm93bC5hdXRvcGxheVwiOmEucHJveHkoZnVuY3Rpb24oYSxiLGMpe2EubmFtZXNwYWNlJiZ0aGlzLnBsYXkoYixjKX0sdGhpcyksXCJzdG9wLm93bC5hdXRvcGxheVwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuc3RvcCgpfSx0aGlzKSxcIm1vdXNlb3Zlci5vd2wuYXV0b3BsYXlcIjphLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UmJnRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSYmdGhpcy5wYXVzZSgpfSx0aGlzKSxcIm1vdXNlbGVhdmUub3dsLmF1dG9wbGF5XCI6YS5wcm94eShmdW5jdGlvbigpe3RoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlJiZ0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikmJnRoaXMucGxheSgpfSx0aGlzKSxcInRvdWNoc3RhcnQub3dsLmNvcmVcIjphLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UmJnRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSYmdGhpcy5wYXVzZSgpfSx0aGlzKSxcInRvdWNoZW5kLm93bC5jb3JlXCI6YS5wcm94eShmdW5jdGlvbigpe3RoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlJiZ0aGlzLnBsYXkoKX0sdGhpcyl9LHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLHRoaXMuX2NvcmUub3B0aW9ucz1hLmV4dGVuZCh7fSxlLkRlZmF1bHRzLHRoaXMuX2NvcmUub3B0aW9ucyl9O2UuRGVmYXVsdHM9e2F1dG9wbGF5OiExLGF1dG9wbGF5VGltZW91dDo1ZTMsYXV0b3BsYXlIb3ZlclBhdXNlOiExLGF1dG9wbGF5U3BlZWQ6ITF9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKGQpe3RoaXMuX2NhbGw9Yi5zZXRUaW1lb3V0KGEucHJveHkodGhpcy5fbmV4dCx0aGlzLGQpLHRoaXMuX3RpbWVvdXQqKE1hdGgucm91bmQodGhpcy5yZWFkKCkvdGhpcy5fdGltZW91dCkrMSktdGhpcy5yZWFkKCkpLHRoaXMuX2NvcmUuaXMoXCJpbnRlcmFjdGluZ1wiKXx8Yy5oaWRkZW58fHRoaXMuX2NvcmUubmV4dChkfHx0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5U3BlZWQpfSxlLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktdGhpcy5fdGltZX0sZS5wcm90b3R5cGUucGxheT1mdW5jdGlvbihjLGQpe3ZhciBlO3RoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKXx8dGhpcy5fY29yZS5lbnRlcihcInJvdGF0aW5nXCIpLGM9Y3x8dGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheVRpbWVvdXQsZT1NYXRoLm1pbih0aGlzLl90aW1lJSh0aGlzLl90aW1lb3V0fHxjKSxjKSx0aGlzLl9wYXVzZWQ/KHRoaXMuX3RpbWU9dGhpcy5yZWFkKCksdGhpcy5fcGF1c2VkPSExKTpiLmNsZWFyVGltZW91dCh0aGlzLl9jYWxsKSx0aGlzLl90
1169aW1lKz10aGlzLnJlYWQoKSVjLWUsdGhpcy5fdGltZW91dD1jLHRoaXMuX2NhbGw9Yi5zZXRUaW1lb3V0KGEucHJveHkodGhpcy5fbmV4dCx0aGlzLGQpLGMtZSl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikmJih0aGlzLl90aW1lPTAsdGhpcy5fcGF1c2VkPSEwLGIuY2xlYXJUaW1lb3V0KHRoaXMuX2NhbGwpLHRoaXMuX2NvcmUubGVhdmUoXCJyb3RhdGluZ1wiKSl9LGUucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpJiYhdGhpcy5fcGF1c2VkJiYodGhpcy5fdGltZT10aGlzLnJlYWQoKSx0aGlzLl9wYXVzZWQ9ITAsYi5jbGVhclRpbWVvdXQodGhpcy5fY2FsbCkpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGEsYjt0aGlzLnN0b3AoKTtmb3IoYSBpbiB0aGlzLl9oYW5kbGVycyl0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLHRoaXMuX2hhbmRsZXJzW2FdKTtmb3IoYiBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSlcImZ1bmN0aW9uXCIhPXR5cGVvZiB0aGlzW2JdJiYodGhpc1tiXT1udWxsKX0sYS5mbi5vd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLmF1dG9wbGF5PWV9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjLGQpe1widXNlIHN0cmljdFwiO3ZhciBlPWZ1bmN0aW9uKGIpe3RoaXMuX2NvcmU9Yix0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9wYWdlcz1bXSx0aGlzLl9jb250cm9scz17fSx0aGlzLl90ZW1wbGF0ZXM9W10sdGhpcy4kZWxlbWVudD10aGlzLl9jb3JlLiRlbGVtZW50LHRoaXMuX292ZXJyaWRlcz17bmV4dDp0aGlzLl9jb3JlLm5leHQscHJldjp0aGlzLl9jb3JlLnByZXYsdG86dGhpcy5fY29yZS50b30sdGhpcy5faGFuZGxlcnM9e1wicHJlcGFyZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihiKXtiLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSYmdGhpcy5fdGVtcGxhdGVzLnB1c2goJzxkaXYgY2xhc3M9XCInK3RoaXMuX2NvcmUuc2V0dGluZ3MuZG90Q2xhc3MrJ1wiPicrYShiLmNvbnRlbnQpLmZpbmQoXCJbZGF0YS1kb3RdXCIpLmFkZEJhY2soXCJbZGF0YS1kb3RdXCIpLmF0dHIoXCJkYXRhLWRvdFwiKStcIjwvZGl2PlwiKX0sdGhpcyksXCJhZGRlZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZ0aGlzLl9jb3JlLnNldHRpbmdzLmRvdHNEYXRhJiZ0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sMCx0aGlzLl90ZW1wbGF0ZXMucG9wKCkpfSx0aGlzKSxcInJlbW92ZS5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZ0aGlzLl9jb3JlLnNldHRpbmdzLmRvdHNEYXRhJiZ0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sMSl9LHRoaXMpLFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZcInBvc2l0aW9uXCI9PWEucHJvcGVydHkubmFtZSYmdGhpcy5kcmF3KCl9LHRoaXMpLFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmIXRoaXMuX2luaXRpYWxpemVkJiYodGhpcy5fY29yZS50cmlnZ2VyKFwiaW5pdGlhbGl6ZVwiLG51bGwsXCJuYXZpZ2F0aW9uXCIpLHRoaXMuaW5pdGlhbGl6ZSgpLHRoaXMudXBkYXRlKCksdGhpcy5kcmF3KCksdGhpcy5faW5pdGlhbGl6ZWQ9ITAsdGhpcy5fY29yZS50cmlnZ2VyKFwiaW5pdGlhbGl6ZWRcIixudWxsLFwibmF2aWdhdGlvblwiKSl9LHRoaXMpLFwicmVmcmVzaGVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2luaXRpYWxpemVkJiYodGhpcy5fY29yZS50cmlnZ2VyKFwicmVmcmVzaFwiLG51bGwsXCJuYXZpZ2F0aW9uXCIpLHRoaXMudXBkYXRlKCksdGhpcy5kcmF3KCksdGhpcy5fY29yZS50cmlnZ2VyKFwicmVmcmVzaGVkXCIsbnVsbCxcIm5hdmlnYXRpb25cIikpfSx0aGlzKX0sdGhpcy5fY29yZS5vcHRpb25zPWEuZXh0ZW5kKHt9LGUuRGVmYXVsdHMsdGhpcy5fY29yZS5vcHRpb25zKSx0aGlzLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKX07ZS5EZWZhdWx0cz17bmF2OiExLG5hdlRleHQ6Wyc8c3BhbiBhcmlhLWxhYmVsPVwiUHJldmlvdXNcIj4mI3gyMDM5Ozwvc3Bhbj4nLCc8c3BhbiBhcmlhLWxhYmVsPVwiTmV4dFwiPiYjeDIwM2E7PC9zcGFuPiddLG5hdlNwZWVkOiExLG5hdkVsZW1lbnQ6J2J1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cInByZXNlbnRhdGlvblwiJyxuYXZDb250YWluZXI6ITEsbmF2Q29udGFpbmVyQ2xhc3M6XCJvd2wtbmF2XCIsbmF2Q2xhc3M6W1wib3dsLXByZXZcIixcIm93bC1uZXh0XCJdLHNsaWRlQnk6MSxkb3RDbGFzczpcIm93bC1kb3RcIixkb3RzQ2xhc3M6XCJvd2wtZG90c1wiLGRvdHM6ITAsZG90c0VhY2g6ITEsZG90c0RhdGE6ITEsZG90c1NwZWVkOiExLGRvdHNDb250YWluZXI6ITF9LGUucHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24oKXt2YXIgYixjPXRoaXMuX2NvcmUuc2V0dGluZ3M7dGhpcy5fY29udHJvbHMuJHJlbGF0aXZlPShjLm5hdkNvbnRhaW5lcj9hKGMubmF2Q29udGFpbmVyKTphKFwiPGRpdj5cIikuYWRkQ2xhc3MoYy5uYXZDb250YWluZXJDbGFzcykuYXBwZW5kVG8odGhpcy4kZWxlbWVudCkpLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksdGhpcy5fY29udHJvbHMuJHByZXZpb3VzPWEoXCI8XCIrYy5uYXZFbGVtZW50K1wiPlwiKS5hZGRDbGFzcyhjLm5hdkNsYXNzWzBdKS5odG1sKGMubmF2VGV4dFswXSkucHJlcGVuZFRvKHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSkub24oXCJjbGlja1wiLGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy5wcmV2KGMubmF2U3BlZWQpfSx0aGlzKSksdGhpcy5fY29udHJvbHMuJG5leHQ9YShcIjxcIitjLm5hdkVsZW1lbnQrXCI+XCIpLmFkZENsYXNzKGMubmF2Q2xhc3NbMV0pLmh0bWwoYy5uYXZUZXh0WzFdKS5hcHBlbmRUbyh0aGlzLl9jb250cm9scy4kcmVsYXRpdmUpLm9uKFwiY2xpY2tcIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMubmV4dChjLm5hdlNwZWVkKX0sdGhpcykpLGMuZG90c0RhdGF8fCh0aGlzLl90ZW1wbGF0ZXM9W2EoJzxidXR0b24gcm9sZT1cImJ1dHRvblwiPicpLmFkZENsYXNzKGMuZG90Q2xhc3MpLmFwcGVuZChhKFwiPHNwYW4+XCIpKS5wcm9wKFwib3V0ZXJIVE1MXCIpXSksdGhpcy5fY29udHJvbHMuJGFic29sdXRlPShjLmRvdHNDb250YWluZXI/YShjLmRvdHNDb250YWluZXIpOmEoXCI8ZGl2PlwiKS5hZGRDbGFzcyhjLmRvdHNDbGFzcykuYXBwZW5kVG8odGhpcy4kZWxlbWVudCkpLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksdGhpcy5fY29udHJvbHMuJGFic29sdXRlLm9uKFwiY2xpY2tcIixcImJ1dHRvblwiLGEucHJveHkoZnVuY3Rpb24oYil7dmFyIGQ9YShiLnRhcmdldCkucGFyZW50KCkuaXModGhpcy5fY29udHJvbHMuJGFic29sdXRlKT9hKGIudGFyZ2V0KS5pbmRleCgpOmEoYi50YXJnZXQpLnBhcmVudCgpLmluZGV4KCk7Yi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG8oZCxjLmRvdHNTcGVlZCl9LHRoaXMpKTtmb3IoYiBpbiB0aGlzLl9vdmVycmlkZXMpdGhpcy5fY29yZVtiXT1hLnByb3h5KHRoaXNbYl0sdGhpcyl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYS
1169xiLGMsZCxlO2U9dGhpcy5fY29yZS5zZXR0aW5ncztmb3IoYSBpbiB0aGlzLl9oYW5kbGVycyl0aGlzLiRlbGVtZW50Lm9mZihhLHRoaXMuX2hhbmRsZXJzW2FdKTtmb3IoYiBpbiB0aGlzLl9jb250cm9scylcIiRyZWxhdGl2ZVwiPT09YiYmZS5uYXZDb250YWluZXI/dGhpcy5fY29udHJvbHNbYl0uaHRtbChcIlwiKTp0aGlzLl9jb250cm9sc1tiXS5yZW1vdmUoKTtmb3IoZCBpbiB0aGlzLm92ZXJpZGVzKXRoaXMuX2NvcmVbZF09dGhpcy5fb3ZlcnJpZGVzW2RdO2ZvcihjIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbY10mJih0aGlzW2NdPW51bGwpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZD10aGlzLl9jb3JlLmNsb25lcygpLmxlbmd0aC8yLGU9ZCt0aGlzLl9jb3JlLml0ZW1zKCkubGVuZ3RoLGY9dGhpcy5fY29yZS5tYXhpbXVtKCEwKSxnPXRoaXMuX2NvcmUuc2V0dGluZ3MsaD1nLmNlbnRlcnx8Zy5hdXRvV2lkdGh8fGcuZG90c0RhdGE/MTpnLmRvdHNFYWNofHxnLml0ZW1zO2lmKFwicGFnZVwiIT09Zy5zbGlkZUJ5JiYoZy5zbGlkZUJ5PU1hdGgubWluKGcuc2xpZGVCeSxnLml0ZW1zKSksZy5kb3RzfHxcInBhZ2VcIj09Zy5zbGlkZUJ5KWZvcih0aGlzLl9wYWdlcz1bXSxhPWQsYj0wLGM9MDthPGU7YSsrKXtpZihiPj1ofHwwPT09Yil7aWYodGhpcy5fcGFnZXMucHVzaCh7c3RhcnQ6TWF0aC5taW4oZixhLWQpLGVuZDphLWQraC0xfSksTWF0aC5taW4oZixhLWQpPT09ZilicmVhaztiPTAsKytjfWIrPXRoaXMuX2NvcmUubWVyZ2Vycyh0aGlzLl9jb3JlLnJlbGF0aXZlKGEpKX19LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXt2YXIgYixjPXRoaXMuX2NvcmUuc2V0dGluZ3MsZD10aGlzLl9jb3JlLml0ZW1zKCkubGVuZ3RoPD1jLml0ZW1zLGU9dGhpcy5fY29yZS5yZWxhdGl2ZSh0aGlzLl9jb3JlLmN1cnJlbnQoKSksZj1jLmxvb3B8fGMucmV3aW5kO3RoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsIWMubmF2fHxkKSxjLm5hdiYmKHRoaXMuX2NvbnRyb2xzLiRwcmV2aW91cy50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsIWYmJmU8PXRoaXMuX2NvcmUubWluaW11bSghMCkpLHRoaXMuX2NvbnRyb2xzLiRuZXh0LnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwhZiYmZT49dGhpcy5fY29yZS5tYXhpbXVtKCEwKSkpLHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsIWMuZG90c3x8ZCksYy5kb3RzJiYoYj10aGlzLl9wYWdlcy5sZW5ndGgtdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmNoaWxkcmVuKCkubGVuZ3RoLGMuZG90c0RhdGEmJjAhPT1iP3RoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5odG1sKHRoaXMuX3RlbXBsYXRlcy5qb2luKFwiXCIpKTpiPjA/dGhpcy5fY29udHJvbHMuJGFic29sdXRlLmFwcGVuZChuZXcgQXJyYXkoYisxKS5qb2luKHRoaXMuX3RlbXBsYXRlc1swXSkpOmI8MCYmdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmNoaWxkcmVuKCkuc2xpY2UoYikucmVtb3ZlKCksdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLmVxKGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSx0aGlzLl9wYWdlcykpLmFkZENsYXNzKFwiYWN0aXZlXCIpKX0sZS5wcm90b3R5cGUub25UcmlnZ2VyPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuX2NvcmUuc2V0dGluZ3M7Yi5wYWdlPXtpbmRleDphLmluQXJyYXkodGhpcy5jdXJyZW50KCksdGhpcy5fcGFnZXMpLGNvdW50OnRoaXMuX3BhZ2VzLmxlbmd0aCxzaXplOmMmJihjLmNlbnRlcnx8Yy5hdXRvV2lkdGh8fGMuZG90c0RhdGE/MTpjLmRvdHNFYWNofHxjLml0ZW1zKX19LGUucHJvdG90eXBlLmN1cnJlbnQ9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKTtyZXR1cm4gYS5ncmVwKHRoaXMuX3BhZ2VzLGEucHJveHkoZnVuY3Rpb24oYSxjKXtyZXR1cm4gYS5zdGFydDw9YiYmYS5lbmQ+PWJ9LHRoaXMpKS5wb3AoKX0sZS5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oYil7dmFyIGMsZCxlPXRoaXMuX2NvcmUuc2V0dGluZ3M7cmV0dXJuXCJwYWdlXCI9PWUuc2xpZGVCeT8oYz1hLmluQXJyYXkodGhpcy5jdXJyZW50KCksdGhpcy5fcGFnZXMpLGQ9dGhpcy5fcGFnZXMubGVuZ3RoLGI/KytjOi0tYyxjPXRoaXMuX3BhZ2VzWyhjJWQrZCklZF0uc3RhcnQpOihjPXRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpLGQ9dGhpcy5fY29yZS5pdGVtcygpLmxlbmd0aCxiP2MrPWUuc2xpZGVCeTpjLT1lLnNsaWRlQnkpLGN9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYil7YS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sdGhpcy5fY29yZSkodGhpcy5nZXRQb3NpdGlvbighMCksYil9LGUucHJvdG90eXBlLnByZXY9ZnVuY3Rpb24oYil7YS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sdGhpcy5fY29yZSkodGhpcy5nZXRQb3NpdGlvbighMSksYil9LGUucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZTshZCYmdGhpcy5fcGFnZXMubGVuZ3RoPyhlPXRoaXMuX3BhZ2VzLmxlbmd0aCxhLnByb3h5KHRoaXMuX292ZXJyaWRlcy50byx0aGlzLl9jb3JlKSh0aGlzLl9wYWdlc1soYiVlK2UpJWVdLnN0YXJ0LGMpKTphLnByb3h5KHRoaXMuX292ZXJyaWRlcy50byx0aGlzLl9jb3JlKShiLGMpfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuTmF2aWdhdGlvbj1lfSh3aW5kb3cuWmVwdG98fHdpbmRvdy5qUXVlcnksd2luZG93LGRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyxkKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1mdW5jdGlvbihjKXt0aGlzLl9jb3JlPWMsdGhpcy5faGFzaGVzPXt9LHRoaXMuJGVsZW1lbnQ9dGhpcy5fY29yZS4kZWxlbWVudCx0aGlzLl9oYW5kbGVycz17XCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGMpe2MubmFtZXNwYWNlJiZcIlVSTEhhc2hcIj09PXRoaXMuX2NvcmUuc2V0dGluZ3Muc3RhcnRQb3NpdGlvbiYmYShiKS50cmlnZ2VyKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiKX0sdGhpcyksXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGIpe2lmKGIubmFtZXNwYWNlKXt2YXIgYz1hKGIuY29udGVudCkuZmluZChcIltkYXRhLWhhc2hdXCIpLmFkZEJhY2soXCJbZGF0YS1oYXNoXVwiKS5hdHRyKFwiZGF0YS1oYXNoXCIpO2lmKCFjKXJldHVybjt0aGlzLl9oYXNoZXNbY109Yi5jb250ZW50fX0sdGhpcyksXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYyl7aWYoYy5uYW1lc3BhY2UmJlwicG9zaXRpb25cIj09PWMucHJvcGVydHkubmFtZSl7dmFyIGQ9dGhpcy5fY29yZS5pdGVtcyh0aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSksZT1hLm1hcCh0aGlzLl9oYXNoZXMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWQ/YjpudWxsfSkuam9pbigpO2lmKCFlfHxiLmxvY2F0aW9uLmhhc2guc2xpY2UoMSk9PT1lKXJldHVybjtiLmxvY2F0aW9uLmhhc2g9ZX19LHRoaXMpfSx0aGlzLl9jb3JlLm9wdGlvbnM9YS5leHRlbmQoe30sZS5EZWZhdWx0cyx0aGlzLl9jb3JlLm9wdGlvbnMpLHRoaXMuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLGEoYikub24oXCJoYXNoY2hhbmdlLm93bC5uYXZpZ2F0aW9uXCIsYS5wcm94eShmdW5jdGlvbihhKXt2YXIgYz1iLmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpLGU9dGhpcy5fY29yZS4kc3R
1169hZ2UuY2hpbGRyZW4oKSxmPXRoaXMuX2hhc2hlc1tjXSYmZS5pbmRleCh0aGlzLl9oYXNoZXNbY10pO2YhPT1kJiZmIT09dGhpcy5fY29yZS5jdXJyZW50KCkmJnRoaXMuX2NvcmUudG8odGhpcy5fY29yZS5yZWxhdGl2ZShmKSwhMSwhMCl9LHRoaXMpKX07ZS5EZWZhdWx0cz17VVJMaGFzaExpc3RlbmVyOiExfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGMsZDthKGIpLm9mZihcImhhc2hjaGFuZ2Uub3dsLm5hdmlnYXRpb25cIik7Zm9yKGMgaW4gdGhpcy5faGFuZGxlcnMpdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYyx0aGlzLl9oYW5kbGVyc1tjXSk7Zm9yKGQgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1tkXSYmKHRoaXNbZF09bnVsbCl9LGEuZm4ub3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5IYXNoPWV9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjKXt2YXIgZT0hMSxmPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKTtyZXR1cm4gYS5lYWNoKChiK1wiIFwiK2guam9pbihmK1wiIFwiKStmKS5zcGxpdChcIiBcIiksZnVuY3Rpb24oYSxiKXtpZihnW2JdIT09ZClyZXR1cm4gZT0hY3x8YiwhMX0pLGV9ZnVuY3Rpb24gZihhKXtyZXR1cm4gZShhLCEwKX12YXIgZz1hKFwiPHN1cHBvcnQ+XCIpLmdldCgwKS5zdHlsZSxoPVwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpLGk9e3RyYW5zaXRpb246e2VuZDp7V2Via2l0VHJhbnNpdGlvbjpcIndlYmtpdFRyYW5zaXRpb25FbmRcIixNb3pUcmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwiLE9UcmFuc2l0aW9uOlwib1RyYW5zaXRpb25FbmRcIix0cmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwifX0sYW5pbWF0aW9uOntlbmQ6e1dlYmtpdEFuaW1hdGlvbjpcIndlYmtpdEFuaW1hdGlvbkVuZFwiLE1vekFuaW1hdGlvbjpcImFuaW1hdGlvbmVuZFwiLE9BbmltYXRpb246XCJvQW5pbWF0aW9uRW5kXCIsYW5pbWF0aW9uOlwiYW5pbWF0aW9uZW5kXCJ9fX0saj17Y3NzdHJhbnNmb3JtczpmdW5jdGlvbigpe3JldHVybiEhZShcInRyYW5zZm9ybVwiKX0sY3NzdHJhbnNmb3JtczNkOmZ1bmN0aW9uKCl7cmV0dXJuISFlKFwicGVyc3BlY3RpdmVcIil9LGNzc3RyYW5zaXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuISFlKFwidHJhbnNpdGlvblwiKX0sY3NzYW5pbWF0aW9uczpmdW5jdGlvbigpe3JldHVybiEhZShcImFuaW1hdGlvblwiKX19O2ouY3NzdHJhbnNpdGlvbnMoKSYmKGEuc3VwcG9ydC50cmFuc2l0aW9uPW5ldyBTdHJpbmcoZihcInRyYW5zaXRpb25cIikpLGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZD1pLnRyYW5zaXRpb24uZW5kW2Euc3VwcG9ydC50cmFuc2l0aW9uXSksai5jc3NhbmltYXRpb25zKCkmJihhLnN1cHBvcnQuYW5pbWF0aW9uPW5ldyBTdHJpbmcoZihcImFuaW1hdGlvblwiKSksYS5zdXBwb3J0LmFuaW1hdGlvbi5lbmQ9aS5hbmltYXRpb24uZW5kW2Euc3VwcG9ydC5hbmltYXRpb25dKSxqLmNzc3RyYW5zZm9ybXMoKSYmKGEuc3VwcG9ydC50cmFuc2Zvcm09bmV3IFN0cmluZyhmKFwidHJhbnNmb3JtXCIpKSxhLnN1cHBvcnQudHJhbnNmb3JtM2Q9ai5jc3N0cmFuc2Zvcm1zM2QoKSl9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpOyIsIlxyXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnb3dsJylcclxuICAgIGNvbnN0IElTX1JUTCA9ICQoJ2JvZHknKS5oYXNDbGFzcygncnRsJyk7XHJcbiAgICBjb25zdCBOQVZfVEVYVCA9XHJcbiAgICAgICAgSVNfUlRMID9cclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgJzxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4gPC9pPicsXHJcbiAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1sZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+IDwvaT4nXHJcbiAgICAgICAgICAgIF0gOlxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1sZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+IDwvaT4nLFxyXG4gICAgICAgICAgICAgICAgJzxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4gPC9pPidcclxuICAgICAgICAgICAgXTtcclxuXHJcbiAgICAkKCcuY29sdW1uLW93bC1zbGlkZXInKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkaXRlbXMgPSBOdW1iZXIoJCh0aGlzKS5kYXRhKCdpdGVtcycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygkaXRlbXMgLSAyKTtcclxuICAgICAgICAkKHRoaXMpLm93bENhcm91c2VsKHtcclxuICAgICAgICAgICAgLy8gaXRlbXMgICAgICAgICAgOiAkaXRlbXMsIFxyXG4gICAgICAgICAgICBzbGlkZUJ5OiAxLFxyXG4gICAgICAgICAgICBhcnJvd3M6ICQodGhpcykuZGF0YSgnYXJyb3dzJykgPT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgICAgIHJ0bDogSVNfUlRMLFxyXG4gICAgICAgICAgICBkb3RzOiAkKHRoaXMpLmRhdGEoJ2RvdHMnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIG5hdlRleHQ6ICQodGhpcykuZGF0YSgnYXJyb3dzJykgPT0gZmFsc2UgPyAnJyA6IE5BVl9URVhULFxyXG4gICAgICAgICAgICBuYXZDb250YWluZXI6ICQodGhpcykucGFyZW50KCkuZmluZCgnLmN1c3RvbS1uYXYnKSxcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZUNsYXNzOiB0cnVlLFxyXG4gICAgICAgICAgICByZXNwb25zaXZlQmFzZUVsZW1lbnQ6ICdib2R5JyxcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZToge1xyXG4gICAgICAgICAgICAgICAgMDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAoKCRpdGVtcyAtIDIpID4gMCkgPyAkaXRlbXMgLSAyIDogMVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDcwMDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAoKCRpdGVtcyAtIDEpID4gMCkgPyAkaXRlbXMgLSAxIDogKCRpdGVtcyA9PSAxKSA/IDEgOiAyXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgMTIwMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiAkaXRlbXNcclxuICAgICAgICAgICAgICAgI
1169H1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnLmhlYWRlci1zbGlkZXInKS5vd2xDYXJvdXNlbCh7XHJcbiAgICAgICAgaXRlbXM6IDEsXHJcbiAgICAgICAgc2xpZGVCeTogMSxcclxuICAgICAgICBhcnJvd3M6ICQodGhpcykuZGF0YSgnYXJyb3dzJykgPT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgcnRsOiBJU19SVEwsXHJcbiAgICAgICAgZG90czogJCh0aGlzKS5kYXRhKCdkb3RzJykgPT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIG5hdlRleHQ6ICQodGhpcykuZGF0YSgnYXJyb3dzJykgPT0gZmFsc2UgPyAnJyA6IE5BVl9URVhULFxyXG4gICAgICAgIG5hdkNvbnRhaW5lcjogJCgnLmhlYWRlci1zbGlkZXInKS5wYXJlbnQoKS5maW5kKCcuY3VzdG9tLW5hdicpLFxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgICQoJy5zaW5nbGUtdmlkZW8tb3dsJykub3dsQ2Fyb3VzZWwoe1xyXG4gICAgICAgIGxvb3A6IGZhbHNlLFxyXG4gICAgICAgIG1hcmdpbjogMTAsXHJcbiAgICAgICAgaXRlbXM6IDEsXHJcbiAgICAgICAgYXJyb3dzOiAkKHRoaXMpLmRhdGEoJ2Fycm93cycpID09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgIHJ0bDogSVNfUlRMLFxyXG4gICAgICAgIGRvdHM6ICQodGhpcykuZGF0YSgnZG90cycpID09ICd0cnVlJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBuYXZUZXh0OiAkKHRoaXMpLmRhdGEoJ2Fycm93cycpID09IGZhbHNlID8gJycgOiBOQVZfVEVYVCxcclxuICAgICAgICBuYXZDb250YWluZXI6ICcuc2luZ2xlLXZpZGVvLW93bC13YXJwcGVyIC5jdXN0b20tbmF2JyxcclxuICAgIH0pLm9uKCdkcmFnZ2VkLm93bC5jYXJvdXNlbCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgc3RvcFZpZGVvT3dsKCk7XHJcbiAgICB9KS5vbignY2hhbmdlZC5vd2wuY2Fyb3VzZWwnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHN0b3BWaWRlb093bCgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8qIEZvciBjYXJvdXNlbC1zeW5jICovXHJcbiAgICBsZXQgc3luYzEgPSAkKCcuY2Fyb3VzZWwtc3luYzEnKTtcclxuICAgIGxldCBzeW5jMiA9ICQoJy5jYXJvdXNlbC1zeW5jMicpO1xyXG4gICAgbGV0IGR1cmF0aW9uID0gMzAwO1xyXG5cclxuXHJcbiAgICAvLyBTeW5jIG5hdlxyXG4gICAgJCgnLmNhcm91c2VsLXN5bmMxX193YXJwcGVyJykub24oJ2NsaWNrJywgJy5vd2wtbmV4dCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzeW5jMi50cmlnZ2VyKCduZXh0Lm93bC5jYXJvdXNlbCcpXHJcbiAgICB9KTtcclxuICAgICQoJy5jYXJvdXNlbC1zeW5jMV9fd2FycHBlcicpLm9uKCdjbGljaycsICcub3dsLXByZXYnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc3luYzIudHJpZ2dlcigncHJldi5vd2wuY2Fyb3VzZWwnKVxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHN5bmMxLm93bENhcm91c2VsKHtcclxuICAgICAgICBsb29wOiBmYWxzZSxcclxuICAgICAgICBtYXJnaW46IDEwLFxyXG4gICAgICAgIGl0ZW1zOiAxLFxyXG4gICAgICAgIHNtYXJ0U3BlZWQ6IGR1cmF0aW9uLFxyXG4gICAgICAgIGFycm93czogJCh0aGlzKS5kYXRhKCdhcnJvd3MnKSA9PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgICBydGw6IElTX1JUTCxcclxuICAgICAgICBkb3RzOiAkKHRoaXMpLmRhdGEoJ2RvdHMnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgbmF2VGV4dDogJCh0aGlzKS5kYXRhKCdhcnJvd3MnKSA9PSBmYWxzZSA/ICcnIDogTkFWX1RFWFQsXHJcbiAgICAgICAgbmF2Q29udGFpbmVyOiAnLmNhcm91c2VsLXN5bmMxX193YXJwcGVyIC5jdXN0b20tbmF2JyxcclxuICAgIH0pLm9uKCdkcmFnZ2VkLm93bC5jYXJvdXNlbCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKGUucmVsYXRlZFRhcmdldC5fZHJhZy5kaXJlY3Rpb24gPT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgIHN5bmMyLnRyaWdnZXIoJ25leHQub3dsLmNhcm91c2VsJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzeW5jMi50cmlnZ2VyKCdwcmV2Lm93bC5jYXJvdXNlbCcpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3luYzIub3dsQ2Fyb3VzZWwoe1xyXG4gICAgICAgIGxvb3A6IGZhbHNlLFxyXG4gICAgICAgIG1hcmdpbjogMTUsXHJcbiAgICAgICAgZG90czogZmFsc2UsXHJcbiAgICAgICAgbmF2OiBmYWxzZSxcclxuICAgICAgICBydGw6IElTX1JUTCxcclxuICAgICAgICBzbWFydFNwZWVkOiBkdXJhdGlvbixcclxuICAgICAgICByZXNwb25zaXZlQmFzZUVsZW1lbnQ6ICdib2R5JyxcclxuICAgICAgICByZXNwb25zaXZlOiB7XHJcbiAgICAgICAgICAgIDQ4MDoge1xyXG4gICAgICAgICAgICAgICAgaXRlbXM6IDMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIDEwMDA6IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiA1LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAxMjAxOiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtczogNSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9KS5vbignY2xpY2snLCAnLm93bC1pdGVtJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBudW1iZXIgPSAkKHRoaXMpLmluZGV4KCk7XHJcbiAgICAgICAgc3luYzEuZGF0YSgnb3dsLmNhcm91c2VsJykudG8obnVtYmVyLCAzMDAsIHRydWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgICQoJ1tvd2wtanVtcC10b10nKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1ObyA9ICQodGhpcykuZGF0YSgnaXRlbS1ubycpO1xyXG4gICAgICAgIC8vIGlmIHlvdSBuZWVkIGFuaW1hdGlvbiBsZWF2ZSBvbmx5IHRoZSBpdGVtTm8gLy9baXRlbU5vLDAsZmFsc2VdIC0gbm8gYW5pbWF0aW9uIC8vW2l0ZW1Ob10gLSBhbmltYXRpb25cclxuICAgICAgICAkKCcub3dsLWNhcm91c2VsJykudHJpZ2dlcigndG8ub3dsLmNhcm91c2VsJywgW2l0ZW1ObywgMCwgZmFsc2VdKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbn0pO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHN0b3BWaWRlb093bCgpIHtcclxuICAgICRpZnJhbWUgPSAkKCcub3dsLWl0ZW0uYWN0aXZlIGlmcmFtZScpOyAvLyBnZXQgdGhlIGFjdGl2ZSBpZnJhbWUgZnJvbSBvd2wgaXRlbSBcclxuICAgICRpZnJhbWVfc3JjID0gJGlmcmFtZS5hdHRyKCdzcmMnKTsgLy8gZ2V0IHRoZSBzcmMgdmlkZW9cclxuICAgICRpZnJhbWVfc3JjID0gJGlmcmFtZS5hdHRyKCdzcmMnLCAkaWZyYW1lX3NyYyk7IC8vIHJlc2V0IHRoZSBpZnJhbWVcclxufVxyXG5cclxuXHJcbiIsImxldCBjdXJyZW5jeSA9ICQoXCJodG1sXCIpLmF0dHIoXCJsYW5nXCIpID09IFwiaGUtSUxcIiA/IFwi4oKqXCIgOiBcIiRcIjtcclxuXHJcbmZ1bmN0aW9uIGNoYW5nZUN1cnJlbmN5KG1lKSB7XHJcbiAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImN1cnJlbmN5XCIpO1xyXG4gIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWxlbWVudHMsIGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICBlbGVtZW50LmlubmVySFRNTCA9IG1lLnZhbHVlO1xyXG4gIH0pO1xyXG4gIGN1cnJlbmN5ID0gbWUudmFsdWU7XHJcbn1cclxuXHJcbmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImtzLWN1cnJlbnQtc3ltYm9sXCIpKSB7XHJcbiAgdmFyIGlucHV0SGlkZGVuQ3VycmVuY3kgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImtzLWN1cnJlbnQtc3ltYm9sXCIpLnZhbHVlO1xyXG4gIGlmIChpbnB1dEhpZGRlbkN1cnJlbmN5ID09IFwi4oKsXCIpIHtcclxuICAgIGN1cnJlbmN5ID0gaW5wdXR
1169IaWRkZW5DdXJyZW5jeTtcclxuICB9XHJcbn1cclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuICBpZiAoXHJcbiAgICBpbnB1dEhpZGRlbkN1cnJlbmN5ID09IFwi4oKsXCIgJiZcclxuICAgICQoXCIuZG9uYXRpb25fYnRuX3dpXCIpLnZhbCgpLmluY2x1ZGVzKFwiTW95ZW5zXCIpXHJcbiAgKSB7XHJcbiAgICAkKFwiLnBlcnNvbmFsLWRldGFpbHMtZm9ybS1idXR0b24gaW5wdXRcIikuY3NzKFwid2lkdGhcIiwgXCIyNTBweFwiKTtcclxuICB9XHJcbiAgY29uc3QgQ29va2llQ2FydExpc3QgPSBcImNhcnRMaXN0XCI7XHJcbiAgY29uc3QgaXNTaW5nbGUgPSAkKFwiYm9keVwiKS5oYXNDbGFzcyhcInNpbmdsZS1wcm9qZWN0c19kb25cIik7XHJcblxyXG4gIGxldCBtb250aGx5RG9uYXRpb24gPSB0cnVlOyAvL2hhbmRlbCBpZiBpdHMgbW9udGhseURvbmF0aW9uXHJcbiAgbGV0IGNhcnRTdW0gPSAwOyAvLyBoYW5kbGUgdGhlIHN1bSBvZiBjYXJ0XHJcblxyXG4gIGxldCBjYXJ0TGlzdCA9IGdldENvb2tpZShDb29raWVDYXJ0TGlzdCk7IC8vIGhhbmRlbCB0aGUgY2FydCBsaXN0XHJcbiAgaWYgKGNhcnRMaXN0ID09IG51bGwgfHwgIWNhcnRMaXN0Lmxlbmd0aCkge1xyXG4gICAgY2FydExpc3QgPSBbXTtcclxuICAgIG9uZVRpbWVDbGlja2VkKCk7XHJcbiAgfSBlbHNlIHJlbmRlckNhcnRMaXN0KCk7XHJcbiAgaWYgKGlzU2luZ2xlKSB7XHJcbiAgICByZW5kZXJTaW5nbGVJdGVtKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW5kZXJDYXJ0TGlzdCgpIHtcclxuICAgIGlmIChpc1NpbmdsZSkgcmV0dXJuO1xyXG4gICAgbW9udGhseURvbmF0aW9uID0gY2FydExpc3RbMF0ubW9udGhseURvbmF0aW9uO1xyXG4gICAgLy8gcmV0dXJuO1xyXG4gICAgbGV0IGh0bWwgPSBcIlwiO1xyXG4gICAgbGV0IG1vbnRoID0gbW9udGhseURvbmF0aW9uXHJcbiAgICAgID8gJChcImJvZHlcIikuaGFzQ2xhc3MoXCJydGxcIilcclxuICAgICAgICA/IFwi15zXl9eV15PXqVwiXHJcbiAgICAgICAgOiBcImZvciBtb250aFwiXHJcbiAgICAgIDogXCJcIjtcclxuICAgIGNhcnRMaXN0Lm1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICBodG1sICs9IGA8ZGl2IGNsYXNzPVwiZG9uYXRpb25zLWxpc3QtaXRlbVwiIGRvbmF0aW9uLWxpc3QtaXRlbS0ke2RhdGEuaWR9PlxyXG4gICAgICAgIDxkaXY+JHtkYXRhLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgIDxkaXY+JHtkYXRhLmFtb3VudH08L2Rpdj5cclxuICAgICAgICA8ZGl2PjxzcGFuIGNsYXNzPVwiY3VycmVuY3lcIj4ke2lucHV0SGlkZGVuQ3VycmVuY3l9PC9zcGFuPiR7XHJcbiAgICAgICAgZGF0YS5wcmljZVxyXG4gICAgICB9ICR7bW9udGh9PC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiByZW1vdmUtZnJvbS1jYXJ0IGRhdGEtcHJvamVjdC1pZD1cIiR7ZGF0YS5pZH1cIiBkYXRhLXN1bT1cIiR7XHJcbiAgICAgICAgZGF0YS5hbW91bnQgKiBkYXRhLnByaWNlXHJcbiAgICAgIH1cIj4gPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+IDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj4gYDtcclxuICAgICAgY2FydFN1bSArPSBkYXRhLmFtb3VudCAqIGRhdGEucHJpY2U7XHJcbiAgICAgIGNvbnN0IGJveCA9ICQoYCMke2RhdGEuaWR9YCk7XHJcbiAgICAgIGJveC5maW5kKFwiW2FkZC10by1jYXJ0XVwiKS5oaWRlKCk7XHJcbiAgICAgIGJveC5maW5kKFwiLmFkZGVkLXRvLWNhcnRcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKFwiLmRvbmF0aW9ucy1saXN0XCIpLmFwcGVuZChodG1sKTtcclxuICAgIHRvdGFsQ2FydFN1bShjYXJ0U3VtKTtcclxuXHJcbiAgICBjaGFuZ2VUYWJDbGlja2VkKG1vbnRobHlEb25hdGlvbiA/ICQoXCIjbW9udGhseVRhYlwiKSA6ICQoXCIjb25lVGltZVRhYlwiKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW5kZXJTaW5nbGVJdGVtKCkge1xyXG4gICAgY29uc3QgX2lkID0gJChcImJ1dHRvblthZGQtdG8tY2FydF1cIikuZGF0YShcInByb2plY3QtaWRcIik7XHJcbiAgICBpZiAoY2FydExpc3QuZmlsdGVyKChpKSA9PiBpLmlkID09PSBfaWQpLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBib3ggPSAkKGAjJHtfaWR9YCk7XHJcbiAgICAgIGJveC5maW5kKFwiW2FkZC10by1jYXJ0XVwiKS5oaWRlKCk7XHJcbiAgICAgIGJveC5maW5kKFwiLmFkZGVkLXRvLWNhcnRcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoJChcIiNwcm9qZWN0c1wiKS52YWwoKSkge1xyXG4gICAgY29uc3QgUHJvamVjdEFyciA9IEpTT04ucGFyc2UoJChcIiNwcm9qZWN0c1wiKS52YWwoKSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhQcm9qZWN0QXJyKTtcclxuICB9XHJcblxyXG4gIC8vb3BlbiBjYXJ0IG9uIG1vYmlsZVxyXG4gICQoXCIuZG9uYXRpb24tY2FydFwiKS5vbihcImNsaWNrXCIsIFwiLmRvbmF0aW9uLXRpdGxlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICQoXCIuZG9uYXRpb24tY2FydFwiKS50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gb25lVGltZUNsaWNrZWQoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnb25lVGltZUNsaWNrZWQnKTtcclxuXHJcbiAgICAkKFwiW2RhdGEtZm9yLW1vbnRoXVwiKS5oaWRlKCk7XHJcbiAgICAkKFwiW2RhdGEtY2FydC10aXRsZV1cIikuZWFjaCgoaSwgZWwpID0+IHtcclxuICAgICAgJChlbCkuaHRtbCgkKGVsKS5kYXRhKFwib25ldGltZS10aXRsZVwiKSk7XHJcbiAgICB9KTtcclxuICAgIGxldCBvcHRpb25zID0gXCJcIjtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcclxuICAgICAgb3B0aW9ucyArPSBgPG9wdGlvbiB2YWx1ZT1cIiR7aX1cIj4ke2l9PC9vcHRpb24+YDtcclxuICAgIH1cclxuICAgICQoXCIjcGF5bWVudHNcIikuaH
1169RtbChvcHRpb25zKTtcclxuICAgIG1vbnRobHlEb25hdGlvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbW9udGhseUNsaWNrZWQoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnbW9udGhseSBjbGljaycpO1xyXG4gICAgJChcIltkYXRhLWZvci1tb250aF1cIikuc2hvdygpO1xyXG4gICAgJChcIltkYXRhLWNhcnQtdGl0bGVdXCIpLmVhY2goKGksIGVsKSA9PiB7XHJcbiAgICAgICQoZWwpLmh0bWwoJChlbCkuZGF0YShcIm1vbnRoLXRpdGxlXCIpKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IHVubGltaXQgPSAkKFwiYm9keVwiKS5oYXNDbGFzcyhcInJ0bFwiKSA/IFwi15zXnNeQINeU15LXkdec15RcIiA6IFwiVW5saW1pdGVkXCI7XHJcbiAgICBsZXQgbW9udGhQYXkgPSBbMywgNiwgMTIsIDE4LCAyNCwgMzZdO1xyXG4gICAgbGV0IG9wdGlvbnMgPSBgPG9wdGlvbiB2YWx1ZT1cInVubGltaXRcIj4ke3VubGltaXR9PC9vcHRpb24+YDtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbW9udGhQYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3QgaSA9IG1vbnRoUGF5W2pdO1xyXG4gICAgICBvcHRpb25zICs9IGA8b3B0aW9uIHZhbHVlPVwiJHtpfVwiPiR7aX08L29wdGlvbj5gO1xyXG4gICAgfVxyXG4gICAgJChcIiNwYXltZW50c1wiKS5odG1sKG9wdGlvbnMpO1xyXG5cclxuICAgIG1vbnRobHlEb25hdGlvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL29wZW4gdGFiXHJcbiAgJChcIi50YWJsaW5rc1wiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdjbGljaycpO1xyXG4gICAgLy9jaGVjayB0aGF0IHRoZSB0eXBlIG9mIGRvbmF0aW9ucyBkb2VzIG5vdCBjb25mbGljdFxyXG4gICAgaWYgKGNhcnRMaXN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIGNoYW5nZVRhYkNsaWNrZWQoJCh0aGlzKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAkKFwiI2Rvbl9tb2RhbCAubW9kYWwtdGV4dFwiKS5odG1sKCQoXCIjZG9uRXJyb3JcIikudmFsKCkpO1xyXG4gICAgICAkKFwiI2Rvbl9tb2RhbFwiKS5hZGRDbGFzcyhcImFjdGl2ZSBlcnJvcl9tc2dcIik7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIGNoYW5nZSB0aGUgdmlldyBieSB3aG8gd2FzIGNsaWNrZWRcclxuICBmdW5jdGlvbiBjaGFuZ2VUYWJDbGlja2VkKCRjbGlrZWQpIHtcclxuICAgICRjbGlrZWQucGFyZW50KCkuY2hpbGRyZW4oXCIudGFibGlua3NcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAkY2xpa2VkLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICQoXCIudGFiY29udGVudFwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICQoJGNsaWtlZC5kYXRhKFwidGFiLWlkXCIpKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuXHJcbiAgICBpZiAoJGNsaWtlZC5kYXRhKFwidGFiLWlkXCIpID09IFwiI29uZS10aW1lXCIpIHtcclxuICAgICAgb25lVGltZUNsaWNrZWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1vbnRobHlDbGlja2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2FkZCB0byBjYXJ0IGZ1bmN0aW9uXHJcbiAgJChcIi5kb25hdGlvbi10eXBlcy13cmFwICwgLnNpbmdsZS1wcm9qZWN0c19kb25cIikub24oXHJcbiAgICBcImNsaWNrXCIsXHJcbiAgICBcIlthZGQtdG8tY2FydF1cIixcclxuICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICBsZXQgYW1vdW50ID0gJChcIiNcIiArICR0aGlzLmRhdGEoXCJwcm9qZWN0LWlkXCIpKVxyXG4gICAgICAgIC5maW5kKFwiW25hbWU9YW1vdW50XVwiKVxyXG4gICAgICAgIC52YWwoKTtcclxuICAgICAgaWYgKGlzU2luZ2xlKSB7XHJcbiAgICAgICAgbW9udGhseURvbmF0aW9uID0gJChcImlucHV0I21vbnRobHlcIikubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghYW1vdW50IHx8IGFtb3VudCA8IDEpIHtcclxuICAgICAgICBhbW91bnQgPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgIGlkOiAkdGhpcy5kYXRhKFwicHJvamVjdC1pZFwiKSxcclxuICAgICAgICB0aXRsZTogJHRoaXMuZGF0YShcInRpdGxlXCIpLFxyXG4gICAgICAgIHByaWNlOiAkdGhpcy5kYXRhKFwicHJpY2VcIiksXHJcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAocHVzaFRvQ2FydChkYXRhKSkge1xyXG4gICAgICAgICQodGhpcykuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICAgJChcIiNcIiArICR0aGlzLmRhdGEoXCJwcm9qZWN0LWlkXCIpKVxyXG4gICAgICAgICAgLmZpbmQoXCIuYWRkZWQtdG8tY2FydFwiKVxyXG4gICAgICAgICAgLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGlmIChpc1NpbmdsZSkge1xyXG4gICAgICAgICAgJChcIiNcIiArICR0aGlzLmRhdGEoXCJwcm9qZWN0LWlkXCIpKVxyXG4gICAgICAgICAgICAuZmluZChcIi5hZGRlZC10by1jYXJ0XCIpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCI8YnIgLz5cIiwgJChcImlucHV0W25hbWU9bW92ZU1zZ11cIikudmFsKCkpO1xyXG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCQoXCJpbnB1dFtuYW1lPWdvdG9dXCIpLnZhbCgpKTtcclxuICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICk7XHJcblxyXG4gIC8vYWRkIHRvIGNhcnQgZnJvbSBtb2RhbCBmdW5jdGlvblxyXG4gICQoXCIjZG9uX21vZGFsXCIpLm9uKFwiY2xpY2tcIiwgXCJbYWRkLXRvLWNhcnRdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICR0aGlzID0gJCh0aGlzKTtcclxuICAgIGxldCBhbW91bnQgPSAkKFwiI2Rvbl9tb2RhbFwiKS5maW5kKFwiW25hbWU9YW1vdW50XVwiKS52YWwoKTtcclxuICAgIGlmIChhbW91bnQgPCAxKSB7XHJcbiAgICAgIGFtb3VudCA9IDE7XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgaWQ6ICR0aGlzLmRhdGEoXCJwcm9qZWN0LWlkXCIpLFxyXG4gICAgICB0aXRsZTogJHRoaXMuZGF0YShcInRpdGxlXCIpLFxyXG4gICAgICBwcmljZTogJHRoaXMuZGF0YShcInByaWNlXCIpLFxyXG4gICAgICBhbW91bnQ6IGFtb3VudCxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHB1c2hUb0NhcnQoZGF0YSkpIHtcclxuICAgICAgJCh0aGlzKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgJChcIiNcIiArICR0aGlzLmRhdGEoXCJwcm9qZWN0LWlkXCIpKVxyXG4gICAgICAgIC5maW5kKFwiW2FkZC10by1jYXJ0XVwiKVxyXG4gICAgICAgIC5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuXHJcbiAgICAgICQoXCIjXCIgKyAkdGhpcy5kYXRhKFwicHJvamVjdC1pZFwiKSlcclxuICAgICAgICAuZmluZChcIi5hZGRlZC10by1jYXJ0XCIpXHJcbiAgICAgICAgLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAkKFwiI2Rvbl9tb2RhbFwiKS5maW5kKFwiLmFkZGVkLXRvLWNhcnRcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gICQoXCIuZG9uYXRpb24tcHJpY2Utd3JhcFwiKS5vbihcImNsaWNrXCIsIFwiLmRvbmF0aW9uLXByaWNlLWl0ZW1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgJChcIi5kb25hdGlvbi1wcmljZS1pdGVtXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgJChcIi5mcmVlQW1vdW50XCIpLnZhbChcIlwiKTtcclxuICAgICR0aGlzID0gJCh0aGlzKTtcclxuICAgICR0aGlzLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgYWRkdG9jYXJ0ZnVuYygpO1xyXG4gIH0pO1xyXG5cclxuICAkK
1169FwiLmRvbmF0aW9uLXByaWNlLXdyYXBcIikub24oXCJjbGlja1wiLCBcIlthZGQtdG8tY2FydF1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgYWRkdG9jYXJ0ZnVuYygpO1xyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiBhZGR0b2NhcnRmdW5jKCkge1xyXG4gICAgcHJpY2UgPVxyXG4gICAgICAkKFwiLmZyZWVBbW91bnRcIikudmFsKCkgJiYgJChcIi5mcmVlQW1vdW50XCIpLnZhbCgpID4gMFxyXG4gICAgICAgID8gJChcIi5mcmVlQW1vdW50XCIpLnZhbCgpXHJcbiAgICAgICAgOiAkKFwiLmRvbmF0aW9uLXByaWNlLWl0ZW0uYWN0aXZlXCIpLmRhdGEoXCJwcmljZVwiKTtcclxuXHJcbiAgICBpZiAoIXByaWNlIHx8IHByaWNlIDwgMCkgcmV0dXJuO1xyXG5cclxuICAgIGlkID0gJChcIiNvbmUtdGltZVwiKS5oYXNDbGFzcyhcImFjdGl2ZVwiKSA/IDc1MyA6IDc1MTtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBpZDogaWQsXHJcbiAgICAgIHRpdGxlOiAkKFwiLnRhYmxpbmtzLmFjdGl2ZSBoM1wiKS5odG1sKCksXHJcbiAgICAgIHByaWNlOiBwcmljZSxcclxuICAgICAgYW1vdW50OiAxLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocHVzaFRvQ2FydChkYXRhKSkge1xyXG4gICAgICAkKFwiLmRvbmF0aW9uLXByaWNlLWl0ZW1cIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICQoXCIuZnJlZUFtb3VudFwiKS52YWwoXCJcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAkKFwiaW5wdXQuZnJlZUFtb3VudFwiKS5mb2N1cyhmdW5jdGlvbiAoKSB7XHJcbiAgICAkKFwiLmRvbmF0aW9uLXByaWNlLWl0ZW1cIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfSk7XHJcblxyXG4gIC8vcmVtb3ZlIHByb2plY3QgZnJvbSBjYXJ0XHJcbiAgJChcIi5kb25hdGlvbnMtbGlzdFwiKS5vbihcImNsaWNrXCIsIFwiW3JlbW92ZS1mcm9tLWNhcnRdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICR0aGlzID0gJCh0aGlzKTtcclxuICAgIHByb19pZCA9ICR0aGlzLmRhdGEoXCJwcm9qZWN0LWlkXCIpO1xyXG4gICAgJChcIltkb25hdGlvbi1saXN0LWl0ZW0tXCIgKyBwcm9faWQgKyBcIl1cIikucmVtb3ZlKCk7XHJcblxyXG4gICAgY2FydExpc3QgPSBjYXJ0TGlzdC5maWx0ZXIoKGNhcnQpID0+IGNhcnQuaWQgIT09IHByb19pZCk7XHJcblxyXG4gICAgJChcIiNcIiArIHByb19pZClcclxuICAgICAgLmZpbmQoXCIuYWRkZWQtdG8tY2FydFwiKVxyXG4gICAgICAucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAkKFwiI1wiICsgcHJvX2lkKVxyXG4gICAgICAuZmluZChcIlthZGQtdG8tY2FydF1cIilcclxuICAgICAgLmNzcyhcImRpc3BsYXlcIiwgXCJcIik7XHJcblxyXG4gICAgdG90YWxDYXJ0U3VtKChjYXJ0U3VtIC09ICR0aGlzLmRhdGEoXCJzdW1cIikpKTtcclxuXHJcbiAgICBzZXRDb29raWUoQ29va2llQ2FydExpc3QsIEpTT04uc3RyaW5naWZ5KGNhcnRMaXN0KSwgMTApO1xyXG4gIH0pO1xyXG5cclxuICAvLyBwdXNoIHRoZSBwcm9qZWN0IHRvIGNhcnQgYW5kIGNhbGMgdGhlIHN1bVxyXG4gIGZ1bmN0aW9uIHB1c2hUb0NhcnQoZGF0YSkge1xyXG4gICAgLy9jaGVjayBpZiB0aGUgcHJvamVjdCBpcyBhbHJlYWR5IGV4aXN0cyBieSBpcyBpZFxyXG4gICAgaWYgKGNhcnRMaXN0LmZpbHRlcigoY2FydCkgPT4gY2FydC5pZCA9PT0gZGF0YS5pZCkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy9jaGVjayBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlIHdpdGggbW9udGhseURvbmF0aW9uJ3MgZnJvbSB0aGUgc2luZ2xlIHBhZ2UgLSBpZiBleHNpc3QgY2hhbmdlIGNsZWFyIHRoZSBjYXJ0XHJcbiAgICBpZiAoY2FydExpc3QubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjYXJ0TGlzdCkge1xyXG4gICAgICAgIGlmIChpdGVtLm1vbnRobHlEb25hdGlvbiAhPSBtb250aGx5RG9uYXRpb24pIHtcclxuICAgICAgICAgIGNhcnRMaXN0ID0gW107XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRhdGEubW9udGhseURvbmF0aW9uID0gbW9udGhseURvbmF0aW9uO1xyXG4gICAgY2FydExpc3QucHVzaChkYXRhKTtcclxuICAgIHNldENvb2tpZShDb29raWVDYXJ0TGlzdCwgSlNPTi5zdHJpbmdpZnkoY2FydExpc3QpLCAxMCk7XHJcblxyXG4gICAgY2FydFN1bSArPSBkYXRhLmFtb3VudCAqIGRhdGEucHJpY2U7XHJcbiAgICBsZXQgbW9udGggPSBtb250aGx5RG9uYXRpb25cclxuICAgICAgPyAkKFwiYm9keVwiKS5oYXNDbGFzcyhcInJ0bFwiKVxyXG4gICAgICAgID8gXCLXnNeX15XXk9epXCJcclxuICAgICAgICA6IFwiZm9yIG1vbnRoXCJcclxuICAgICAgOiBcIlwiO1xyXG5cclxuICAgIGh0bWwgPSBgPGRpdiBjbGFzcz1cImRvbmF0aW9ucy1saXN0LWl0ZW1cIiBkb25hdGlvbi1saXN0LWl0ZW0tJHtkYXRhLmlkfT5cclxuICAgICAgPGRpdj4ke2RhdGEudGl0bGV9PC9kaXY+XHJcbiAgICAgIDxkaXY+JHtkYXRhLmFtb3VudH08L2Rpdj5cclxuICAgICAgPGRpdj48c3BhbiBjbGFzcz1cImN1cnJlbmN5XCI+JHtjdXJyZW5jeX08L3NwYW4+JHtkYXRhLnByaWNlfSAke21vbnRofTwvZGl2PlxyXG4gICAgICA8YnV0dG9uIHJlbW92ZS1mcm9tLWNhcnQgZGF0YS1wcm9qZWN0LWlkPVwiJHtkYXRhLmlkfVwiIGRhdGEtc3VtPVwiJHtcclxuICAgICAgZGF0YS5hbW91bnQgKiBkYXRhLnByaWNlXHJcbiAgICB9XCI+IDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPiA8L2J1dHRvbj5cclxuICAgIDwvZGl2PiBgO1xyXG5cclxuICAgICQoXCIuZG9uYXRpb25zLWxpc3RcIikuYXBwZW5kKGh0bWwpO1xyXG4gICAgdG90YWxDYXJ0U3VtKGNhcnRTdW0pO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdG90YWxDYXJ0U3VtKGNhcnRTdW0pIHtcclxuICAgICQoXCIudG90YWwtc3VtbS1zdW1cIikuaHRtbChjYXJ0U3VtKTtcclxuICB9XHJcbiAgJChcIi5kb25hdGlvbi10eXBlcy13cmFwXCIpLm9uKFwiZm9jdXNcIiwgXCJpbnB1dCx0ZXh0YXJlYVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPiA3MDApIHJldHVybjtcclxuICAgICQoXCJodG1sLCBib2R5XCIpLmFuaW1hdGUoXHJcbiAgICAgIHtcclxuICAgICAgICBzY3JvbGxUb3A6XHJcbiAgICAgICAgICAkKHRoaXMpLm9mZnNldCgpLnRvcCAtXHJcbiAgICAgICAgICAoJCh3aW5kb3cpLmhlaWdodCgpIC0gJCh0aGlzKS5vdXRlckhlaWdodCh0cnVlKSkgLyAyLFxyXG4gICAgICB9LFxyXG4gICAgICBcImZhc3RcIlxyXG4gICAgKTtcclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gc2V0Q29va2llKGNuYW1lLCBjdmFsdWUsIGV4ZGF5cykge1xyXG4gICAgbGV0IGQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgZC5zZXRUaW
11691lKGQuZ2V0VGltZSgpICsgZXhkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCk7XHJcbiAgICBsZXQgZXhwaXJlcyA9IFwiZXhwaXJlcz1cIiArIGQudG9VVENTdHJpbmcoKTtcclxuICAgIGRvY3VtZW50LmNvb2tpZSA9IGNuYW1lICsgXCI9XCIgKyBjdmFsdWUgKyBcIjtcIiArIGV4cGlyZXMgKyBcIjtwYXRoPS9cIjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7XHJcbiAgICBsZXQgbmFtZUVRID0gbmFtZSArIFwiPVwiO1xyXG4gICAgbGV0IGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGMgPSBjYVtpXTtcclxuICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09IFwiIFwiKSBjID0gYy5zdWJzdHJpbmcoMSwgYy5sZW5ndGgpO1xyXG4gICAgICBpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLCBjLmxlbmd0aCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEN1cnJlbmN5SXNvKCkge1xyXG4gICAgc3dpdGNoIChjdXJyZW5jeSkge1xyXG4gICAgICBjYXNlIFwi4oKqXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiSUxTXCI7XHJcbiAgICAgIGNhc2UgXCIkXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiVVNEXCI7XHJcbiAgICAgIGNhc2UgXCLigqxcIjpcclxuICAgICAgICByZXR1cm4gXCJFVVJcIjtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gXCJJTFNcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIERvbmF0aW9uIHByb2Nlc3NcclxuICAkKFwiW21vdmUtdG8tcGVyc29uYWwtZGV0YWlsc11cIikuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFjYXJ0TGlzdC5sZW5ndGgpIHJldHVybjtcclxuICAgICQoXCIubWFpbi1kb25hdGlvbi1jb250YWluZXJcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAkKFwiLnBlcnNvbmFsLWRldGFpbHMtbWFpbi1jb250YWluZXJcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgJChcIltkYXRhLWNhcnQtcGF5bWVudHNdXCIpLmh0bWwoJChcIiNwYXltZW50c1wiKS52YWwoKSk7XHJcblxyXG4gICAgJChcImh0bWwsIGJvZHlcIikuYW5pbWF0ZShcclxuICAgICAge1xyXG4gICAgICAgIHNjcm9sbFRvcDogJChcIi5wZXJzb25hbC1kZXRhaWxzLW1haW4tY29udGFpbmVyXCIpLm9mZnNldCgpLnRvcCAtIDEwMCxcclxuICAgICAgfSxcclxuICAgICAgXCJmYXN0XCJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCQoXCIjcGF5bWVudHNcIikudmFsKCkgIT0gMSkge1xyXG4gICAgICAkKCdbZGF0YS1wYXktdmlhPVwic3RyaXBlXCJdJykuaGlkZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgJCgnW2RhdGEtcGF5LXZpYT1cInN0cmlwZVwiXScpLnNob3coKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gaXNFbWFpbChlbWFpbCkge1xyXG4gICAgdmFyIHJlZ2V4ID0gL14oW2EtekEtWjAtOV8uKy1dKStcXEAoKFthLXpBLVowLTktXSkrXFwuKSsoW2EtekEtWjAtOV17Miw0fSkrJC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdChlbWFpbCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjcmVkaXRDYXJkUmVxdWlyZWQocmVxdWlyZWQgPSB0cnVlKSB7XHJcbiAgICAkKFwiW2RhdGEtY3JlZGl0LWNhcmRdXCIpLnByb3AoXCJyZXF1aXJlZFwiLCByZXF1aXJlZCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXREb25hdGlvbkRhdGEoKSB7XHJcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xyXG4gICAgJChcImlucHV0W3JlcXVpcmVkXVwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAkdGhpcy5wYXJlbnQoXCIucGVyc29uYWwtZGV0YWlscy1mb3JtLWNvbnRlbnRcIikucmVtb3ZlQ2xhc3MoXCJpbnB1dC1lcnJvclwiKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coJHRoaXMpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgJHRoaXMudmFsKCkubGVuZ3RoIDwgMSB8fFxyXG4gICAgICAgICgkdGhpcy5wcm9wKFwidHlwZVwiKSA9PSBcImNoZWNrYm94XCIgJiYgISR0aGlzLmlzKFwiOmNoZWNrZWRcIikpXHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vJHRoaXMucGFyZW50KFwiLnBlcnNvbmFsLWRldGFpbHMtZm9ybS1jb250ZW50XCIpLmFkZENsYXNzKFwiaW5wdXQtZXJyb3JcIik7XHJcbiAgICAgICAgLy92YWxpZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIGlmIG5vdCBhbGwgdGhlIHJlcXVpcmVkIGlucHV0cyBhcmUgZmlsbFxyXG4gICAgaWYgKCF2YWxpZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBmX25hbWUgPSAkKFwiaW5wdXRbbmFtZT1mX25hbWVdXCIpLnZhbCgpO1xyXG4gICAgbGV0IGxfbmFtZSA9ICQoXCJpbnB1dFtuYW1lPWxfbmFtZV1cIikudmFsKCk7XHJcbiAgICBsZXQgZW1haWwgPSAkKFwiaW5wdXRbbmFtZT1lbWFpbF1cIikudmFsKCk7XHJcbiAgICBsZXQgcGhvbmUgPSAkKFwiaW5wdXRbbmFtZT1waG9uZV1cIikudmFsKCk7XHJcbiAgICBsZXQgcmVjZXB0aW9uX25
1169hbWUgPSAkKFwiaW5wdXRbbmFtZT1yZWNlcHRpb25fbmFtZV1cIikudmFsKCk7XHJcbiAgICBsZXQgc3RyZWV0ID0gJChcImlucHV0W25hbWU9c3RyZWV0XVwiKS52YWwoKTtcclxuICAgIGxldCBhcGFydG1lbnQgPSAkKFwiaW5wdXRbbmFtZT1hcGFydG1lbnRdXCIpLnZhbCgpO1xyXG4gICAgbGV0IGNpdHkgPSAkKFwiaW5wdXRbbmFtZT1jaXR5XVwiKS52YWwoKTtcclxuICAgIGxldCBjb21tZW50cyA9ICQoXCJpbnB1dFtuYW1lPWNvbW1lbnRzXVwiKS52YWwoKTtcclxuXHJcbiAgICBsZXQgY3JlZGl0X2NhcmQgPSAkKFwiaW5wdXRbZGF0YS1vZz1jYXJkbnVtYmVyXVwiKS5sZW5ndGhcclxuICAgICAgPyAkKFwiaW5wdXRbZGF0YS1vZz1jYXJkbnVtYmVyXVwiKS52YWwoKVxyXG4gICAgICA6IFwiXCI7XHJcbiAgICBsZXQgb2dfdG9rZW4gPSAkKFwiI29nLXRva2VuXCIpLnZhbCgpO1xyXG5cclxuICAgIC8vY2hlY2sgaWYgaXMgdmFsaWQgaW5wdXRzXHJcbiAgICBpZiAoZW1haWwgJiYgIWlzRW1haWwoZW1haWwpKSB7XHJcbiAgICAgICQoXCJpbnB1dFtuYW1lPWVtYWlsXVwiKS5hZGRDbGFzcyhcImlucHV0LWVycm9yXCIpO1xyXG4gICAgICAkKFwiaW5wdXRbbmFtZT1lbWFpbF1cIikubmV4dCgpLmFkZENsYXNzKFwiZXJyb3JcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVxdWlyZWRJbnB1dHMgPSBbZW1haWxdO1xyXG4gICAgJC5lYWNoKHJlcXVpcmVkSW5wdXRzLCBmdW5jdGlvbiAoaSwgdmFsKSB7XHJcbiAgICAgIGlmICh2YWwubGVuZ3RoIDwgMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIGN1cnJlbmN5X2lzbyA9IGdldEN1cnJlbmN5SXNvKCk7XHJcblxyXG4gICAgbGV0IGRvbkRhdGEgPSB7XHJcbiAgICAgIGZpcnN0X25hbWU6IGZfbmFtZSxcclxuICAgICAgbGFzdF9uYW1lOiBsX25hbWUsXHJcbiAgICAgIGVtYWlsOiBlbWFpbCxcclxuICAgICAgcGhvbmU6IHBob25lLFxyXG4gICAgICByZWNlcHRpb25fbmFtZTogcmVjZXB0aW9uX25
1169hbWUsXHJcbiAgICAgIHN0cmVldDogc3RyZWV0LFxyXG4gICAgICBhcGFydG1lbnQ6IGFwYXJ0bWVudCxcclxuICAgICAgY2l0eTogY2l0eSxcclxuICAgICAgY29tbWVudHM6IGNvbW1lbnRzLFxyXG4gICAgICB0eXBlOiAkKFwiLnRhYmxpbmtzLmFjdGl2ZVwiKS5kYXRhKFwidHlwZVwiKSxcclxuICAgICAgcGF5bWVudHM6ICQoXCJzZWxlY3RbbmFtZT1wYXltZW50c11cIikudmFsKCksXHJcbiAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeSxcclxuICAgICAgY3VycmVuY3lfaXNvOiBjdXJyZW5jeV9pc28sXHJcbiAgICAgIHRvdGFsOiBjYXJ0U3VtLFxyXG4gICAgICBwcm9qZWN0czogY2FydExpc3QsXHJcbiAgICAgIFwiNGRpZ2l0c1wiOiBjcmVkaXRfY2FyZC5zdWJzdHIoY3JlZGl0X2NhcmQubGVuZ3RoIC0gNCksXHJcbiAgICAgIFwib2ctdG9rZW5cIjogb2dfdG9rZW4sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRvbkRhdGE7XHJcbiAgfVxyXG5cclxuICAkKFwiI2RvbmF0aW9uRm9ybVwiKS5zdWJtaXQoZnVuY3Rpb24gKGUpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICB9KTtcclxuXHJcbiAgLy8gd2FpdCBvbmUgc2Vjb25kIGZvciBvZmZpY2UgZ3V5IHRva2VuXHJcbiAgZnVuY3Rpb24gd2FpdE9uZVNlY29uZCgpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICByZXNvbHZlKFwicmVzb2x2ZWRcIik7XHJcbiAgICAgIH0sIDIwMDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAkKFwiW2RvbmF0aW9uLW5vd11cIikuY2xpY2soYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFjYXJ0TGlzdC5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBidG4gPSAkKHRoaXMpO1xyXG5cclxuICAgIC8vIGNoZWNrIHRoZSBwYXkgdHlwZSBpZiBpdHMgYnkgb2ZmaWNlZ3V5IGdldCB0b2tlblxyXG4gICAgbGV0IHBheV92aWEgPSAkKHRoaXMpLmRhdGEoXCJwYXktdmlhXCIpO1xyXG4gICAgaWYgKHBheV92aWEgPT0gXCJvZmZpY2VndXlcIikge1xyXG4gICAgICBidG4ucHJvcChcImRpc2FibGVkXCIsIHRydWUpO1xyXG4gICAgICBjcmVkaXRDYXJkUmVxdWlyZWQoKTtcclxuICAgICAgT2ZmaWNlR3V5LlBheW1lbnRzLkJpbmRGb3JtU3VibWl0KHtcclxuICAgICAgICBDb21wYW55SUQ6IFwiNjkyMzAwMTRcIixcclxuICAgICAgICBBUElQdWJsaWNLZXk6IFwidURBc3VudU9LVHpiZkdrN2ROWW8wMEh6RVpqYlNvclpwcUdraHNLWFU0ZlRIMFRqd1BcIixcclxuICAgICAgfSk7XHJcbiAgICAgICQoXCIjZG9uYXRpb25Gb3JtXCIpLnN1Ym1pdCgpO1xyXG4gICAgICBhd2FpdCB3YWl0T25lU2Vjb25kKCk7XHJcbiAgICAgIGJ0bi5wcm9wKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3JlZGl0Q2FyZFJlcXVpcmVkKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZG9uRGF0YSA9IGdldERvbmF0aW9uRGF0YSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZG9uRGF0YSk7XHJcbiAgICBpZiAoZG9uRGF0YSA9PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgIC8vYWRkIHRoZSBhY3Rpb24gdG8gZGF0YSBmb3IgYWpheFxyXG4gICAgZG9uRGF0YS5hY3Rpb24gPSBcIm5ld19kb25hdGlvblwiO1xyXG4gICAgZG9uRGF0YS5wYXlfdmlhID0gcGF5X3ZpYTtcclxuICAgIGRvbkRhdGEubm9uY2UgPSBhamF4X3BhcmFtcy5hamF4X25vbmNlO1xyXG5cclxuICAgICQuYWpheCh7XHJcbiAgICAgIHVybDogYWpheF9wYXJhbXMuYWpheF91cmwsXHJcbiAgICAgIHR5cGU6IFwiUE9TVFwiLFxyXG4gICAgICBkYXRhOiBkb25EYXRhLFxyXG4gICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9kaXNhYmxlZCB0aGUgYnV0dG9uXHJcbiAgICAgICAgYnRuLnByb3AoXCJkaXNhYmxlZFwiLCB0cnVlKTtcclxuICAgICAgfSxcclxuICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmVzID0gcmVzcG9uc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZXJyb3IganNvbiAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgLy9lbmFibGVkIHRoZSBidXR0b25cclxuICAgICAgICAgIGJ0bi5wcm9wKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3YXMgYW4gZXJyb3JcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXMuaGFzT3duUHJvcGVydHkoXCJhY3Rpb25cIikgJiZcclxuICAgICAgICAgIHJlc1tcImFjdGlvblwiXSA9PSBcInJlZGlyZWN0VXJsXCIgJiZcclxuICAgICAgICAgIHJlcy5oYXNPd25Qcm9wZXJ0eShcInVybFwiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXNbXCJ1cmxcIl07XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHJlcy5oYXNPd25Qcm9wZXJ0eShcImFjdGlvblwiKSAmJlxyXG4gICAgICAgICAgcmVzW1wiYWN0aW9uXCJdID09IFwicmVkaXJlY3RTdHJpcGVcIiAmJlxyXG4gICAgICAgICAgcmVzLmhhc093blByb3BlcnR5KFwic2Vzc2lvbklkXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBzdHJpcGVQdWJsaWMgPSAkKFwiI3N0cmlwZV9wdWJsaWNcIikudmFsKCk7XHJcbiAgICAgICAgICBpZiAoIXN0cmlwZVB1YmxpYykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5vIHN0cmlwZSBrZXlcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHN0cmlwZSA9IFN0cmlwZShzdHJpcGVQdWJsaWMpO1xyXG4gICAgICAgICAgc3RyaXBlLnJlZGlyZWN0VG9DaGVja291dCh7IHNlc3Npb25JZDogcmVzW1wic2Vzc2lvbklkXCJdIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzLmhhc093blByb3BlcnR5KFwiU3RhdHVzXCIpICYmIHJlc1tcIlN0YXR1c1wiXSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRocmUgaXMgYW4gZXJyb3IgOiBcIiArIHJlc1tcIlVzZXJFcnJvck1lc3NhZ2VcIl0pO1xyXG4gICAgICAgICAgJChcIiN0bngtZXJyb3JzXCIpLmFkZENsYXNzKFwiZXJyb3JcIik7XHJcbiAgICAgICAgICBidG4ucHJvcChcImRpc2FibGVkXCIsIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByZXMuaGFzT3duUHJvcGVydHkoXCJEYXRhXCIpICYmXHJcbiAgICAgICAgICAgI
1169HJlc1tcIkRhdGFcIl1bXCJQYXltZW50XCJdW1wiVmFsaWRQYXltZW50XCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgJChcIi5vZy1lcnJvcnNcIikuaHRtbChcIlwiKTtcclxuICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcImh0dHBzOi8vbmV0emFjaC5zaGltb24tay5jb20vJWQ3JWFhJWQ3JTk1JWQ3JTkzJWQ3JTk0LSVkNyVhMiVkNyU5Yy0lZDclYWElZDclYTglZDclOTUlZDclOWUlZDclYWElZDclOWEvXCI7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKFwiLm9nLWVycm9yc1wiKS5odG1sKHJlc1tcIkRhdGFcIl1bXCJQYXltZW50XCJdW1wiU3RhdHVzRGVzY3JpcHRpb25cIl0pO1xyXG4gICAgICAgICAgICBidG4ucHJvcChcImRpc2FibGVkXCIsIGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9KTtcclxufSk7XHJcbiIsImpRdWVyeShmdW5jdGlvbiAoJCkgeyAvLyB1c2UgalF1ZXJ5IGNvZGUgaW5zaWRlIHRoaXMgdG8gYXZvaWQgXCIkIGlzIG5vdCBkZWZpbmVkXCIgZXJyb3JcclxuXHQkKCdbbG9hZG1vcmVdJykuY2xpY2soZnVuY3Rpb24gKCkge1xyXG5cclxuXHRcdGxldCBidXR0b24gPSAkKHRoaXMpLFxyXG5cdFx0XHRkYXRhID0ge1xyXG5cdFx0XHRcdCdhY3Rpb24nOiAnbG9hZG1vcmUnLFxyXG5cdFx0XHRcdCdxdWVyeSc6IGFqYXhfcGFyYW1zLnBvc3RzLCAvLyB0aGF0J3MgaG93IHdlIGdldCBwYXJhbXMgZnJvbSB3cF9sb2NhbGl6ZV9zY3JpcHQoKSBmdW5jdGlvblxyXG5cdFx0XHRcdCdwYWdlJzogYWpheF9wYXJhbXMuY3VycmVudF9wYWdlXHJcblx0XHRcdH07XHJcblxyXG5cdFx0JC5hamF4KHsgLy8geW91IGNhbiBhbHNvIHVzZSAkLnBvc3QgaGVyZVxyXG5cdFx0XHR1cmw6IGFqYXhfcGFyYW1zLmFqYXhfdXJsLCAvLyBBSkFYIGhhbmRsZXJcclxuXHRcdFx0ZGF0YTogZGF0YSxcclxuXHRcdFx0dHlwZTogJ1BPU1QnLFxyXG5cdFx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbiAoeGhyKSB7XHJcblx0XHRcdFx0YnV0dG9uLnRleHQoJ9eY15XXotefLi4uJyk7IC8vIGNoYW5nZSB0aGUgYnV0dG9uIHRleHQsIHlvdSBjYW4gYWxzbyBhZGQgYSBwcmVsb2FkZXIgaW1hZ2VcclxuXHRcdFx0fSxcclxuXHRcdFx0c3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRpZiAoZGF0YVsnc3VjY2VzcyddKSB7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0XHRcdGJ1dHRvbi50ZXh0KCfXmNei158g16LXldeTJyk7IC8vIGluc2VydCBuZXcgcG9zdHNcclxuXHRcdFx0XHRcdCQoJ1tsb2FkbW9yZS1jb250ZW50XScpLmFwcGVuZChkYXRhWydkYXRhJ10pXHJcblx0XHRcdFx0XHRhamF4X3BhcmFtcy5jdXJyZW50X3BhZ2UrKztcclxuXHJcblx0XHRcdFx0XHRpZiAoYWpheF9wYXJhbXMuY3VycmVudF9wYWdlID09IGFqYXhfcGFyYW1zLm1heF9wYWdlKVxyXG5cdFx0XHRcdFx0XHRidXR0b24ucmVtb3ZlKCk7IC8vIGlmIGxhc3QgcGFnZSwgcmVtb3ZlIHRoZSBidXR0b25cclxuXHJcblx0XHRcdFx0XHQvLyB5b3UgY2FuIGFsc28gZmlyZSB0aGUgXCJwb3N0LWxvYWRcIiBldmVudCBoZXJlIGlmIHlvdSB1c2UgYSBwbHVnaW4gdGhhdCByZXF1aXJlcyBpdFxyXG5cdFx0XHRcdFx0Ly8gJCggZG9jdW1lbnQuYm9keSApLnRyaWdnZXIoICdwb3N0LWxvYWQnICk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGJ1dHRvbi5yZW1vdmUoKTsgLy8gaWYgbm8gZGF0YSwgcmVtb3ZlIHRoZSBidXR0b24gYXMgd2VsbFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn0pOyIsImNvbnN0IGxvZyA9ICh4ID0+IGNvbnNvbGUubG9nKCkpO1xyXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgLy8gbG9nKCdzdGFydCcpO1xyXG4gIEFPUy5pbml0KHtcclxuICAgIG9uY2U6IHRydWUsXHJcbiAgfSk7XHJcblxyXG4gIGFudGlTcGFtQ29tbW5ldHMoKTtcclxuICAvLyBzaGFyZUluaXQoKTtcclxuXHJcbiAgJCgnW2RhdGEtdGFiLWNsaWNrZXJdJykuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgY29uc3QgdGFiTmFtZSA9ICR0aGlzLmRhdGEoJ3RhYi1uYW1lJyk7XHJcbiAgICBjb25zdCB0YXJnZ2V0ID0gJCgkdGhpcy5kYXRhKCd0YWInKSk7XHJcbiAgICAkKGBbZGF0YS10YWItbmFtZT1cIiR7dGFiTmFtZX1cIl1bZGF0YS10YWItY29udGVudF1gKS5zbGlkZVVwKCk7XHJcbiAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoJ2FjdGl2ZScpKSB7XHJcbiAgICAgICQoYFtkYXRhLXRhYi1uYW1lPVwiJHt0YWJOYW1lfVwiXWApLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAkKGBbZGF0YS10YWItbmFtZT1cIiR7dGFiTmFtZX1cIl1gKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICR0aGlzLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgdGFyZ2dldC5zbGlkZURvd24oKTtcclxuICAgIH1cclxuICB9KVxyXG5cclxuICAvKiBtb2JpbGUgbmF2IGJhciAqL1xyXG4gICQoJyNtYXN0aGVhZCcpLm9uKCdjbGljaycsICcubmF2LXdhcnAnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKGUudGFyZ2V0LmlkICE9IFwibmF2LXdhcnBcIikgcmV0dXJuO1xyXG4gICAgJCgnI25hdi13YXJwJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gIH0pXHJcblxyXG4gICQoJyNtYXN0aGVhZCcpLm9uKCdjbGljaycsICcuaGFtYnVyZ2VyLW1lbnUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAkKCcjbmF2LXdhcnAnKS50b2dnbGVDbGFzcygnYWN0aXZlJyk7XHJcbiAgfSlcclxuXHJcbiAgJCgndWwuY2F0LW1lbnUgbGknKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdjdXJyZW50LWNhdCcpKVxyXG4gICAgICAkKHRoaXMpLmFkZENsYXNzKCdjdXJyZW50LW1lbnUtaXRlbScpO1xyXG4gIH0pXHJcblxyXG4gICQoJy5oZWFkZXItc3ViLW1lbnUnKS5vbignY2xpY2snLCAnLmN1cnJlbnQtbWVudS1pdGVtJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5oZWFkZXItc3ViLW1lbnUgdWwubWVudScpLnRvZ2dsZUNsYXNzKCdoaWRlJyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnY2xpY2snKTtcclxuICB9KVxyXG5cclxuICAvKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgJCgnLnRvZ2dsZS1tZW51Jykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAkKHRoaXMpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcclxuICAgICQoJy5oZWFkZXItbWVudS1jb250YWluZXInKS50b2dnbGVDbGFzcygnYWN0aXZlJyk7XHJcbiAgfSk7XHJcblxyXG4gIC8vICQoJy5ocF90b3BfX3ZpZGVvX19idXR0b24nKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyhcImNsaWNrXCIpO1xyXG4gIC8vICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2ZhLXBsYXktY2lyY2xlJykpIHtcclxuICAvLyAgICAgLy9zdGFydCB2aWRlb1xyXG4gIC8vICAgICAkKCcjaHBfdG9wX192aWRlbycpWzBdLnNyYyArPSBcIiZhdXRvcGxheT0xXCI7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICAvL3N0b3AgdmlkZW9cclxuICAvLyAgICAgbGV0IHZpZGVvVVJMID0gJCgnI2hwX3RvcF9fdmlkZW8nKS5wcm9wKCdzcmMnKTtcclxuICAvLyAgICAgdmlkZW9VUkwgPSB2aWRlb1VSTC5yZXBsYWNlKFwiJmF1dG9wbGF5PTFcIiwgXCJcIik7XHJcbiAgLy8gICAgICQoJyNocF90b3BfX3ZpZGVvJykucHJvcCgnc3JjJywgdmlkZW9VUkwpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgJCh0aGlzKS50b2dnbGVDbGFzcygnZmEtcGxheS1jaXJjbGUgZmEtcGF1c2UtY2lyY2xlJyk7XHJcblxyXG4gIC8vIH0pO1xyXG5cclxuICAkKCcuaHBfdG9wX192aWRlb19fYnV0dG9uJykub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCB2aWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmhwX3RvcF9fdmlkZW9fd2FycCB2aWRlb1wiKTtcclxuICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdmYS1wbGF5LWNpcmNsZScpKSB7XHJcbiAgICAgIHZpZC5wbGF5KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2aWQucGF1c2UoKTtcclxuICAgIH1cclxuICAgICQo
1169dGhpcykudG9nZ2xlQ2xhc3MoJ2ZhLXBsYXktY2lyY2xlIGZhLXBhdXNlLWNpcmNsZScpO1xyXG5cclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gaXNFbWFpbChlbWFpbCkge1xyXG4gICAgdmFyIHJlZ2V4ID0gL14oW2EtekEtWjAtOV8uKy1dKStcXEAoKFthLXpBLVowLTktXSkrXFwuKSsoW2EtekEtWjAtOV17Miw0fSkrJC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdChlbWFpbCk7XHJcbiAgfVxyXG5cclxuICAvKlZhbGlkIGNvbW1lbnQqL1xyXG4gICQoJyNjb21tZW50Zm9ybScpLm9uKCdzdWJtaXQnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgbGV0IHVudmFsaWQgPSBmYWxzZTsgLy8gaGFuZGxlIGlmIHVuIHZhbGlkXHJcblxyXG4gICAgJCgnaW5wdXQjYXV0aG9yLGlucHV0I2VtYWlsLHRleHRhcmVhI2NvbW1lbnQnKS5yZW1vdmVDbGFzcygnZXJyb3ItaW5wdXQnKTsgLy8gcmVzZXQgdGhlIGNsYXNzXHJcblxyXG4gICAgLy8gaWYgZXhzaXN0IGF1dGhvciBhbmQgZW1haWwgY2hlY2sgdmFsaWRcclxuICAgIGlmICgkKCdpbnB1dCNhdXRob3InKS5sZW5ndGggJiYgJCgnaW5wdXQjZW1haWwnKS5sZW5ndGgpIHtcclxuICAgICAgaWYgKCQoJ2lucHV0I2F1dGhvcicpLnZhbCgpLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAkKCdpbnB1dCNhdXRob3InKS5hZGRDbGFzcygnZXJyb3ItaW5wdXQnKTsgdW52YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0VtYWlsKCQoJ2lucHV0I2VtYWlsJykudmFsKCkpKSB7XHJcbiAgICAgICAgJCgnaW5wdXQjZW1haWwnKS5hZGRDbGFzcygnZXJyb3ItaW5wdXQnKTsgdW52YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICgkKCd0ZXh0YXJlYSNjb21tZW50JykudmFsKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAkKCd0ZXh0YXJlYSNjb21tZW50JykuYWRkQ2xhc3MoJ2Vycm9yLWlucHV0Jyk7IHVudmFsaWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHVudmFsaWQpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gICQoJyNoZWFkZXItbWVudScpLm9uKCdjbGljaycsICcubWVudS1pdGVtLWhhcy1jaGlsZHJlbiA+IGEnICwgZnVuY3Rpb24gKGUpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmKCQoZG9jdW1lbnQpLndpZHRoKCkgPiA3MDApIHJldHVybjtcclxuICAgIGlmICgkKHRoaXMpLnBhcmVudHMoJ2xpJykuZmluZCgnLnN1Yi1tZW51JykuaGFzQ2xhc3MoJ2FjdGl2ZScpKSB7XHJcbiAgICAgICQodGhpcykucGFyZW50cygndWwnKS5maW5kKCcuYWN0aXZlJykuc2xpZGVUb2dnbGUoMjUwKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAkKHRoaXMpLnBhcmVudHMoJ3VsJykuZmluZCgnLmFjdGl2ZScpLnNsaWRlVG9nZ2xlKDI1MCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAkKHRoaXMpLnBhcmVudHMoJ2xpJykuZmluZCgnLnN1Yi1tZW51Jykuc2xpZGVUb2dnbGUoMjUwKS50b2dnbGVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcbiAgYmdJbWdSZXNpemUoKTtcclxuICBkYXRhRGVjb3JhdGlvbigpXHJcblxyXG5cclxuXHJcbn0pO1xyXG5cclxuJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbiAoKSB7XHJcbiAgYmdJbWdSZXNpemUoKTtcclxuICBkYXRhRGVjb3JhdGlvbigpXHJcbn0pO1xyXG4kKGRvY3VtZW50KS5hamF4Q29tcGxldGUoZnVuY3Rpb24gKCkge1xyXG4gIGJnSW1nUmVzaXplKCk7XHJcbn0pO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGRhdGFEZWNvcmF0aW9uKCkge1xyXG4gICQoJ1tkYXRhLWRlY29yYXRpb25dJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICBib3JkZXJfcmlnaHRfc2l6ZSA9ICQodGhpcykuZGF0YSgnYm9yZGVyLXJpZ2h0Jyk7XHJcbiAgICBib3JkZXJfcmlnaHRfc2l6ZSA9ICQod2luZG93KS53aWR0aCgpICogKGJvcmRlcl9yaWdodF9zaXplIC8gMTAwKTtcclxuICAgIGJvcmRlcl9sZWZ0X3NpemUgPSAkKHdpbmRvdykud2lkdGgoKSAtIGJvcmRlcl9yaWdodF9zaXplICsgMTtcclxuXHJcbiAgICAkKHRoaXMpLmNzcyh7IFwiLS1zaXplLWJvcmRlci1yaWdodFwiOiBib3JkZXJfcmlnaHRfc2l6ZSArIFwicHhcIiwgXCItLXNpemUtYm9yZGVyLWxlZnRcIjogYm9yZGVyX2xlZnRfc2l6ZSArIFwicHhcIiB9KTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYmdJbWdSZXNpemUoKSB7XHJcbiAgJCgnW2JnLWltZy1yZXNpemUtZWxpcHNlXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgd2lkdGggPSAkdGhpcy53aWR0aCgpO1xyXG4gICAgJHRoaXMuaGVpZ2h0KHdpZHRoICsgMTAwKTtcclxuICB9KTtcclxuICAkKCdbYmctaW1nLXJlc2l6ZS1jaXJjbGVdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAkdGhpcyA9ICQodGhpcyk7XHJcbiAgICB3aWR0aCA9ICR0aGlzLndpZHRoKCk7XHJcbiAgICAkdGhpcy5oZWlnaHQod2lkdGgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXQobnVtKSB7XHJcbiAgcmV0dXJuIFN0cmluZyhudW0pLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKTtcclxufVxyXG5cclxudmFyIG51bWJlcnNUb1VwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm51bWJlcnMtdG8tdXAtY29udGFpbmVyJyk7XHJcbnZhciBoYXNFbnRlcmVkID0gZmFsc2U7XHJcbmlmIChudW1iZXJzVG9VcCkge1xyXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZSkgPT4ge1xyXG4gICAgdmFyIHNob3VsZEFuaW1hdGUgPSAod2luZG93LnNjcm9sbFkgKyB3aW5kb3cuaW5uZXJIZWlnaHQpID49IG51bWJlcnNUb1VwLm9mZnNldFRvcDtcclxuXHJcblxyXG4gICAgaWYgKHNob3VsZEFuaW1hdGUgJiYgIWhhc0VudGVyZWQpIHtcclxuICAgICAgaGFzRW50ZXJlZCA9IHRydWU7XHJcbiAgICAgICQoJy5udW1iZXJzLXRvLXVwJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5wcm9wKCdDb3VudGVyJywgMCkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICBDb3VudGVyOiAkKHRoaXMpLnRleHQoKVxyXG4gICAgICAgI
1169H0sIHtcclxuICAgICAgICAgIGR1cmF0aW9uOiA0MDAwLFxyXG4gICAgICAgICAgZWFzaW5nOiAnc3dpbmcnLFxyXG4gICAgICAgICAgc3RlcDogZnVuY3Rpb24gKG5vdykge1xyXG4gICAgICAgICAgICAkKHRoaXMpLnRleHQoTWF0aC5jZWlsKG5vdykpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQodGhpcykudGV4dChmb3JtYXQoJCh0aGlzKS50ZXh0KCkpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbiQod2luZG93KS5vbihcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA+IDUwKSB7XHJcbiAgICAkKFwiI21hc3RoZWFkXCIpLmFkZENsYXNzKFwic3RpY2t5XCIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvL3JlbW92ZSB0aGUgYmFja2dyb3VuZCBwcm9wZXJ0eSBzbyBpdCBjb21lcyB0cmFuc3BhcmVudCBhZ2FpbiAoZGVmaW5lZCBpbiB5b3VyIGNzcylcclxuICAgICQoXCIjbWFzdGhlYWRcIikucmVtb3ZlQ2xhc3MoXCJzdGlja3lcIik7XHJcbiAgfVxyXG59KTtcclxuXHJcblxyXG5cclxuLyoqKioqKioqKkhlYWRlciBTbGlkZXIqKioqKioqKioqKioqL1xyXG5cclxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG5cclxuICBpZiAoJCgnI2ltZ1NsaWRlcicpLnZhbCgpKSB7XHJcbiAgICB2YXIgaW1nU2xpZGVyID0gSlNPTi5wYXJzZSgkKCcjaW1nU2xpZGVyJykudmFsKCkpO1xyXG4gICAgdmFyIFNsaWRlciA9ICQoJy5lbnRyeS1oZWFkZXItc2xpZGVyJyk7XHJcbiAgICAkKCcjaW1nU2xpZGVyJykucmVtb3ZlKCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhpbWdTbGlkZXIpO1xyXG5cclxuICAgIHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcclxuICAgICAgc2xpZGVzaG93KCk7XHJcbiAgICB9LCAzMDAwKTtcclxuICB9XHJcbiAgbGV0IHNsaWRlSW5kZXggPSAwO1xyXG5cclxuICBmdW5jdGlvbiBzbGlkZXNob3coZGlyZWN0aW9uID0gMSkge1xyXG5cclxuICAgIHNsaWRlSW5kZXggPSBzbGlkZUluZGV4ICsgZGlyZWN0aW9uO1xyXG4gICAgaWYgKHNsaWRlSW5kZXggPj0gaW1nU2xpZGVyLmxlbmd0aCkgc2xpZGVJbmRleCA9IDA7XHJcbiAgICBlbHNlIGlmIChzbGlkZUluZGV4IDwgMCkgc2xpZGVJbmRleCA9IGltZ1NsaWRlci5sZW5ndGggLSAxO1xyXG5cclxuICAgIGxldCBuZXh0U2xpZGUgPSBpbWdTbGlkZXJbc2xpZGVJbmRleF07XHJcblxyXG4gICAgU2xpZGVyLmFuaW1hdGUoeyBvcGFjaXR5OiAwIH0sICdzbG93JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAkKHRoaXMpLmNzcyh7ICctLWJnLXVybCc6ICd1cmwoJyArIG5leHRTbGlkZVsnaW1nJ10gKyAnKScgfSlcclxuICAgICAgICAuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCcuZW50cnktaGVhZGVyLXNsaWRlci10aXRsZScpLmFuaW1hdGUoeyBvcGFjaXR5OiAwIH0sICdzbG93JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAkKHRoaXMpLmh0bWwobmV4dFNsaWRlWyd0aXRsZSddKVxyXG4gICAgICAgIC5hbmltYXRlKHsgb3BhY2l0eTogMSB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9O1xyXG5cclxuXHJcbiAgJCgnW215LXNsaWRlci1uZXh0XScpLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgIHNsaWRlc2hvdygxKTtcclxuICB9KVxyXG4gICQoJ1tteS1zbGlkZXItcHJldl0nKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICBzbGlkZXNob3coLTEpO1xyXG4gIH0pXHJcblxyXG5cclxuXHJcbn0pO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGFudGlTcGFtQ29tbW5ldHMoKSB7XHJcbiAgY29uc3QgY29tbWVudF8xID0gJChcIiNqdXN0X2Fub3RoZXJfaWRcIik7XHJcbiAgaWYgKCFjb21tZW50XzEubGVuZ3RoKSByZXR1cm47XHJcbiAgY29uc3QgY29tbWVudF8yID0gJChcIiNjb21tZW50XCIpO1xyXG4gIGNvbW1lbnRfMS5vbihcImlucHV0XCIsIGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbW1lbnRfMi52YWwoY29tbWVudF8xLnZhbCgpKTtcclxuICB9KTtcclxufVxyXG5cclxuLy8gZnVuY3Rpb24gc2hhcmVJbml0KCl7XHJcbi8vICAgaWYoISQoJyNzaGFyZS13YXJwJykubGVuZ3RoKSByZXR1cm47XHJcbi8vICAgaWYoIW5hdmlnYXRvci5zaGFyZSl7XHJcbi8vICAgICAkKCcuc2hhcmUtaXQgLm5hdmlnYXRvcicpLmhpZGUoKTtcclxuLy8gICAgICQoJy5zaGFyZS1pdCAubm90LW5hdmlnYXRvcicpLnNob3coKTtcclxuLy8gICB9XHJcbi8vICAgJCgnLm5hdmlnYXRvcicpLm9uKFwiY2xpY2tcIixcIi5zaGFyZS1idG5cIixmdW5jdGlvbiAoKSB7XHJcbi8vICAgICB0aXRsZSA9ICQodGhpcykuZGF0YSgndGl0bGUnKTtcclxuLy8gICAgIHVybCA9ICQodGhpcykuZGF0YSgndXJsJyk7XHJcbi8vICAgICBpZiAobmF2aWdhdG9yLnNoYXJlKSB7XHJcbi8vICAgICAgIG5hdmlnYXRvci5zaGFyZSh7XHJcbi8vICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbi8vICAgICAgICAgICB1cmw6IHVybCxcclxuLy8gICAgICAgfSkudGhlbigoKSA9PiB7Y29uc29sZS5sb2coJ1RoYW5rcyBmb3Igc2hhcmluZyEnKTt9KVxyXG4vLyAgICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XHJcbi8vICAgICB9XHJcbi8vICAgfSk7XHJcbi8vIH1cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyIsIlxyXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAvL2Rpc2FibGUgdGhlIGRpc3BsYXkgbm9uZVxyXG4gICAgJCgnLm1vZGFsJykuc2hvdygpO1xyXG5cclxuICAgICQoJ1tvcGVuLW1vZGFsXScpLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoJCh0aGlzKS5pcygnW2RhdGEtZ2V0LWNvbnRlbnQtdG8tbW9kYWxdJykpIHJldHVybjsgLy9pZiBuZWVkIHRvIGdldCBjb250ZW50IHJldHVybiBhbmQgd2FpdCB0aGUgY29udGVudFxyXG4gICAgICAgIG9wZW5Nb2RhbCgkKHRoaXMpLmRhdGEoJ21vZGFsLWlkJykpOyAvL3NlbmQgbW9kYWwgdG8gb3BlbiBtb2RhbCBmdW5jdGlvblxyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnW2Nsb3NlLW1vZGFsXScpLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkbW9kYWwgPSAkKHRoaXMpLmRhdGEoJ21vZGFsLWlkJyk7XHJcbiAgICAgICAgJCgkbW9kYWwpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTsgLy8gY2xvc2UgbW9kYWxcclxuICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ21vZGFsLWlzLWFjdGl2ZScpO1xyXG5cclxuICAgICAgICAvLyQoJG1vZGFsICsnIC5tb2RhbC1jb250ZW50JykuY3NzKCdtYXJnaW4tdG9wJywgJzBweCcpOyAvLyByZXNldCB0aGUgcG9zdGlvbiBmb3IgdGhlIGFuaW1hdGlvblxyXG4gICAgICAgIGlmICgkKCRtb2RhbCkuaGFzQ2xhc3MoJ293bC12aWRlby1tb2RhbCcpKSB7X
1169HJcbiAgICAgICAgICAgIHN0b3BWaWRlb093bCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoJG1vZGFsICsgJyBpZnJhbWUnKS5hdHRyKCdzcmMnLCAnJyk7IC8vIHJlc2V0IHRoZSBpZnJhbWVcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCdbZGF0YS1nZXQtY29udGVudC10by1tb2RhbF0nKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcG9zdF9pZCA9ICQodGhpcykuZGF0YSgncG9zdC1pZCcpO1xyXG4gICAgICAgIG1vZGFsID0gJCh0aGlzKS5kYXRhKCdtb2RhbC1pZCcpO1xyXG4gICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAnYWN0aW9uJzogJ2dldF9wb3N0X2NvbnRlbnRfYXBpJyxcclxuICAgICAgICAgICAgJ3Bvc3RfaWQnOiBwb3N0X2lkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkKCdib2R5JykuaGFzQ2xhc3MoJ3BhZ2UtdGVtcGxhdGUtcGFnZS1kb25hdGlvbicpKSB7XHJcbiAgICAgICAgICAgIGRhdGEuY3VycmVuY3kgPSAkKCdzZWxlY3RbbmFtZT1kb25hdGlvbnMtY3VycmVuY3ldJykudmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogYWpheF9wYXJhbXMuYWpheF91cmwsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAkKG1vZGFsICsgJyAubW9kYWwtdGV4dCcpLmh0bWwocmVzKTtcclxuICAgICAgICAgICAgICAgIG9wZW5Nb2RhbChtb2RhbCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIG9wZW5Nb2RhbChtb2RhbCkge1xyXG4gICAgICAgICQobW9kYWwpLmFkZENsYXNzKCdhY3RpdmUnKTsgLy8gb3BlbiBtb2RhbFxyXG4gICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnbW9kYWwtaXMtYWN0aXZlJyk7XHJcbiAgICAgICAgLy8kKG1vZGFsICsgJyAubW9kYWwtY29udGVudCcgKS5jc3MoJ21hcmdpbi10b3AnLCgkKHdpbmRvdykuc2Nyb2xsVG9wKCkrMjAwKSsncHgnKTsgLy8gcG9zaXRpb24gdGhlIG1vZGFsIDIwMHB4IGZyb20gdG9wIHdpbmRvd1xyXG4gICAgfVxyXG4gICAgJCgnW21vZGFsLXZpZGVvXScpLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB1cmwgPSAkKHRoaXMpLmRhdGEoJ3ZpZGVvLXVybCcpOyAvLyBnZXQgdGhlIHZpZGVvIHVybFxyXG4gICAgICAgIG1vZGFsID0gJCh0aGlzKS5kYXRhKCdtb2RhbC1pZCcpOyAvLyBnZXQgdGhlIG1vZGFsIGlkXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codXJsKVxyXG4gICAgICAgICQobW9kYWwgKyAnIGlmcmFtZScpLmF0dHIoJ3NyYycsIHVybCk7ICAvLyB1cGRhdGUgdGhlIGlmcmFtZSB1cmxcclxuICAgIH0pO1xyXG5cclxuXHJcbn0pIl19
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.