/*!
* Bootstrap v4.1.0 (https://getbootstrap.com/) * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,c){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function h(r){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},e=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(s).filter(function(t){return Object.getOwnPropertyDescriptor(s,t).enumerable}))),e.forEach(function(t){var e,n,i;e=r,i=s[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return r}e=e&&e.hasOwnProperty("default")?e.default:e,c=c&&c.hasOwnProperty("default")?c.default:c;var r,n,s,a,l,u,f,d,_,g,m,p,v,E,y,T,C,I,A,D,b,S,w,N,O,k,P,L,j,R,H,W,M,x,U,K,F,V,Q,B,Y,G,q,z,X,J,Z,$,tt,et,nt,it,rt,st,ot,at,lt,ht,ct,ut,ft,dt,_t,gt,mt,pt,vt,Et,yt,Tt,Ct,It,At,Dt,bt,St,wt,Nt,Ot,kt,Pt,Lt,jt,Rt,Ht,Wt,Mt,xt,Ut,Kt,Ft,Vt,Qt,Bt,Yt,Gt,qt,zt,Xt,Jt,Zt,$t,te,ee,ne,ie,re,se,oe,ae,le,he,ce,ue,fe,de,_e,ge,me,pe,ve,Ee,ye,Te,Ce,Ie,Ae,De,be,Se,we,Ne,Oe,ke,Pe,Le,je,Re,He,We,Me,xe,Ue,Ke,Fe,Ve,Qe,Be,Ye,Ge,qe,ze,Xe,Je,Ze,$e,tn,en,nn,rn,sn,on,an,ln,hn,cn,un,fn,dn,_n,gn,mn,pn,vn,En,yn,Tn,Cn=function(i){var e="transitionend";function t(t){var e=this,n=!1;return i(this).one(l.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||l.triggerTransitionEnd(e)},t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");e&&"#"!==e||(e=t.getAttribute("href")||"");try{return 0<i(document).find(e).length?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=i(t).css("transition-duration");return parseFloat(e)?(e=e.split(",")[0],1e3*parseFloat(e)):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=n[i],s=e[i],o=s&&l.isElement(s)?"element":(a=s,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(r).test(o))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+o+'" but expected type "'+r+'".')}var a}};return i.fn.emulateTransitionEnd=t,i.event.special[l.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(i(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}},l}(e),In=(n="alert",a="."+(s="bs.alert"),l=(r=e).fn[n],u={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",_="show",g=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){t=t||this._element;var e=this._getRootElement(t);this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){r.removeData(this._element,s),this._element=null},t._getRootElement=function(t){var e=Cn.getSelectorFromElement(t),n=!1;return e&&(n=r(e)[0]),n||(n=r(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=r.Event(u.CLOSE);return r(t).trigger(e),e},t._removeElement=function(e){var n=this;if(r(e).removeClass(_),r(e).hasClass(d)){var t=Cn.getTransitionDurationFromElement(e);r(e).one(Cn.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){r(t).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=r(this),e=t.data(s);e||(e=new i(this),t.data(s,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},o(i,null,[{key:"VERSION",get:function(){return"4.1.0"}}]),i}(),r(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',g._handleDismiss(new g)),r.fn[n]=g._jQueryInterface,r.fn[n].Constructor=g,r.fn[n].noConflict=function(){return r.fn[n]=l,g._jQueryInterface},g),An=(p="button",E="."+(v="bs.button"),y=".data-api",T=(m=e).fn[p],C="active",I="btn",D='[data-toggle^="button"]',b='[data-toggle="buttons"]',S="input",w=".active",N=".btn",O={CLICK_DATA_API:"click"+E+y,FOCUS_BLUR_DATA_API:(A="focus")+E+y+" blur"+E+y},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=m(this._element).closest(b)[0];if(n){var i=m(this._element).find(S)[0];if(i){if("radio"===i.type)if(i.checked&&m(this._element).hasClass(C))t=!1;else{var r=m(n).find(w)[0];r&&m(r).removeClass(C)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!m(this._element).hasClass(C),m(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!m(this._element).hasClass(C)),t&&m(this._element).toggleClass(C)},t.dispose=function(){m.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=m(this).data(v);t||(t=new n(this),m(this).data(v,t)),"toggle"===e&&t[e]()})},o(n,null,[{key:"VERSION",get:function(){return"4.1.0"}}]),n}(),m(document).on(O.CLICK_DATA_API,D,function(t){t.preventDefault();var e=t.target;m(e).hasClass(I)||(e=m(e).closest(N)),k._jQueryInterface.call(m(e),"toggle")}).on(O.FOCUS_BLUR_DATA_API,D,function(t){var e=m(t.target).closest(N)[0];m(e).toggleClass(A,/^focus(in)?$/.test(t.type))}),m.fn[p]=k._jQueryInterface,m.fn[p].Constructor=k,m.fn[p].noConflict=function(){return m.fn[p]=T,k._jQueryInterface},k),Dn=(L="carousel",R="."+(j="bs.carousel"),H=".data-api",W=(P=e).fn[L],M={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},x={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},U="next",K="prev",F="left",V="right",Q={SLIDE:"slide"+R,SLID:"slid"+R,KEYDOWN:"keydown"+R,MOUSEENTER:"mouseenter"+R,MOUSELEAVE:"mouseleave"+R,TOUCHEND:"touchend"+R,LOAD_DATA_API:"load"+R+H,CLICK_DATA_API:"click"+R+H},B="carousel",Y="active",G="slide",q="carousel-item-right",z="carousel-item-left",X="carousel-item-next",J="carousel-item-prev",Z={ACTIVE:".active",ACTIVE_ITEM:".active.carousel-item",ITEM:".carousel-item",NEXT_PREV:".carousel-item-next, .carousel-item-prev",INDICATORS:".carousel-indicators",DATA_SLIDE:"[data-slide], [data-slide-to]",DATA_RIDE:'[data-ride="carousel"]'},$=function(){function s(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(e),this._element=P(t)[0],this._indicatorsElement=P(this._element).find(Z.INDICATORS)[0],this._addEventListeners()}var t=s.prototype;return t.next=function(){this._isSliding||this._slide(U)},t.nextWhenVisible=function(){!document.hidden&&P(this._element).is(":visible")&&"hidden"!==P(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(K)},t.pause=function(t){t||(this._isPaused=!0),P(this._element).find(Z.NEXT_PREV)[0]&&(Cn.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=P(this._element).find(Z.ACTIVE_ITEM)[0];var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?U:K;this._slide(i,this._items[t])}},t.dispose=function(){P(this._element).off(R),P.removeData(this._element,j),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=h({},M,t),Cn.typeCheckConfig(L,t,x),t},t._addEventListeners=function(){var e=this;this._config.keyboard&&P(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&(P(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),"ontouchstart"in document.documentElement&&P(this._element).on(Q.TOUCHEND,function(){e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval)}))},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=P.makeArray(P(t).parent().find(Z.ITEM)),this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===U,i=t===K,r=this._getItemIndex(e),s=this._items.length-1;if((i&&0===r||n&&r===s)&&!this._config.wrap)return e;var o=(r+(t===K?-1:1))%this._items.length;return-1===o?this._items[this._items.length-1]:this._items[o]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(P(this._element).find(Z.ACTIVE_ITEM)[0]),r=P.Event(Q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return P(this._element).trigger(r),r},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){P(this._indicatorsElement).find(Z.ACTIVE).removeClass(Y);var e=this._indicatorsElement.children[this._getItemIndex(t)];e&&P(e).addClass(Y)}},t._slide=function(t,e){var n,i,r,s=this,o=P(this._element).find(Z.ACTIVE_ITEM)[0],a=this._getItemIndex(o),l=e||o&&this._getItemByDirection(t,o),h=this._getItemIndex(l),c=Boolean(this._interval);if(t===U?(n=z,i=X,r=F):(n=q,i=J,r=V),l&&P(l).hasClass(Y))this._isSliding=!1;else if(!this._triggerSlideEvent(l,r).isDefaultPrevented()&&o&&l){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(l);var u=P.Event(Q.SLID,{relatedTarget:l,direction:r,from:a,to:h});if(P(this._element).hasClass(G)){P(l).addClass(i),Cn.reflow(l),P(o).addClass(n),P(l).addClass(n);var f=Cn.getTransitionDurationFromElement(o);P(o).one(Cn.TRANSITION_END,function(){P(l).removeClass(n+" "+i).addClass(Y),P(o).removeClass(Y+" "+i+" "+n),s._isSliding=!1,setTimeout(function(){return P(s._element).trigger(u)},0)}).emulateTransitionEnd(f)}else P(o).removeClass(Y),P(l).addClass(Y),this._isSliding=!1,P(this._element).trigger(u);c&&this.cycle()}},s._jQueryInterface=function(i){return this.each(function(){var t=P(this).data(j),e=h({},M,P(this).data());"object"==typeof i&&(e=h({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new s(this,e),P(this).data(j,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&(t.pause(),t.cycle())})},s._dataApiClickHandler=function(t){var e=Cn.getSelectorFromElement(this);if(e){var n=P(e)[0];if(n&&P(n).hasClass(B)){var i=h({},P(n).data(),P(this).data()),r=this.getAttribute("data-slide-to");r&&(i.interval=!1),s._jQueryInterface.call(P(n),i),r&&P(n).data(j).to(r),t.preventDefault()}}},o(s,null,[{key:"VERSION",get:function(){return"4.1.0"}},{key:"Default",get:function(){return M}}]),s}(),P(document).on(Q.CLICK_DATA_API,Z.DATA_SLIDE,$._dataApiClickHandler),P(window).on(Q.LOAD_DATA_API,function(){P(Z.DATA_RIDE).each(function(){var t=P(this);$._jQueryInterface.call(t,t.data())})}),P.fn[L]=$._jQueryInterface,P.fn[L].Constructor=$,P.fn[L].noConflict=function(){return P.fn[L]=W,$._jQueryInterface},$),bn=(et="collapse",it="."+(nt="bs.collapse"),rt=(tt=e).fn[et],st={toggle:!0,parent:""},ot={toggle:"boolean",parent:"(string|element)"},at={SHOW:"show"+it,SHOWN:"shown"+it,HIDE:"hide"+it,HIDDEN:"hidden"+it,CLICK_DATA_API:"click"+it+".data-api"},lt="show",ht="collapse",ct="collapsing",ut="collapsed",ft="width",dt="height",_t={ACTIVES:".show, .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},gt=function(){function a(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=tt.makeArray(tt('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=tt(_t.DATA_TOGGLE),i=0;i<n.length;i++){var r=n[i],s=Cn.getSelectorFromElement(r);null!==s&&0<tt(s).filter(t).length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){tt(this._element).hasClass(lt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!tt(this._element).hasClass(lt)&&(this._parent&&0===(t=tt.makeArray(tt(this._parent).find(_t.ACTIVES).filter('[data-parent="'+this._config.parent+'"]'))).length&&(t=null),!(t&&(e=tt(t).not(this._selector).data(nt))&&e._isTransitioning))){var i=tt.Event(at.SHOW);if(tt(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(tt(t).not(this._selector),"hide"),e||tt(t).data(nt,null));var r=this._getDimension();tt(this._element).removeClass(ht).addClass(ct),(this._element.style[r]=0)<this._triggerArray.length&&tt(this._triggerArray).removeClass(ut).attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(r[0].toUpperCase()+r.slice(1)),o=Cn.getTransitionDurationFromElement(this._element);tt(this._element).one(Cn.TRANSITION_END,function(){tt(n._element).removeClass(ct).addClass(ht).addClass(lt),n._element.style[r]="",n.setTransitioning(!1),tt(n._element).trigger(at.SHOWN)}).emulateTransitionEnd(o),this._element.style[r]=this._element[s]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&tt(this._element).hasClass(lt)){var e=tt.Event(at.HIDE);if(tt(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();if(this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",Cn.reflow(this._element),tt(this._element).addClass(ct).removeClass(ht).removeClass(lt),0<this._triggerArray.length)for(var i=0;i<this._triggerArray.length;i++){var r=this._triggerArray[i],s=Cn.getSelectorFromElement(r);if(null!==s)tt(s).hasClass(lt)||tt(r).addClass(ut).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var o=Cn.getTransitionDurationFromElement(this._element);tt(this._element).one(Cn.TRANSITION_END,function(){t.setTransitioning(!1),tt(t._element).removeClass(ct).addClass(ht).trigger(at.HIDDEN)}).emulateTransitionEnd(o)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){tt.removeData(this._element,nt),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=h({},st,t)).toggle=Boolean(t.toggle),Cn.typeCheckConfig(et,t,ot),t},t._getDimension=function(){return tt(this._element).hasClass(ft)?ft:dt},t._getParent=function(){var n=this,t=null;Cn.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=tt(this._config.parent)[0];var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]';return tt(t).find(e).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){if(t){var n=tt(t).hasClass(lt);0<e.length&&tt(e).toggleClass(ut,!n).attr("aria-expanded",n)}},a._getTargetFromElement=function(t){var e=Cn.getSelectorFromElement(t);return e?tt(e)[0]:null},a._jQueryInterface=function(i){return this.each(function(){var t=tt(this),e=t.data(nt),n=h({},st,t.data(),"object"==typeof i&&i);if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(nt,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},o(a,null,[{key:"VERSION",get:function(){return"4.1.0"}},{key:"Default",get:function(){return st}}]),a}(),tt(document).on(at.CLICK_DATA_API,_t.DATA_TOGGLE,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=tt(this),e=Cn.getSelectorFromElement(this);tt(e).each(function(){var t=tt(this),e=t.data(nt)?"toggle":n.data();gt._jQueryInterface.call(t,e)})}),tt.fn[et]=gt._jQueryInterface,tt.fn[et].Constructor=gt,tt.fn[et].noConflict=function(){return tt.fn[et]=rt,gt._jQueryInterface},gt),Sn=(pt="dropdown",Et="."+(vt="bs.dropdown"),yt=".data-api",Tt=(mt=e).fn[pt],Ct=new RegExp("38|40|27"),It={HIDE:"hide"+Et,HIDDEN:"hidden"+Et,SHOW:"show"+Et,SHOWN:"shown"+Et,CLICK:"click"+Et,CLICK_DATA_API:"click"+Et+yt,KEYDOWN_DATA_API:"keydown"+Et+yt,KEYUP_DATA_API:"keyup"+Et+yt},At="disabled",Dt="show",bt="dropup",St="dropright",wt="dropleft",Nt="dropdown-menu-right",Ot="position-static",kt='[data-toggle="dropdown"]',Pt=".dropdown form",Lt=".dropdown-menu",jt=".navbar-nav",Rt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Ht="top-start",Wt="top-end",Mt="bottom-start",xt="bottom-end",Ut="right-start",Kt="left-start",Ft={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Vt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Qt=function(){function l(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=l.prototype;return t.toggle=function(){if(!this._element.disabled&&!mt(this._element).hasClass(At)){var t=l._getParentFromElement(this._element),e=mt(this._menu).hasClass(Dt);if(l._clearMenus(),!e){var n={relatedTarget:this._element},i=mt.Event(It.SHOW,n);if(mt(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof c)throw new TypeError("Bootstrap dropdown require Popper.js (https://popper.js.org)");var r=this._element;"parent"===this._config.reference?r=t:Cn.isElement(this._config.reference)&&(r=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(r=this._config.reference[0])),"scrollParent"!==this._config.boundary&&mt(t).addClass(Ot),this._popper=new c(r,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===mt(t).closest(jt).length&&mt(document.body).children().on("mouseover",null,mt.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),mt(this._menu).toggleClass(Dt),mt(t).toggleClass(Dt).trigger(mt.Event(It.SHOWN,n))}}}},t.dispose=function(){mt.removeData(this._element,vt),mt(this._element).off(Et),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;mt(this._element).on(It.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=h({},this.constructor.Default,mt(this._element).data(),t),Cn.typeCheckConfig(pt,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=l._getParentFromElement(this._element);this._menu=mt(t).find(Lt)[0]}return this._menu},t._getPlacement=function(){var t=mt(this._element).parent(),e=Mt;return t.hasClass(bt)?(e=Ht,mt(this._menu).hasClass(Nt)&&(e=Wt)):t.hasClass(St)?e=Ut:t.hasClass(wt)?e=Kt:mt(this._menu).hasClass(Nt)&&(e=xt),e},t._detectNavbar=function(){return 0<mt(this._element).closest(".navbar").length},t._getPopperConfig=function(){var e=this,t={};"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=h({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},l._jQueryInterface=function(e){return this.each(function(){var t=mt(this).data(vt);if(t||(t=new l(this,"object"==typeof e?e:null),mt(this).data(vt,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},l._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=mt.makeArray(mt(kt)),n=0;n<e.length;n++){var i=l._getParentFromElement(e[n]),r=mt(e[n]).data(vt),s={relatedTarget:e[n]};if(r){var o=r._menu;if(mt(i).hasClass(Dt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&mt.contains(i,t.target))){var a=mt.Event(It.HIDE,s);mt(i).trigger(a),a.isDefaultPrevented()||("ontouchstart"in document.documentElement&&mt(document.body).children().off("mouseover",null,mt.noop),e[n].setAttribute("aria-expanded","false"),mt(o).removeClass(Dt),mt(i).removeClass(Dt).trigger(mt.Event(It.HIDDEN,s)))}}}},l._getParentFromElement=function(t){var e,n=Cn.getSelectorFromElement(t);return n&&(e=mt(n)[0]),e||t.parentNode},l._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||mt(t.target).closest(Lt).length)):Ct.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!mt(this).hasClass(At))){var e=l._getParentFromElement(this),n=mt(e).hasClass(Dt);if((n||27===t.which&&32===t.which)&&(!n||27!==t.which&&32!==t.which)){var i=mt(e).find(Rt).get();if(0!==i.length){var r=i.indexOf(t.target);38===t.which&&0<r&&r--,40===t.which&&r<i.length-1&&r++,r<0&&(r=0),i[r].focus()}}else{if(27===t.which){var s=mt(e).find(kt)[0];mt(s).trigger("focus")}mt(this).trigger("click")}}},o(l,null,[{key:"VERSION",get:function(){return"4.1.0"}},{key:"Default",get:function(){return Ft}},{key:"DefaultType",get:function(){return Vt}}]),l}(),mt(document).on(It.KEYDOWN_DATA_API,kt,Qt._dataApiKeydownHandler).on(It.KEYDOWN_DATA_API,Lt,Qt._dataApiKeydownHandler).on(It.CLICK_DATA_API+" "+It.KEYUP_DATA_API,Qt._clearMenus).on(It.CLICK_DATA_API,kt,function(t){t.preventDefault(),t.stopPropagation(),Qt._jQueryInterface.call(mt(this),"toggle")}).on(It.CLICK_DATA_API,Pt,function(t){t.stopPropagation()}),mt.fn[pt]=Qt._jQueryInterface,mt.fn[pt].Constructor=Qt,mt.fn[pt].noConflict=function(){return mt.fn[pt]=Tt,Qt._jQueryInterface},Qt),wn=(Yt="modal",qt="."+(Gt="bs.modal"),zt=(Bt=e).fn[Yt],Xt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Jt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},Zt={HIDE:"hide"+qt,HIDDEN:"hidden"+qt,SHOW:"show"+qt,SHOWN:"shown"+qt,FOCUSIN:"focusin"+qt,RESIZE:"resize"+qt,CLICK_DISMISS:"click.dismiss"+qt,KEYDOWN_DISMISS:"keydown.dismiss"+qt,MOUSEUP_DISMISS:"mouseup.dismiss"+qt,MOUSEDOWN_DISMISS:"mousedown.dismiss"+qt,CLICK_DATA_API:"click"+qt+".data-api"},$t="modal-scrollbar-measure",te="modal-backdrop",ee="modal-open",ne="fade",ie="show",re={DIALOG:".modal-dialog",DATA_TOGGLE:'[data-toggle="modal"]',DATA_DISMISS:'[data-dismiss="modal"]',FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"},se=function(){function r(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=Bt(t).find(re.DIALOG)[0],this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._scrollbarWidth=0}var t=r.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isTransitioning&&!this._isShown){Bt(this._element).hasClass(ne)&&(this._isTransitioning=!0);var n=Bt.Event(Zt.SHOW,{relatedTarget:t});Bt(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),Bt(document.body).addClass(ee),this._setEscapeEvent(),this._setResizeEvent(),Bt(this._element).on(Zt.CLICK_DISMISS,re.DATA_DISMISS,function(t){return e.hide(t)}),Bt(this._dialog).on(Zt.MOUSEDOWN_DISMISS,function(){Bt(e._element).one(Zt.MOUSEUP_DISMISS,function(t){Bt(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),!this._isTransitioning&&this._isShown){var n=Bt.Event(Zt.HIDE);if(Bt(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=Bt(this._element).hasClass(ne);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),Bt(document).off(Zt.FOCUSIN),Bt(this._element).removeClass(ie),Bt(this._element).off(Zt.CLICK_DISMISS),Bt(this._dialog).off(Zt.MOUSEDOWN_DISMISS),i){var r=Cn.getTransitionDurationFromElement(this._element);Bt(this._element).one(Cn.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(r)}else this._hideModal()}}},t.dispose=function(){Bt.removeData(this._element,Gt),Bt(window,document,this._element,this._backdrop).off(qt),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=h({},Xt,t),Cn.typeCheckConfig(Yt,t,Jt),t},t._showElement=function(t){var e=this,n=Bt(this._element).hasClass(ne);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.scrollTop=0,n&&Cn.reflow(this._element),Bt(this._element).addClass(ie),this._config.focus&&this._enforceFocus();var i=Bt.Event(Zt.SHOWN,{relatedTarget:t}),r=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,Bt(e._element).trigger(i)};if(n){var s=Cn.getTransitionDurationFromElement(this._element);Bt(this._dialog).one(Cn.TRANSITION_END,r).emulateTransitionEnd(s)}else r()},t._enforceFocus=function(){var e=this;Bt(document).off(Zt.FOCUSIN).on(Zt.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===Bt(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?Bt(this._element).on(Zt.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||Bt(this._element).off(Zt.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?Bt(window).on(Zt.RESIZE,function(t){return e.handleUpdate(t)}):Bt(window).off(Zt.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._isTransitioning=!1,this._showBackdrop(function(){Bt(document.body).removeClass(ee),t._resetAdjustments(),t._resetScrollbar(),Bt(t._element).trigger(Zt.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(Bt(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=Bt(this._element).hasClass(ne)?ne:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=te,n&&Bt(this._backdrop).addClass(n),Bt(this._backdrop).appendTo(document.body),Bt(this._element).on(Zt.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&Cn.reflow(this._backdrop),Bt(this._backdrop).addClass(ie),!t)return;if(!n)return void t();var i=Cn.getTransitionDurationFromElement(this._backdrop);Bt(this._backdrop).one(Cn.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){Bt(this._backdrop).removeClass(ie);var r=function(){e._removeBackdrop(),t&&t()};if(Bt(this._element).hasClass(ne)){var s=Cn.getTransitionDurationFromElement(this._backdrop);Bt(this._backdrop).one(Cn.TRANSITION_END,r).emulateTransitionEnd(s)}else r()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var r=this;if(this._isBodyOverflowing){Bt(re.FIXED_CONTENT).each(function(t,e){var n=Bt(e)[0].style.paddingRight,i=Bt(e).css("padding-right");Bt(e).data("padding-right",n).css("padding-right",parseFloat(i)+r._scrollbarWidth+"px")}),Bt(re.STICKY_CONTENT).each(function(t,e){var n=Bt(e)[0].style.marginRight,i=Bt(e).css("margin-right");Bt(e).data("margin-right",n).css("margin-right",parseFloat(i)-r._scrollbarWidth+"px")}),Bt(re.NAVBAR_TOGGLER).each(function(t,e){var n=Bt(e)[0].style.marginRight,i=Bt(e).css("margin-right");Bt(e).data("margin-right",n).css("margin-right",parseFloat(i)+r._scrollbarWidth+"px")});var t=document.body.style.paddingRight,e=Bt(document.body).css("padding-right");Bt(document.body).data("padding-right",t).css("padding-right",parseFloat(e)+this._scrollbarWidth+"px")}},t._resetScrollbar=function(){Bt(re.FIXED_CONTENT).each(function(t,e){var n=Bt(e).data("padding-right");"undefined"!=typeof n&&Bt(e).css("padding-right",n).removeData("padding-right")}),Bt(re.STICKY_CONTENT+", "+re.NAVBAR_TOGGLER).each(function(t,e){var n=Bt(e).data("margin-right");"undefined"!=typeof n&&Bt(e).css("margin-right",n).removeData("margin-right")});var t=Bt(document.body).data("padding-right");"undefined"!=typeof t&&Bt(document.body).css("padding-right",t).removeData("padding-right")},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=$t,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},r._jQueryInterface=function(n,i){return this.each(function(){var t=Bt(this).data(Gt),e=h({},r.Default,Bt(this).data(),"object"==typeof n&&n);if(t||(t=new r(this,e),Bt(this).data(Gt,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},o(r,null,[{key:"VERSION",get:function(){return"4.1.0"}},{key:"Default",get:function(){return Xt}}]),r}(),Bt(document).on(Zt.CLICK_DATA_API,re.DATA_TOGGLE,function(t){var e,n=this,i=Cn.getSelectorFromElement(this);i&&(e=Bt(i)[0]);var r=Bt(e).data(Gt)?"toggle":h({},Bt(e).data(),Bt(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=Bt(e).one(Zt.SHOW,function(t){t.isDefaultPrevented()||s.one(Zt.HIDDEN,function(){Bt(n).is(":visible")&&n.focus()})});se._jQueryInterface.call(Bt(e),r,this)}),Bt.fn[Yt]=se._jQueryInterface,Bt.fn[Yt].Constructor=se,Bt.fn[Yt].noConflict=function(){return Bt.fn[Yt]=zt,se._jQueryInterface},se),Nn=(ae="tooltip",he="."+(le="bs.tooltip"),ce=(oe=e).fn[ae],ue="bs-tooltip",fe=new RegExp("(^|\\s)"+ue+"\\S+","g"),ge={animation:!0,template:'
//# sourceMappingURL=bootstrap.min.js.map // https://d3js.org Version 5.5.0. Copyright 2018 Mike Bostock. (function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})})(this,function(t){"use strict";function n(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function e(t){return 1===t.length&&(t=function(t){return function(e,r){return n(t(e),r)}}(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)>0?i=o:r=o+1}return r}}}function r(t,n){return[t,n]}function i(t){return null===t?NaN:+t}function o(t,n){var e,r,o=t.length,a=0,u=-1,f=0,c=0;if(null==n)for(;++u<o;)isNaN(e=i(t[u]))||(c+=(r=e-f)*(e-(f+=r/++a)));else for(;++u<o;)isNaN(e=i(n(t[u],u,t)))||(c+=(r=e-f)*(e-(f+=r/++a)));if(a>1)return c/(a-1)}function a(t,n){var e=o(t,n);return e?Math.sqrt(e):e}function u(t,n){var e,r,i,o=t.length,a=-1;if(null==n){for(;++a<o;)if(null!=(e=t[a])&&e>=e)for(r=i=e;++a<o;)null!=(e=t[a])&&(r>e&&(r=e),i<e&&(i=e))}else for(;++a<o;)if(null!=(e=n(t[a],a,t))&&e>=e)for(r=i=e;++a<o;)null!=(e=n(t[a],a,t))&&(r>e&&(r=e),i<e&&(i=e));return[r,i]}function f(t){return function(){return t}}function c(t){return t}function s(t,n,e){t=+t,n=+n,e=(i=arguments.length)<2?(n=t,t=0,1):i<3?1:+e;for(var r=-1,i=0|Math.max(0,Math.ceil((n-t)/e)),o=new Array(i);++r<i;)o[r]=t+r*e;return o}function l(t,n,e){var r,i,o,a,u=-1;if(n=+n,t=+t,e=+e,t===n&&e>0)return[t];if((r=n<t)&&(i=t,t=n,n=i),0===(a=h(t,n,e))||!isFinite(a))return[];if(a>0)for(t=Math.ceil(t/a),n=Math.floor(n/a),o=new Array(i=Math.ceil(n-t+1));++u<i;)o[u]=(t+u)*a;else for(t=Math.floor(t*a),n=Math.ceil(n*a),o=new Array(i=Math.ceil(t-n+1));++u<i;)o[u]=(t-u)/a;return r&&o.reverse(),o}function h(t,n,e){var r=(n-t)/Math.max(0,e),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=is?10:o>=os?5:o>=as?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=is?10:o>=os?5:o>=as?2:1)}function d(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=is?i*=10:o>=os?i*=5:o>=as&&(i*=2),n<t?-i:i}function p(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function v(t,n,e){if(null==e&&(e=i),r=t.length){if((n=+n)<=0||r<2)return+e(t[0],0,t);if(n>=1)return+e(t[r-1],r-1,t);var r,o=(r-1)*n,a=Math.floor(o),u=+e(t[a],a,t);return u+(+e(t[a+1],a+1,t)-u)*(o-a)}}function g(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o<i;)if(null!=(e=t[o])&&e>=e)for(r=e;++o<i;)null!=(e=t[o])&&e>r&&(r=e)}else for(;++o<i;)if(null!=(e=n(t[o],o,t))&&e>=e)for(r=e;++o<i;)null!=(e=n(t[o],o,t))&&e>r&&(r=e);return r}function y(t){for(var n,e,r,i=t.length,o=-1,a=0;++o<i;)a+=t[o].length;for(e=new Array(a);--i>=0;)for(n=(r=t[i]).length;--n>=0;)e[--a]=r[n];return e}function _(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o<i;)if(null!=(e=t[o])&&e>=e)for(r=e;++o<i;)null!=(e=t[o])&&r>e&&(r=e)}else for(;++o<i;)if(null!=(e=n(t[o],o,t))&&e>=e)for(r=e;++o<i;)null!=(e=n(t[o],o,t))&&r>e&&(r=e);return r}function b(t){if(!(i=t.length))return[];for(var n=-1,e=_(t,m),r=new Array(e);++n<e;)for(var i,o=-1,a=r[n]=new Array(i);++o<i;)a[o]=t[o][n];return r}function m(t){return t.length}function x(t){return t}function w(t){return"translate("+(t+.5)+",0)"}function M(t){return"translate(0,"+(t+.5)+")"}function A(){return!this.__axis}function T(t,n){function e(e){var h=null==i?n.ticks?n.ticks.apply(n,r):n.domain():i,d=null==o?n.tickFormat?n.tickFormat.apply(n,r):x:o,p=Math.max(a,0)+f,v=n.range(),g=+v[0]+.5,y=+v[v.length-1]+.5,_=(n.bandwidth?function(t){var n=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(n=Math.round(n)),function(e){return+t(e)+n}}:function(t){return function(n){return+t(n)}})(n.copy()),b=e.selection?e.selection():e,m=b.selectAll(".domain").data([null]),w=b.selectAll(".tick").data(h,n).order(),M=w.exit(),T=w.enter().append("g").attr("class","tick"),N=w.select("line"),S=w.select("text");m=m.merge(m.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(T),N=N.merge(T.append("line").attr("stroke","#000").attr(s+"2",c*a)),S=S.merge(T.append("text").attr("fill","#000").attr(s,c*p).attr("dy",t===fs?"0em":t===ss?"0.71em":"0.32em")),e!==b&&(m=m.transition(e),w=w.transition(e),N=N.transition(e),S=S.transition(e),M=M.transition(e).attr("opacity",hs).attr("transform",function(t){return isFinite(t=_(t))?l(t):this.getAttribute("transform")}),T.attr("opacity",hs).attr("transform",function(t){var n=this.parentNode.__axis;return l(n&&isFinite(n=n(t))?n:_(t))})),M.remove(),m.attr("d",t===ls||t==cs?"M"+c*u+","+g+"H0.5V"+y+"H"+c*u:"M"+g+","+c*u+"V0.5H"+y+"V"+c*u),w.attr("opacity",1).attr("transform",function(t){return l(_(t))}),N.attr(s+"2",c*a),S.attr(s,c*p).text(d),b.filter(A).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===cs?"start":t===ls?"end":"middle"),b.each(function(){this.__axis=_})}var r=[],i=null,o=null,a=6,u=6,f=3,c=t===fs||t===ls?-1:1,s=t===ls||t===cs?"x":"y",l=t===fs||t===ss?w:M;return e.scale=function(t){return arguments.length?(n=t,e):n},e.ticks=function(){return r=us.call(arguments),e},e.tickArguments=function(t){return arguments.length?(r=null==t?[]:us.call(t),e):r.slice()},e.tickValues=function(t){return arguments.length?(i=null==t?null:us.call(t),e):i&&i.slice()},e.tickFormat=function(t){return arguments.length?(o=t,e):o},e.tickSize=function(t){return arguments.length?(a=u=+t,e):a},e.tickSizeInner=function(t){return arguments.length?(a=+t,e):a},e.tickSizeOuter=function(t){return arguments.length?(u=+t,e):u},e.tickPadding=function(t){return arguments.length?(f=+t,e):f},e}function N(){for(var t,n=0,e=arguments.length,r={};n<e;++n){if(!(t=arguments[n]+"")||t in r)throw new Error("illegal type: "+t);r[t]=[]}return new S(r)}function S(t){this._=t}function E(t,n,e){for(var r=0,i=t.length;r<i;++r)if(t[r].name===n){t[r]=ds,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=e&&t.push({name:n,value:e}),t}function k(t){var n=t+="",e=n.indexOf(":");return e>=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),vs.hasOwnProperty(n)?{space:vs[n],local:t}:t}function C(t){var n=k(t);return(n.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===ps&&n.documentElement.namespaceURI===ps?n.createElement(t):n.createElementNS(e,t)}})(n)}function P(){}function z(t){return null==t?P:function(){return this.querySelector(t)}}function R(){return[]}function L(t){return null==t?R:function(){return this.querySelectorAll(t)}}function D(t){return new Array(t.length)}function U(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}function q(t,n,e,r,i,o){for(var a,u=0,f=n.length,c=o.length;u<c;++u)(a=n[u])?(a.__data__=o[u],r[u]=a):e[u]=new U(t,o[u]);for(;u<f;++u)(a=n[u])&&(i[u]=a)}function O(t,n,e,r,i,o,a){var u,f,c,s={},l=n.length,h=o.length,d=new Array(l);for(u=0;u<l;++u)(f=n[u])&&(d[u]=c=ms+a.call(f,f.__data__,u,n),c in s?i[u]=f:s[c]=f);for(u=0;u<h;++u)(f=s[c=ms+a.call(t,o[u],u,o)])?(r[u]=f,f.__data__=o[u],s[c]=null):e[u]=new U(t,o[u]);for(u=0;u<l;++u)(f=n[u])&&s[d[u]]===f&&(i[u]=f)}function Y(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function B(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function F(t,n){return t.style.getPropertyValue(n)||B(t).getComputedStyle(t,null).getPropertyValue(n)}function I(t){return t.trim().split(/^|\s+/)}function j(t){return t.classList||new H(t)}function H(t){this._node=t,this._names=I(t.getAttribute("class")||"")}function X(t,n){for(var e=j(t),r=-1,i=n.length;++r<i;)e.add(n[r])}function G(t,n){for(var e=j(t),r=-1,i=n.length;++r<i;)e.remove(n[r])}function V(){this.textContent=""}function $(){this.innerHTML=""}function W(){this.nextSibling&&this.parentNode.appendChild(this)}function Z(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Q(){return null}function J(){var t=this.parentNode;t&&t.removeChild(this)}function K(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function tt(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}function nt(t,n,e){return t=et(t,n,e),function(n){var e=n.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||t.call(this,n)}}function et(n,e,r){return function(i){var o=t.event;t.event=i;try{n.call(this,this.__data__,e,r)}finally{t.event=o}}}function rt(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;r<o;++r)e=n[r],t.type&&e.type!==t.type||e.name!==t.name?n[++i]=e:this.removeEventListener(e.type,e.listener,e.capture);++i?n.length=i:delete this.__on}}}function it(t,n,e){var r=xs.hasOwnProperty(t.type)?nt:et;return function(i,o,a){var u,f=this.__on,c=r(n,o,a);if(f)for(var s=0,l=f.length;s<l;++s)if((u=f[s]).type===t.type&&u.name===t.name)return this.removeEventListener(u.type,u.listener,u.capture),this.addEventListener(u.type,u.listener=c,u.capture=e),void(u.value=n);this.addEventListener(t.type,c,e),u={type:t.type,name:t.name,value:n,listener:c,capture:e},f?f.push(u):this.__on=[u]}}function ot(n,e,r,i){var o=t.event;n.sourceEvent=t.event,t.event=n;try{return e.apply(r,i)}finally{t.event=o}}function at(t,n,e){var r=B(t),i=r.CustomEvent;"function"==typeof i?i=new i(n,e):(i=r.document.createEvent("Event"),e?(i.initEvent(n,e.bubbles,e.cancelable),i.detail=e.detail):i.initEvent(n,!1,!1)),t.dispatchEvent(i)}function ut(t,n){this._groups=t,this._parents=n}function ft(){return new ut(document.documentElement,ws)}function ct(t){return"string"==typeof t?new ut(document.querySelector(t),[document.documentElement]):new ut(t,ws)}function st(){return new lt}function lt(){this._="@"+(++Ms).toString(36)}function ht(){for(var n,e=t.event;n=e.sourceEvent;)e=n;return e}function dt(t,n){var e=t.ownerSVGElement||t;if(e.createSVGPoint){var r=e.createSVGPoint();return r.x=n.clientX,r.y=n.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var i=t.getBoundingClientRect();return[n.clientX-i.left-t.clientLeft,n.clientY-i.top-t.clientTop]}function pt(t){var n=ht();return n.changedTouches&&(n=n.changedTouches[0]),dt(t,n)}function vt(t,n,e){arguments.length<3&&(e=n,n=ht().changedTouches);for(var r,i=0,o=n?n.length:0;i<o;++i)if((r=n[i]).identifier===e)return dt(t,r);return null}function gt(){t.event.stopImmediatePropagation()}function yt(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function _t(t){var n=t.document.documentElement,e=ct(t).on("dragstart.drag",yt,!0);"onselectstart"in n?e.on("selectstart.drag",yt,!0):(n.__noselect=n.style.MozUserSelect,n.style.MozUserSelect="none")}function bt(t,n){var e=t.document.documentElement,r=ct(t).on("dragstart.drag",null);n&&(r.on("click.drag",yt,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in e?r.on("selectstart.drag",null):(e.style.MozUserSelect=e.__noselect,delete e.__noselect)}function mt(t){return function(){return t}}function xt(t,n,e,r,i,o,a,u,f,c){this.target=t,this.type=n,this.subject=e,this.identifier=r,this.active=i,this.x=o,this.y=a,this.dx=u,this.dy=f,this._=c}function wt(){return!t.event.button}function Mt(){return this.parentNode}function At(n){return null==n?{x:t.event.x,y:t.event.y}:n}function Tt(){return"ontouchstart"in this}function Nt(t,n,e){t.prototype=n.prototype=e,e.constructor=t}function St(t,n){var e=Object.create(t.prototype);for(var r in n)e[r]=n[r];return e}function Et(){}function kt(t){var n;return t=(t+"").trim().toLowerCase(),(n=Ss.exec(t))?(n=parseInt(n[1],16),new Lt(n>>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=Es.exec(t))?Ct(parseInt(n[1],16)):(n=ks.exec(t))?new Lt(n[1],n[2],n[3],1):(n=Cs.exec(t))?new Lt(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=Ps.exec(t))?Pt(n[1],n[2],n[3],n[4]):(n=zs.exec(t))?Pt(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=Rs.exec(t))?Ut(n[1],n[2]/100,n[3]/100,1):(n=Ls.exec(t))?Ut(n[1],n[2]/100,n[3]/100,n[4]):Ds.hasOwnProperty(t)?Ct(Ds[t]):"transparent"===t?new Lt(NaN,NaN,NaN,0):null}function Ct(t){return new Lt(t>>16&255,t>>8&255,255&t,1)}function Pt(t,n,e,r){return r<=0&&(t=n=e=NaN),new Lt(t,n,e,r)}function zt(t){return t instanceof Et||(t=kt(t)),t?(t=t.rgb(),new Lt(t.r,t.g,t.b,t.opacity)):new Lt}function Rt(t,n,e,r){return 1===arguments.length?zt(t):new Lt(t,n,e,null==r?1:r)}function Lt(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function Dt(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Ut(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new Ot(t,n,e,r)}function qt(t,n,e,r){return 1===arguments.length?function(t){if(t instanceof Ot)return new Ot(t.h,t.s,t.l,t.opacity);if(t instanceof Et||(t=kt(t)),!t)return new Ot;if(t instanceof Ot)return t;var n=(t=t.rgb()).r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),a=NaN,u=o-i,f=(o+i)/2;return u?(a=n===o?(e-r)/u+6*(e<r):e===o?(r-n)/u+2:(n-e)/u+4,u/=f<.5?o+i:2-o-i,a*=60):u=f>0&&f<1?0:a,new Ot(a,u,f,t.opacity)}(t):new Ot(t,n,e,null==r?1:r)}function Ot(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Yt(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Bt(t){if(t instanceof It)return new It(t.l,t.a,t.b,t.opacity);if(t instanceof Wt){if(isNaN(t.h))return new It(t.l,0,0,t.opacity);var n=t.h*Us;return new It(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof Lt||(t=zt(t));var e,r,i=Gt(t.r),o=Gt(t.g),a=Gt(t.b),u=jt((.2225045*i+.7168786*o+.0606169*a)/Ys);return i===o&&o===a?e=r=u:(e=jt((.4360747*i+.3850649*o+.1430804*a)/Os),r=jt((.0139322*i+.0971045*o+.7141733*a)/Bs)),new It(116*u-16,500*(e-u),200*(u-r),t.opacity)}function Ft(t,n,e,r){return 1===arguments.length?Bt(t):new It(t,n,e,null==r?1:r)}function It(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function jt(t){return t>Hs?Math.pow(t,1/3):t/js+Fs}function Ht(t){return t>Is?t*t*t:js*(t-Fs)}function Xt(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Gt(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Vt(t){if(t instanceof Wt)return new Wt(t.h,t.c,t.l,t.opacity);if(t instanceof It||(t=Bt(t)),0===t.a&&0===t.b)return new Wt(NaN,0,t.l,t.opacity);var n=Math.atan2(t.b,t.a)*qs;return new Wt(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function $t(t,n,e,r){return 1===arguments.length?Vt(t):new Wt(t,n,e,null==r?1:r)}function Wt(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Zt(t,n,e,r){return 1===arguments.length?function(t){if(t instanceof Qt)return new Qt(t.h,t.s,t.l,t.opacity);t instanceof Lt||(t=zt(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(Zs*r+$s*n-Ws*e)/(Zs+$s-Ws),o=r-i,a=(Vs*(e-i)-Xs*o)/Gs,u=Math.sqrt(a*a+o*o)/(Vs*i*(1-i)),f=u?Math.atan2(a,o)*qs-120:NaN;return new Qt(f<0?f+360:f,u,i,t.opacity)}(t):new Qt(t,n,e,null==r?1:r)}function Qt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Jt(t,n,e,r,i){var o=t*t,a=o*t;return((1-3*t+3*o-a)*n+(4-6*o+3*a)*e+(1+3*t+3*o-3*a)*r+a*i)/6}function Kt(t){var n=t.length-1;return function(e){var r=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,u=r<n-1?t[r+2]:2*o-i;return Jt((e-r/n)*n,a,i,o,u)}}function tn(t){var n=t.length;return function(e){var r=Math.floor(((e%=1)<0?++e:e)*n),i=t[(r+n-1)%n],o=t[r%n],a=t[(r+1)%n],u=t[(r+2)%n];return Jt((e-r/n)*n,i,o,a,u)}}function nn(t){return function(){return t}}function en(t,n){return function(e){return t+e*n}}function rn(t,n){var e=n-t;return e?en(t,e>180||e<-180?e-360*Math.round(e/360):e):nn(isNaN(t)?n:t)}function on(t){return 1==(t=+t)?an:function(n,e){return e-n?function(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}(n,e,t):nn(isNaN(n)?e:n)}}function an(t,n){var e=n-t;return e?en(t,e):nn(isNaN(t)?n:t)}function un(t){return function(n){var e,r,i=n.length,o=new Array(i),a=new Array(i),u=new Array(i);for(e=0;e<i;++e)r=Rt(n[e]),o[e]=r.r||0,a[e]=r.g||0,u[e]=r.b||0;return o=t(o),a=t(a),u=t(u),r.opacity=1,function(t){return r.r=o(t),r.g=a(t),r.b=u(t),r+""}}}function fn(t,n){var e,r=n?n.length:0,i=t?Math.min(r,t.length):0,o=new Array(i),a=new Array(r);for(e=0;e<i;++e)o[e]=dn(t[e],n[e]);for(;e<r;++e)a[e]=n[e];return function(t){for(e=0;e<i;++e)a[e]=o[e](t);return a}}function cn(t,n){var e=new Date;return t=+t,n-=t,function(r){return e.setTime(t+n*r),e}}function sn(t,n){return t=+t,n-=t,function(e){return t+n*e}}function ln(t,n){var e,r={},i={};null!==t&&"object"==typeof t||(t={}),null!==n&&"object"==typeof n||(n={});for(e in n)e in t?r[e]=dn(t[e],n[e]):i[e]=n[e];return function(t){for(e in r)i[e]=r[e](t);return i}}function hn(t,n){var e,r,i,o=al.lastIndex=ul.lastIndex=0,a=-1,u=[],f=[];for(t+="",n+="";(e=al.exec(t))&&(r=ul.exec(n));)(i=r.index)>o&&(i=n.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(e=e[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,f.push({i:a,x:sn(e,r)})),o=ul.lastIndex;return o<n.length&&(i=n.slice(o),u[a]?u[a]+=i:u[++a]=i),u.length<2?f[0]?function(t){return function(n){return t(n)+""}}(f[0].x):function(t){return function(){return t}}(n):(n=f.length,function(t){for(var e,r=0;r<n;++r)u[(e=f[r]).i]=e.x(t);return u.join("")})}function dn(t,n){var e,r=typeof n;return null==n||"boolean"===r?nn(n):("number"===r?sn:"string"===r?(e=kt(n))?(n=e,rl):hn:n instanceof kt?rl:n instanceof Date?cn:Array.isArray(n)?fn:"function"!=typeof n.valueOf&&"function"!=typeof n.toString||isNaN(n)?ln:sn)(t,n)}function pn(t,n){return t=+t,n-=t,function(e){return Math.round(t+n*e)}}function vn(t,n,e,r,i,o){var a,u,f;return(a=Math.sqrt(t*t+n*n))&&(t/=a,n/=a),(f=t*e+n*r)&&(e-=t*f,r-=n*f),(u=Math.sqrt(e*e+r*r))&&(e/=u,r/=u,f/=u),t*r<n*e&&(t=-t,n=-n,f=-f,a=-a),{translateX:i,translateY:o,rotate:Math.atan2(n,t)*fl,skewX:Math.atan(f)*fl,scaleX:a,scaleY:u}}function gn(t,n,e,r){function i(t){return t.length?t.pop()+" ":""}return function(o,a){var u=[],f=[];return o=t(o),a=t(a),function(t,r,i,o,a,u){if(t!==i||r!==o){var f=a.push("translate(",null,n,null,e);u.push({i:f-4,x:sn(t,i)},{i:f-2,x:sn(r,o)})}else(i||o)&&a.push("translate("+i+n+o+e)}(o.translateX,o.translateY,a.translateX,a.translateY,u,f),function(t,n,e,o){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:sn(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}(o.rotate,a.rotate,u,f),function(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:sn(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}(o.skewX,a.skewX,u,f),function(t,n,e,r,o,a){if(t!==e||n!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:sn(t,e)},{i:u-2,x:sn(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,u,f),o=a=null,function(t){for(var n,e=-1,r=f.length;++e<r;)u[(n=f[e]).i]=n.x(t);return u.join("")}}}function yn(t){return((t=Math.exp(t))+1/t)/2}function _n(t,n){var e,r,i=t[0],o=t[1],a=t[2],u=n[0],f=n[1],c=n[2],s=u-i,l=f-o,h=s*s+l*l;if(h<vl)r=Math.log(c/a)/hl,e=function(t){return[i+t*s,o+t*l,a*Math.exp(hl*t*r)]};else{var d=Math.sqrt(h),p=(c*c-a*a+pl*h)/(2*a*dl*d),v=(c*c-a*a-pl*h)/(2*c*dl*d),g=Math.log(Math.sqrt(p*p+1)-p),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-g)/hl,e=function(t){var n=t*r,e=yn(g),u=a/(dl*d)*(e*function(t){return((t=Math.exp(2*t))-1)/(t+1)}(hl*n+g)-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+u*s,o+u*l,a*e/yn(hl*n+g)]}}return e.duration=1e3*r,e}function bn(t){return function(n,e){var r=t((n=qt(n)).h,(e=qt(e)).h),i=an(n.s,e.s),o=an(n.l,e.l),a=an(n.opacity,e.opacity);return function(t){return n.h=r(t),n.s=i(t),n.l=o(t),n.opacity=a(t),n+""}}}function mn(t){return function(n,e){var r=t((n=$t(n)).h,(e=$t(e)).h),i=an(n.c,e.c),o=an(n.l,e.l),a=an(n.opacity,e.opacity);return function(t){return n.h=r(t),n.c=i(t),n.l=o(t),n.opacity=a(t),n+""}}}function xn(t){return function n(e){function r(n,r){var i=t((n=Zt(n)).h,(r=Zt(r)).h),o=an(n.s,r.s),a=an(n.l,r.l),u=an(n.opacity,r.opacity);return function(t){return n.h=i(t),n.s=o(t),n.l=a(Math.pow(t,e)),n.opacity=u(t),n+""}}return e=+e,r.gamma=n,r}(1)}function wn(){return Sl||(Cl(Mn),Sl=kl.now()+El)}function Mn(){Sl=0}function An(){this._call=this._time=this._next=null}function Tn(t,n,e){var r=new An;return r.restart(t,n,e),r}function Nn(){wn(),++wl;for(var t,n=nl;n;)(t=Sl-n._time)>=0&&n._call.call(null,t),n=n._next;--wl}function Sn(){Sl=(Nl=kl.now())+El,wl=Ml=0;try{Nn()}finally{wl=0,function(){var t,n,e=nl,r=1/0;for(;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:nl=n);el=t,kn(r)}(),Sl=0}}function En(){var t=kl.now(),n=t-Nl;n>Tl&&(El-=n,Nl=t)}function kn(t){if(!wl){Ml&&(Ml=clearTimeout(Ml));t-Sl>24?(t<1/0&&(Ml=setTimeout(Sn,t-kl.now()-El)),Al&&(Al=clearInterval(Al))):(Al||(Nl=kl.now(),Al=setInterval(En,Tl)),wl=1,Cl(Sn))}}function Cn(t,n,e){var r=new An;return n=null==n?0:+n,r.restart(function(e){r.stop(),t(e+n)},n,e),r}function Pn(t,n,e,r,i,o){var a=t.__transition;if(a){if(e in a)return}else t.__transition={};(function(t,n,e){function r(f){var c,s,l,h;if(e.state!==Ll)return o();for(c in u)if((h=u[c]).name===e.name){if(h.state===Ul)return Cn(r);h.state===ql?(h.state=Yl,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete u[c]):+c<n&&(h.state=Yl,h.timer.stop(),delete u[c])}if(Cn(function(){e.state===Ul&&(e.state=ql,e.timer.restart(i,e.delay,e.time),i(f))}),e.state=Dl,e.on.call("start",t,t.__data__,e.index,e.group),e.state===Dl){for(e.state=Ul,a=new Array(l=e.tween.length),c=0,s=-1;c<l;++c)(h=e.tween[c].value.call(t,t.__data__,e.index,e.group))&&(a[++s]=h);a.length=s+1}}function i(n){for(var r=n<e.duration?e.ease.call(null,n/e.duration):(e.timer.restart(o),e.state=Ol,1),i=-1,u=a.length;++i<u;)a[i].call(null,r);e.state===Ol&&(e.on.call("end",t,t.__data__,e.index,e.group),o())}function o(){e.state=Yl,e.timer.stop(),delete u[n];for(var r in u)return;delete t.__transition}var a,u=t.__transition;u[n]=e,e.timer=Tn(function(t){e.state=Ll,e.timer.restart(r,e.delay,e.time),e.delay<=t&&r(t-e.delay)},0,e.time)})(t,e,{name:n,index:r,group:i,on:Pl,tween:zl,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Rl})}function zn(t,n){var e=Ln(t,n);if(e.state>Rl)throw new Error("too late; already scheduled");return e}function Rn(t,n){var e=Ln(t,n);if(e.state>Dl)throw new Error("too late; already started");return e}function Ln(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("transition not found");return e}function Dn(t,n){var e,r,i,o=t.__transition,a=!0;if(o){n=null==n?null:n+"";for(i in o)(e=o[i]).name===n?(r=e.state>Dl&&e.state<Ol,e.state=Yl,e.timer.stop(),r&&e.on.call("interrupt",t,t.__data__,e.index,e.group),delete o[i]):a=!1;a&&delete t.__transition}}function Un(t,n,e){var r=t._id;return t.each(function(){var t=Rn(this,r);(t.value||(t.value={}))[n]=e.apply(this,arguments)}),function(t){return Ln(t,r).value[n]}}function qn(t,n){var e;return("number"==typeof n?sn:n instanceof kt?rl:(e=kt(n))?(n=e,rl):hn)(t,n)}function On(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function Yn(t){return ft().transition(t)}function Bn(){return++Fl}function Fn(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function In(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function jn(t){return(1-Math.cos(Gl*t))/2}function Hn(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function Xn(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function Gn(t){return(t=+t)<$l?rh*t*t:t<Zl?rh*(t-=Wl)*t+Ql:t<Kl?rh*(t-=Jl)*t+th:rh*(t-=nh)*t+eh}function Vn(t,n){for(var e;!(e=t.__transition)||!(e=e[n]);)if(!(t=t.parentNode))return lh.time=wn(),lh;return e}function $n(t){return function(){return t}}function Wn(){t.event.stopImmediatePropagation()}function Zn(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function Qn(t){return{type:t}}function Jn(){return!t.event.button}function Kn(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function te(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function ne(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function ee(n){function e(t){var e=t.property("__brush",u).selectAll(".overlay").data([Qn("overlay")]);e.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",mh.overlay).merge(e).each(function(){var t=te(this).extent;ct(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])}),t.selectAll(".selection").data([Qn("selection")]).enter().append("rect").attr("class","selection").attr("cursor",mh.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var i=t.selectAll(".handle").data(n.handles,function(t){return t.type});i.exit().remove(),i.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return mh[t.type]}),t.each(r).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",a)}function r(){var t=ct(this),n=te(this).selection;n?(t.selectAll(".selection").style("display",null).attr("x",n[0][0]).attr("y",n[0][1]).attr("width",n[1][0]-n[0][0]).attr("height",n[1][1]-n[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?n[1][0]-h/2:n[0][0]-h/2}).attr("y",function(t){return"s"===t.type[0]?n[1][1]-h/2:n[0][1]-h/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?n[1][0]-n[0][0]+h:h}).attr("height",function(t){return"e"===t.type||"w"===t.type?n[1][1]-n[0][1]+h:h})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function i(t,n){return t.__brush.emitter||new o(t,n)}function o(t,n){this.that=t,this.args=n,this.state=t.__brush,this.active=0}function a(){function e(){var t=pt(w);!L||m||x||(Math.abs(t[0]-U[0])>Math.abs(t[1]-U[1])?x=!0:m=!0),U=t,b=!0,Zn(),o()}function o(){var t;switch(y=U[0]-D[0],_=U[1]-D[1],A){case ph:case dh:T&&(y=Math.max(C-u,Math.min(z-d,y)),c=u+y,p=d+y),N&&(_=Math.max(P-l,Math.min(R-v,_)),h=l+_,g=v+_);break;case vh:T<0?(y=Math.max(C-u,Math.min(z-u,y)),c=u+y,p=d):T>0&&(y=Math.max(C-d,Math.min(z-d,y)),c=u,p=d+y),N<0?(_=Math.max(P-l,Math.min(R-l,_)),h=l+_,g=v):N>0&&(_=Math.max(P-v,Math.min(R-v,_)),h=l,g=v+_);break;case gh:T&&(c=Math.max(C,Math.min(z,u-y*T)),p=Math.max(C,Math.min(z,d+y*T))),N&&(h=Math.max(P,Math.min(R,l-_*N)),g=Math.max(P,Math.min(R,v+_*N)))}p<c&&(T*=-1,t=u,u=d,d=t,t=c,c=p,p=t,M in xh&&Y.attr("cursor",mh[M=xh[M]])),g<h&&(N*=-1,t=l,l=v,v=t,t=h,h=g,g=t,M in wh&&Y.attr("cursor",mh[M=wh[M]])),S.selection&&(k=S.selection),m&&(c=k[0][0],p=k[1][0]),x&&(h=k[0][1],g=k[1][1]),k[0][0]===c&&k[0][1]===h&&k[1][0]===p&&k[1][1]===g||(S.selection=[[c,h],[p,g]],r.call(w),q.brush())}function a(){if(Wn(),t.event.touches){if(t.event.touches.length)return;f&&clearTimeout(f),f=setTimeout(function(){f=null},500),O.on("touchmove.brush touchend.brush touchcancel.brush",null)}else bt(t.event.view,b),B.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);O.attr("pointer-events","all"),Y.attr("cursor",mh.overlay),S.selection&&(k=S.selection),ne(k)&&(S.selection=null,r.call(w)),q.end()}if(t.event.touches){if(t.event.changedTouches.length<t.event.touches.length)return Zn()}else if(f)return;if(s.apply(this,arguments)){var u,c,l,h,d,p,v,g,y,_,b,m,x,w=this,M=t.event.target.__data__.type,A="selection"===(t.event.metaKey?M="overlay":M)?dh:t.event.altKey?gh:vh,T=n===_h?null:Mh[M],N=n===yh?null:Ah[M],S=te(w),E=S.extent,k=S.selection,C=E[0][0],P=E[0][1],z=E[1][0],R=E[1][1],L=T&&N&&t.event.shiftKey,D=pt(w),U=D,q=i(w,arguments).beforestart();"overlay"===M?S.selection=k=[[u=n===_h?C:D[0],l=n===yh?P:D[1]],[d=n===_h?z:u,v=n===yh?R:l]]:(u=k[0][0],l=k[0][1],d=k[1][0],v=k[1][1]),c=u,h=l,p=d,g=v;var O=ct(w).attr("pointer-events","none"),Y=O.selectAll(".overlay").attr("cursor",mh[M]);if(t.event.touches)O.on("touchmove.brush",e,!0).on("touchend.brush touchcancel.brush",a,!0);else{var B=ct(t.event.view).on("keydown.brush",function(){switch(t.event.keyCode){case 16:L=T&&N;break;case 18:A===vh&&(T&&(d=p-y*T,u=c+y*T),N&&(v=g-_*N,l=h+_*N),A=gh,o());break;case 32:A!==vh&&A!==gh||(T<0?d=p-y:T>0&&(u=c-y),N<0?v=g-_:N>0&&(l=h-_),A=ph,Y.attr("cursor",mh.selection),o());break;default:return}Zn()},!0).on("keyup.brush",function(){switch(t.event.keyCode){case 16:L&&(m=x=L=!1,o());break;case 18:A===gh&&(T<0?d=p:T>0&&(u=c),N<0?v=g:N>0&&(l=h),A=vh,o());break;case 32:A===ph&&(t.event.altKey?(T&&(d=p-y*T,u=c+y*T),N&&(v=g-_*N,l=h+_*N),A=gh):(T<0?d=p:T>0&&(u=c),N<0?v=g:N>0&&(l=h),A=vh),Y.attr("cursor",mh[M]),o());break;default:return}Zn()},!0).on("mousemove.brush",e,!0).on("mouseup.brush",a,!0);_t(t.event.view)}Wn(),Dn(w),r.call(w),q.start()}}function u(){var t=this.__brush||{selection:null};return t.extent=c.apply(this,arguments),t.dim=n,t}var f,c=Kn,s=Jn,l=N(e,"start","brush","end"),h=6;return e.move=function(t,e){t.selection?t.on("start.brush",function(){i(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){i(this,arguments).end()}).tween("brush",function(){function t(t){a.selection=1===t&&ne(c)?null:s(t),r.call(o),u.brush()}var o=this,a=o.__brush,u=i(o,arguments),f=a.selection,c=n.input("function"==typeof e?e.apply(this,arguments):e,a.extent),s=dn(f,c);return f&&c?t:t(1)}):t.each(function(){var t=arguments,o=this.__brush,a=n.input("function"==typeof e?e.apply(this,t):e,o.extent),u=i(this,t).beforestart();Dn(this),o.selection=null==a||ne(a)?null:a,r.call(this),u.start().brush().end()})},o.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting&&(this.starting=!1,this.emit("start")),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){ot(new function(t,n,e){this.target=t,this.type=n,this.selection=e}(e,t,n.output(this.state.selection)),l.apply,l,[t,this.that,this.args])}},e.extent=function(t){return arguments.length?(c="function"==typeof t?t:$n([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),e):c},e.filter=function(t){return arguments.length?(s="function"==typeof t?t:$n(!!t),e):s},e.handleSize=function(t){return arguments.length?(h=+t,e):h},e.on=function(){var t=l.on.apply(l,arguments);return t===l?e:t},e}function re(t){return function(){return t}}function ie(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function oe(){return new ie}function ae(t){return t.source}function ue(t){return t.target}function fe(t){return t.radius}function ce(t){return t.startAngle}function se(t){return t.endAngle}function le(){}function he(t,n){var e=new le;if(t instanceof le)t.each(function(t,n){e.set(n,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==n)for(;++i<o;)e.set(i,t[i]);else for(;++i<o;)e.set(n(r=t[i],i,t),r)}else if(t)for(var a in t)e.set(a,t[a]);return e}function de(){return{}}function pe(t,n,e){t[n]=e}function ve(){return he()}function ge(t,n,e){t.set(n,e)}function ye(){}function _e(t,n){var e=new ye;if(t instanceof ye)t.each(function(t){e.add(t)});else if(t){var r=-1,i=t.length;if(null==n)for(;++r<i;)e.add(t[r]);else for(;++r<i;)e.add(n(t[r],r,t))}return e}function be(t,n){return t-n}function me(t){return function(){return t}}function xe(t,n){for(var e,r=-1,i=n.length;++r<i;)if(e=function(t,n){for(var e=n[0],r=n[1],i=-1,o=0,a=t.length,u=a-1;o<a;u=o++){var f=t[o],c=f[0],s=f[1],l=t[u],h=l[0],d=l[1];if(function(t,n,e){var r;return function(t,n,e){return(n[0]-t[0])*(e[1]-t[1])==(e[0]-t[0])*(n[1]-t[1])}(t,n,e)&&function(t,n,e){return t<=n&&n<=e||e<=n&&n<=t}(t[r=+(t[0]===n[0])],e[r],n[r])}(f,l,n))return 0;s>r!=d>r&&e<(h-c)*(r-s)/(d-s)+c&&(i=-i)}return i}(t,n[r]))return e;return 0}function we(){}function Me(){function t(t){var e=a(t);if(Array.isArray(e))e=e.slice().sort(be);else{var r=u(t),i=r[0],o=r[1];e=d(i,o,e),e=s(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map(function(e){return n(t,e)})}function n(t,n){var r=[],a=[];return function(t,n,r){function a(t){var n,i,o=[t[0][0]+u,t[0][1]+f],a=[t[1][0]+u,t[1][1]+f],c=e(o),s=e(a);(n=p[c])?(i=d[s])?(delete p[n.end],delete d[i.start],n===i?(n.ring.push(a),r(n.ring)):d[n.start]=p[i.end]={start:n.start,end:i.end,ring:n.ring.concat(i.ring)}):(delete p[n.end],n.ring.push(a),p[n.end=s]=n):(n=d[s])?(i=p[c])?(delete d[n.start],delete p[i.end],n===i?(n.ring.push(a),r(n.ring)):d[i.start]=p[n.end]={start:i.start,end:n.end,ring:i.ring.concat(n.ring)}):(delete d[n.start],n.ring.unshift(o),d[n.start=c]=n):d[c]=p[s]={start:c,end:s,ring:[o,a]}}var u,f,c,s,l,h,d=new Array,p=new Array;u=f=-1,s=t[0]>=n,qh[s<<1].forEach(a);for(;++u<i-1;)c=s,s=t[u+1]>=n,qh[c|s<<1].forEach(a);qh[s<<0].forEach(a);for(;++f<o-1;){for(u=-1,s=t[f*i+i]>=n,l=t[f*i]>=n,qh[s<<1|l<<2].forEach(a);++u<i-1;)c=s,s=t[f*i+i+u+1]>=n,h=l,l=t[f*i+u+1]>=n,qh[c|s<<1|l<<2|h<<3].forEach(a);qh[s|l<<3].forEach(a)}u=-1,l=t[f*i]>=n,qh[l<<2].forEach(a);for(;++u<i-1;)h=l,l=t[f*i+u+1]>=n,qh[l<<2|h<<3].forEach(a);qh[l<<3].forEach(a)}(t,n,function(e){f(e,t,n),function(t){for(var n=0,e=t.length,r=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++n<e;)r+=t[n-1][1]*t[n][0]-t[n-1][0]*t[n][1];return r}(e)>0?r.push([e]):a.push(e)}),a.forEach(function(t){for(var n,e=0,i=r.length;e<i;++e)if(-1!==xe((n=r[e])[0],t))return void n.push(t)}),{type:"MultiPolygon",value:n,coordinates:r}}function e(t){return 2*t[0]+t[1]*(i+1)*4}function r(t,n,e){t.forEach(function(t){var r,a=t[0],u=t[1],f=0|a,c=0|u,s=n[c*i+f];a>0&&a<i&&f===a&&(r=n[c*i+f-1],t[0]=a+(e-r)/(s-r)-.5),u>0&&u<o&&c===u&&(r=n[(c-1)*i+f],t[1]=u+(e-r)/(s-r)-.5)})}var i=1,o=1,a=p,f=r;return t.contour=n,t.size=function(n){if(!arguments.length)return[i,o];var e=Math.ceil(n[0]),r=Math.ceil(n[1]);if(!(e>0&&r>0))throw new Error("invalid size");return i=e,o=r,t},t.thresholds=function(n){return arguments.length?(a="function"==typeof n?n:Array.isArray(n)?me(Uh.call(n)):me(n),t):a},t.smooth=function(n){return arguments.length?(f=n?r:we,t):f===r},t}function Ae(t,n,e){for(var r=t.width,i=t.height,o=1+(e<<1),a=0;a<i;++a)for(var u=0,f=0;u<r+e;++u)u<r&&(f+=t.data[u+a*r]),u>=e&&(u>=o&&(f-=t.data[u-o+a*r]),n.data[u-e+a*r]=f/Math.min(u+1,r-1+o-u,o))}function Te(t,n,e){for(var r=t.width,i=t.height,o=1+(e<<1),a=0;a<r;++a)for(var u=0,f=0;u<i+e;++u)u<i&&(f+=t.data[a+u*r]),u>=e&&(u>=o&&(f-=t.data[a+(u-o)*r]),n.data[a+(u-e)*r]=f/Math.min(u+1,i-1+o-u,o))}function Ne(t){return t[0]}function Se(t){return t[1]}function Ee(t){return new Function("d","return {"+t.map(function(t,n){return JSON.stringify(t)+": d["+n+"]"}).join(",")+"}")}function ke(t){function n(t,n){function e(){if(c)return Yh;if(s)return s=!1,Oh;var n,e,r=u;if(t.charCodeAt(r)===Bh){for(;u++<a&&t.charCodeAt(u)!==Bh||t.charCodeAt(++u)===Bh;);return(n=u)>=a?c=!0:(e=t.charCodeAt(u++))===Fh?s=!0:e===Ih&&(s=!0,t.charCodeAt(u)===Fh&&++u),t.slice(r+1,n-1).replace(/""/g,'"')}for(;u<a;){if((e=t.charCodeAt(n=u++))===Fh)s=!0;else if(e===Ih)s=!0,t.charCodeAt(u)===Fh&&++u;else if(e!==o)continue;return t.slice(r,n)}return c=!0,t.slice(r,a)}var r,i=[],a=t.length,u=0,f=0,c=a<=0,s=!1;for(t.charCodeAt(a-1)===Fh&&--a,t.charCodeAt(a-1)===Ih&&--a;(r=e())!==Yh;){for(var l=[];r!==Oh&&r!==Yh;)l.push(r),r=e();n&&null==(l=n(l,f++))||i.push(l)}return i}function e(n){return n.map(r).join(t)}function r(t){return null==t?"":i.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}var i=new RegExp('["'+t+"\n\r]"),o=t.charCodeAt(0);return{parse:function(t,e){var r,i,o=n(t,function(t,n){if(r)return r(t,n-1);i=t,r=e?function(t,n){var e=Ee(t);return function(r,i){return n(e(r),i,t)}}(t,e):Ee(t)});return o.columns=i||[],o},parseRows:n,format:function(n,e){return null==e&&(e=function(t){var n=Object.create(null),e=[];return t.forEach(function(t){for(var r in t)r in n||e.push(n[r]=r)}),e}(n)),[e.map(r).join(t)].concat(n.map(function(n){return e.map(function(t){return r(n[t])}).join(t)})).join("\n")},formatRows:function(t){return t.map(e).join("\n")}}}function Ce(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}function Pe(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}function ze(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Re(t,n){return fetch(t,n).then(ze)}function Le(t){return function(n,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=void 0),Re(n,e).then(function(n){return t(n,r)})}}function De(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.json()}function Ue(t){return function(n,e){return Re(n,e).then(function(n){return(new DOMParser).parseFromString(n,t)})}}function qe(t){return function(){return t}}function Oe(){return 1e-6*(Math.random()-.5)}function Ye(t,n,e,r){if(isNaN(n)||isNaN(e))return t;var i,o,a,u,f,c,s,l,h,d=t._root,p={data:r},v=t._x0,g=t._y0,y=t._x1,_=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((c=n>=(o=(v+y)/2))?v=o:y=o,(s=e>=(a=(g+_)/2))?g=a:_=a,i=d,!(d=d[l=s<<1|c]))return i[l]=p,t;if(u=+t._x.call(null,d.data),f=+t._y.call(null,d.data),n===u&&e===f)return p.next=d,i?i[l]=p:t._root=p,t;do{i=i?i[l]=new Array(4):t._root=new Array(4),(c=n>=(o=(v+y)/2))?v=o:y=o,(s=e>=(a=(g+_)/2))?g=a:_=a}while((l=s<<1|c)==(h=(f>=a)<<1|u>=o));return i[h]=d,i[l]=p,t}function Be(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i}function Fe(t){return t[0]}function Ie(t){return t[1]}function je(t,n,e){var r=new He(null==n?Fe:n,null==e?Ie:e,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function He(t,n,e,r,i,o){this._x=t,this._y=n,this._x0=e,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function Xe(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}function Ge(t){return t.x+t.vx}function Ve(t){return t.y+t.vy}function $e(t){return t.index}function We(t,n){var e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function Ze(t){return t.x}function Qe(t){return t.y}function Je(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]}function Ke(t){return(t=Je(Math.abs(t)))?t[1]:NaN}function tr(t){return new nr(t)}function nr(t){if(!(n=ud.exec(t)))throw new Error("invalid format: "+t);var n;this.fill=n[1]||" ",this.align=n[2]||">",this.sign=n[3]||"-",this.symbol=n[4]||"",this.zero=!!n[5],this.width=n[6]&&+n[6],this.comma=!!n[7],this.precision=n[8]&&+n[8].slice(1),this.trim=!!n[9],this.type=n[10]||""}function er(t,n){var e=Je(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}function rr(t){return t}function ir(t){function n(t){function n(t){var n,r,a,s=y,x=_;if("c"===g)x=b(t)+x,t="";else{var w=(t=+t)<0;if(t=b(Math.abs(t),p),v&&(t=function(t){t:for(var n,e=t.length,r=1,i=-1;r<e;++r)switch(t[r]){case".":i=n=r;break;case"0":0===i&&(i=r),n=r;break;default:if(i>0){if(!+t[r])break t;i=0}}return i>0?t.slice(0,i)+t.slice(n+1):t}(t)),w&&0==+t&&(w=!1),s=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+s,x=("s"===g?ld[8+fd/3]:"")+x+(w&&"("===c?")":""),m)for(n=-1,r=t.length;++n<r;)if(48>(a=t.charCodeAt(n))||a>57){x=(46===a?i+t.slice(n+1):t.slice(n))+x,t=t.slice(0,n);break}}d&&!l&&(t=e(t,1/0));var M=s.length+t.length+x.length,A=M<h?new Array(h-M+1).join(u):"";switch(d&&l&&(t=e(A+t,A.length?h-x.length:1/0),A=""),f){case"<":t=s+t+x+A;break;case"=":t=s+A+t+x;break;case"^":t=A.slice(0,M=A.length>>1)+s+t+x+A.slice(M);break;default:t=A+s+t+x}return o(t)}var u=(t=tr(t)).fill,f=t.align,c=t.sign,s=t.symbol,l=t.zero,h=t.width,d=t.comma,p=t.precision,v=t.trim,g=t.type;"n"===g?(d=!0,g="g"):sd[g]||(null==p&&(p=12),v=!0,g="g"),(l||"0"===u&&"="===f)&&(l=!0,u="0",f="=");var y="$"===s?r[0]:"#"===s&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",_="$"===s?r[1]:/[%p]/.test(g)?a:"",b=sd[g],m=/[defgprs%]/.test(g);return p=null==p?6:/[gprs]/.test(g)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p)),n.toString=function(){return t+""},n}var e=t.grouping&&t.thousands?function(t,n){return function(e,r){for(var i=e.length,o=[],a=0,u=t[0],f=0;i>0&&u>0&&(f+u+1>r&&(u=Math.max(1,r-f)),o.push(e.substring(i-=u,i+u)),!((f+=u+1)>r));)u=t[a=(a+1)%t.length];return o.reverse().join(n)}}(t.grouping,t.thousands):rr,r=t.currency,i=t.decimal,o=t.numerals?function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}}(t.numerals):rr,a=t.percent||"%";return{format:n,formatPrefix:function(t,e){var r=n((t=tr(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(Ke(e)/3))),o=Math.pow(10,-i),a=ld[8+i/3];return function(t){return r(o*t)+a}}}}function or(n){return cd=ir(n),t.format=cd.format,t.formatPrefix=cd.formatPrefix,cd}function ar(t){return Math.max(0,-Ke(Math.abs(t)))}function ur(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ke(n)/3)))-Ke(Math.abs(t)))}function fr(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Ke(n)-Ke(t))+1}function cr(){return new sr}function sr(){this.reset()}function lr(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function hr(t){return t>1?0:t<-1?Gd:Math.acos(t)}function dr(t){return t>1?Vd:t<-1?-Vd:Math.asin(t)}function pr(t){return(t=ap(t/2))*t}function vr(){}function gr(t,n){t&&lp.hasOwnProperty(t.type)&&lp[t.type](t,n)}function yr(t,n,e){var r,i=-1,o=t.length-e;for(n.lineStart();++i<o;)r=t[i],n.point(r[0],r[1],r[2]);n.lineEnd()}function _r(t,n){var e=-1,r=t.length;for(n.polygonStart();++e<r;)yr(t[e],n,1);n.polygonEnd()}function br(t,n){t&&sp.hasOwnProperty(t.type)?sp[t.type](t,n):gr(t,n)}function mr(){pp.point=wr}function xr(){Mr(hd,dd)}function wr(t,n){pp.point=Mr,hd=t,dd=n,pd=t*=Qd,vd=np(n=(n*=Qd)/2+$d),gd=ap(n)}function Mr(t,n){n=(n*=Qd)/2+$d;var e=(t*=Qd)-pd,r=e>=0?1:-1,i=r*e,o=np(n),a=ap(n),u=gd*a,f=vd*o+u*np(i),c=u*r*ap(i);hp.add(tp(c,f)),pd=t,vd=o,gd=a}function Ar(t){return[tp(t[1],t[0]),dr(t[2])]}function Tr(t){var n=t[0],e=t[1],r=np(e);return[r*np(n),r*ap(n),ap(e)]}function Nr(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function Sr(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function Er(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function kr(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function Cr(t){var n=fp(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Pr(t,n){Td.push(Nd=[yd=t,bd=t]),n<_d&&(_d=n),n>md&&(md=n)}function zr(t,n){var e=Tr([t*Qd,n*Qd]);if(Ad){var r=Sr(Ad,e),i=Sr([r[1],-r[0],0],r);Cr(i),i=Ar(i);var o,a=t-xd,u=a>0?1:-1,f=i[0]*Zd*u,c=Jd(a)>180;c^(u*xd<f&&f<u*t)?(o=i[1]*Zd)>md&&(md=o):(f=(f+360)%360-180,c^(u*xd<f&&f<u*t)?(o=-i[1]*Zd)<_d&&(_d=o):(n<_d&&(_d=n),n>md&&(md=n))),c?t<xd?Or(yd,t)>Or(yd,bd)&&(bd=t):Or(t,bd)>Or(yd,bd)&&(yd=t):bd>=yd?(t<yd&&(yd=t),t>bd&&(bd=t)):t>xd?Or(yd,t)>Or(yd,bd)&&(bd=t):Or(t,bd)>Or(yd,bd)&&(yd=t)}else Td.push(Nd=[yd=t,bd=t]);n<_d&&(_d=n),n>md&&(md=n),Ad=e,xd=t}function Rr(){gp.point=zr}function Lr(){Nd[0]=yd,Nd[1]=bd,gp.point=Pr,Ad=null}function Dr(t,n){if(Ad){var e=t-xd;vp.add(Jd(e)>180?e+(e>0?360:-360):e)}else wd=t,Md=n;pp.point(t,n),zr(t,n)}function Ur(){pp.lineStart()}function qr(){Dr(wd,Md),pp.lineEnd(),Jd(vp)>Hd&&(yd=-(bd=180)),Nd[0]=yd,Nd[1]=bd,Ad=null}function Or(t,n){return(n-=t)<0?n+360:n}function Yr(t,n){return t[0]-n[0]}function Br(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}function Fr(t,n){t*=Qd;var e=np(n*=Qd);Ir(e*np(t),e*ap(t),ap(n))}function Ir(t,n,e){kd+=(t-kd)/++Sd,Cd+=(n-Cd)/Sd,Pd+=(e-Pd)/Sd}function jr(){yp.point=Hr}function Hr(t,n){t*=Qd;var e=np(n*=Qd);Bd=e*np(t),Fd=e*ap(t),Id=ap(n),yp.point=Xr,Ir(Bd,Fd,Id)}function Xr(t,n){t*=Qd;var e=np(n*=Qd),r=e*np(t),i=e*ap(t),o=ap(n),a=tp(fp((a=Fd*o-Id*i)*a+(a=Id*r-Bd*o)*a+(a=Bd*i-Fd*r)*a),Bd*r+Fd*i+Id*o);Ed+=a,zd+=a*(Bd+(Bd=r)),Rd+=a*(Fd+(Fd=i)),Ld+=a*(Id+(Id=o)),Ir(Bd,Fd,Id)}function Gr(){yp.point=Fr}function Vr(){yp.point=Wr}function $r(){Zr(Od,Yd),yp.point=Fr}function Wr(t,n){Od=t,Yd=n,t*=Qd,n*=Qd,yp.point=Zr;var e=np(n);Bd=e*np(t),Fd=e*ap(t),Id=ap(n),Ir(Bd,Fd,Id)}function Zr(t,n){t*=Qd;var e=np(n*=Qd),r=e*np(t),i=e*ap(t),o=ap(n),a=Fd*o-Id*i,u=Id*r-Bd*o,f=Bd*i-Fd*r,c=fp(a*a+u*u+f*f),s=dr(c),l=c&&-s/c;Dd+=l*a,Ud+=l*u,qd+=l*f,Ed+=s,zd+=s*(Bd+(Bd=r)),Rd+=s*(Fd+(Fd=i)),Ld+=s*(Id+(Id=o)),Ir(Bd,Fd,Id)}function Qr(t){return function(){return t}}function Jr(t,n){function e(e,r){return e=t(e,r),n(e[0],e[1])}return t.invert&&n.invert&&(e.invert=function(e,r){return(e=n.invert(e,r))&&t.invert(e[0],e[1])}),e}function Kr(t,n){return[t>Gd?t-Wd:t<-Gd?t+Wd:t,n]}function ti(t,n,e){return(t%=Wd)?n||e?Jr(ei(t),ri(n,e)):ei(t):n||e?ri(n,e):Kr}function ni(t){return function(n,e){return n+=t,[n>Gd?n-Wd:n<-Gd?n+Wd:n,e]}}function ei(t){var n=ni(t);return n.invert=ni(-t),n}function ri(t,n){function e(t,n){var e=np(n),u=np(t)*e,f=ap(t)*e,c=ap(n),s=c*r+u*i;return[tp(f*o-s*a,u*r-c*i),dr(s*o+f*a)]}var r=np(t),i=ap(t),o=np(n),a=ap(n);return e.invert=function(t,n){var e=np(n),u=np(t)*e,f=ap(t)*e,c=ap(n),s=c*o-f*a;return[tp(f*o+c*a,u*r+s*i),dr(s*r-u*i)]},e}function ii(t){function n(n){return n=t(n[0]*Qd,n[1]*Qd),n[0]*=Zd,n[1]*=Zd,n}return t=ti(t[0]*Qd,t[1]*Qd,t.length>2?t[2]*Qd:0),n.invert=function(n){return n=t.invert(n[0]*Qd,n[1]*Qd),n[0]*=Zd,n[1]*=Zd,n},n}function oi(t,n,e,r,i,o){if(e){var a=np(n),u=ap(n),f=r*e;null==i?(i=n+r*Wd,o=n-f/2):(i=ai(a,i),o=ai(a,o),(r>0?i<o:i>o)&&(i+=r*Wd));for(var c,s=i;r>0?s>o:s<o;s-=f)c=Ar([a,-u*np(s),-u*ap(s)]),t.point(c[0],c[1])}}function ai(t,n){(n=Tr(n))[0]-=t,Cr(n);var e=hr(-n[1]);return((-n[2]<0?-e:e)+Wd-Hd)%Wd}function ui(){var t,n=[];return{point:function(n,e){t.push([n,e])},lineStart:function(){n.push(t=[])},lineEnd:vr,rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}}function fi(t,n){return Jd(t[0]-n[0])<Hd&&Jd(t[1]-n[1])<Hd}function ci(t,n,e,r){this.x=t,this.z=n,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function si(t,n,e,r,i){var o,a,u=[],f=[];if(t.forEach(function(t){if(!((n=t.length-1)<=0)){var n,e,r=t[0],a=t[n];if(fi(r,a)){for(i.lineStart(),o=0;o<n;++o)i.point((r=t[o])[0],r[1]);i.lineEnd()}else u.push(e=new ci(r,t,null,!0)),f.push(e.o=new ci(r,null,e,!1)),u.push(e=new ci(a,t,null,!1)),f.push(e.o=new ci(a,null,e,!0))}}),u.length){for(f.sort(n),li(u),li(f),o=0,a=f.length;o<a;++o)f[o].e=e=!e;for(var c,s,l=u[0];;){for(var h=l,d=!0;h.v;)if((h=h.n)===l)return;c=h.z,i.lineStart();do{if(h.v=h.o.v=!0,h.e){if(d)for(o=0,a=c.length;o<a;++o)i.point((s=c[o])[0],s[1]);else r(h.x,h.n.x,1,i);h=h.n}else{if(d)for(c=h.p.z,o=c.length-1;o>=0;--o)i.point((s=c[o])[0],s[1]);else r(h.x,h.p.x,-1,i);h=h.p}c=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function li(t){if(n=t.length){for(var n,e,r=0,i=t[0];++r<n;)i.n=e=t[r],e.p=i,i=e;i.n=e=t[0],e.p=i}}function hi(t,n){var e=n[0],r=n[1],i=ap(r),o=[ap(e),-np(e),0],a=0,u=0;kp.reset(),1===i?r=Vd+Hd:-1===i&&(r=-Vd-Hd);for(var f=0,c=t.length;f<c;++f)if(l=(s=t[f]).length)for(var s,l,h=s[l-1],d=h[0],p=h[1]/2+$d,v=ap(p),g=np(p),y=0;y<l;++y,d=b,v=x,g=w,h=_){var _=s[y],b=_[0],m=_[1]/2+$d,x=ap(m),w=np(m),M=b-d,A=M>=0?1:-1,T=A*M,N=T>Gd,S=v*x;if(kp.add(tp(S*A*ap(T),g*w+S*np(T))),a+=N?M+A*Wd:M,N^d>=e^b>=e){var E=Sr(Tr(h),Tr(_));Cr(E);var k=Sr(o,E);Cr(k);var C=(N^M>=0?-1:1)*dr(k[2]);(r>C||r===C&&(E[0]||E[1]))&&(u+=N^M>=0?1:-1)}}return(a<-Hd||a<Hd&&kp<-Hd)^1&u}function di(t,n,e,r){return function(i){function o(n,e){t(n,e)&&i.point(n,e)}function a(t,n){v.point(t,n)}function u(){m.point=a,v.lineStart()}function f(){m.point=o,v.lineEnd()}function c(t,n){p.push([t,n]),_.point(t,n)}function s(){_.lineStart(),p=[]}function l(){c(p[0][0],p[0][1]),_.lineEnd();var t,n,e,r,o=_.clean(),a=g.result(),u=a.length;if(p.pop(),h.push(p),p=null,u)if(1&o){if(e=a[0],(n=e.length-1)>0){for(b||(i.polygonStart(),b=!0),i.lineStart(),t=0;t<n;++t)i.point((r=e[t])[0],r[1]);i.lineEnd()}}else u>1&&2&o&&a.push(a.pop().concat(a.shift())),d.push(a.filter(pi))}var h,d,p,v=n(i),g=ui(),_=n(g),b=!1,m={point:o,lineStart:u,lineEnd:f,polygonStart:function(){m.point=c,m.lineStart=s,m.lineEnd=l,d=[],h=[]},polygonEnd:function(){m.point=o,m.lineStart=u,m.lineEnd=f,d=y(d);var t=hi(h,r);d.length?(b||(i.polygonStart(),b=!0),si(d,vi,t,e,i)):t&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),d=h=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}};return m}}function pi(t){return t.length>1}function vi(t,n){return((t=t.x)[0]<0?t[1]-Vd-Hd:Vd-t[1])-((n=n.x)[0]<0?n[1]-Vd-Hd:Vd-n[1])}function gi(t){function n(t,n){return np(t)*np(n)>i}function e(t,n,e){var r=[1,0,0],o=Sr(Tr(t),Tr(n)),a=Nr(o,o),u=o[0],f=a-u*u;if(!f)return!e&&t;var c=i*a/f,s=-i*u/f,l=Sr(r,o),h=kr(r,c);Er(h,kr(o,s));var d=l,p=Nr(h,d),v=Nr(d,d),g=p*p-v*(Nr(h,h)-1);if(!(g<0)){var y=fp(g),_=kr(d,(-p-y)/v);if(Er(_,h),_=Ar(_),!e)return _;var b,m=t[0],x=n[0],w=t[1],M=n[1];x<m&&(b=m,m=x,x=b);var A=x-m,T=Jd(A-Gd)<Hd;if(!T&&M<w&&(b=w,w=M,M=b),T||A<Hd?T?w+M>0^_[1]<(Jd(_[0]-m)<Hd?w:M):w<=_[1]&&_[1]<=M:A>Gd^(m<=_[0]&&_[0]<=x)){var N=kr(d,(-p+y)/v);return Er(N,h),[_,Ar(N)]}}}function r(n,e){var r=a?t:Gd-t,i=0;return n<-r?i|=1:n>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var i=np(t),o=6*Qd,a=i>0,u=Jd(i)>Hd;return di(n,function(t){var i,o,f,c,s;return{lineStart:function(){c=f=!1,s=1},point:function(l,h){var d,p=[l,h],v=n(l,h),g=a?v?0:r(l,h):v?r(l+(l<0?Gd:-Gd),h):0;if(!i&&(c=f=v)&&t.lineStart(),v!==f&&(!(d=e(i,p))||fi(i,d)||fi(p,d))&&(p[0]+=Hd,p[1]+=Hd,v=n(p[0],p[1])),v!==f)s=0,v?(t.lineStart(),d=e(p,i),t.point(d[0],d[1])):(d=e(i,p),t.point(d[0],d[1]),t.lineEnd()),i=d;else if(u&&i&&a^v){var y;g&o||!(y=e(p,i,!0))||(s=0,a?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!v||i&&fi(i,p)||t.point(p[0],p[1]),i=p,f=v,o=g},lineEnd:function(){f&&t.lineEnd(),i=null},clean:function(){return s|(c&&f)<<1}}},function(n,e,r,i){oi(i,t,o,r,n,e)},a?[0,-t]:[-Gd,t-Gd])}function yi(t,n,e,r){function i(i,o){return t<=i&&i<=e&&n<=o&&o<=r}function o(i,o,u,c){var s=0,l=0;if(null==i||(s=a(i,u))!==(l=a(o,u))||f(i,o)<0^u>0)do{c.point(0===s||3===s?t:e,s>1?r:n)}while((s=(s+u+4)%4)!==l);else c.point(o[0],o[1])}function a(r,i){return Jd(r[0]-t)<Hd?i>0?0:3:Jd(r[0]-e)<Hd?i>0?2:1:Jd(r[1]-n)<Hd?i>0?1:0:i>0?3:2}function u(t,n){return f(t.x,n.x)}function f(t,n){var e=a(t,1),r=a(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(a){function f(t,n){i(t,n)&&w.point(t,n)}function c(o,a){var u=i(o,a);if(l&&h.push([o,a]),m)d=o,p=a,v=u,m=!1,u&&(w.lineStart(),w.point(o,a));else if(u&&b)w.point(o,a);else{var f=[g=Math.max(zp,Math.min(Pp,g)),_=Math.max(zp,Math.min(Pp,_))],c=[o=Math.max(zp,Math.min(Pp,o)),a=Math.max(zp,Math.min(Pp,a))];!function(t,n,e,r,i,o){var a,u=t[0],f=t[1],c=0,s=1,l=n[0]-u,h=n[1]-f;if(a=e-u,l||!(a>0)){if(a/=l,l<0){if(a<c)return;a<s&&(s=a)}else if(l>0){if(a>s)return;a>c&&(c=a)}if(a=i-u,l||!(a<0)){if(a/=l,l<0){if(a>s)return;a>c&&(c=a)}else if(l>0){if(a<c)return;a<s&&(s=a)}if(a=r-f,h||!(a>0)){if(a/=h,h<0){if(a<c)return;a<s&&(s=a)}else if(h>0){if(a>s)return;a>c&&(c=a)}if(a=o-f,h||!(a<0)){if(a/=h,h<0){if(a>s)return;a>c&&(c=a)}else if(h>0){if(a<c)return;a<s&&(s=a)}return c>0&&(t[0]=u+c*l,t[1]=f+c*h),s<1&&(n[0]=u+s*l,n[1]=f+s*h),!0}}}}}(f,c,t,n,e,r)?u&&(w.lineStart(),w.point(o,a),x=!1):(b||(w.lineStart(),w.point(f[0],f[1])),w.point(c[0],c[1]),u||w.lineEnd(),x=!1)}g=o,_=a,b=u}var s,l,h,d,p,v,g,_,b,m,x,w=a,M=ui(),A={point:f,lineStart:function(){A.point=c,l&&l.push(h=[]),m=!0,b=!1,g=_=NaN},lineEnd:function(){s&&(c(d,p),v&&b&&M.rejoin(),s.push(M.result())),A.point=f,b&&w.lineEnd()},polygonStart:function(){w=M,s=[],l=[],x=!0},polygonEnd:function(){var n=function(){for(var n=0,e=0,i=l.length;e<i;++e)for(var o,a,u=l[e],f=1,c=u.length,s=u[0],h=s[0],d=s[1];f<c;++f)o=h,a=d,h=(s=u[f])[0],d=s[1],a<=r?d>r&&(h-o)*(r-a)>(d-a)*(t-o)&&++n:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--n;return n}(),e=x&&n,i=(s=y(s)).length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&si(s,u,n,o,a),a.polygonEnd()),w=a,s=l=h=null}};return A}}function _i(){Lp.point=Lp.lineEnd=vr}function bi(t,n){_p=t*=Qd,bp=ap(n*=Qd),mp=np(n),Lp.point=mi}function mi(t,n){t*=Qd;var e=ap(n*=Qd),r=np(n),i=Jd(t-_p),o=np(i),a=r*ap(i),u=mp*e-bp*r*o,f=bp*e+mp*r*o;Rp.add(tp(fp(a*a+u*u),f)),_p=t,bp=e,mp=r}function xi(t){return Rp.reset(),br(t,Lp),+Rp}function wi(t,n){return Dp[0]=t,Dp[1]=n,xi(Up)}function Mi(t,n){return!(!t||!Op.hasOwnProperty(t.type))&&Op[t.type](t,n)}function Ai(t,n){return 0===wi(t,n)}function Ti(t,n){var e=wi(t[0],t[1]);return wi(t[0],n)+wi(n,t[1])<=e+Hd}function Ni(t,n){return!!hi(t.map(Si),Ei(n))}function Si(t){return(t=t.map(Ei)).pop(),t}function Ei(t){return[t[0]*Qd,t[1]*Qd]}function ki(t,n,e){var r=s(t,n-Hd,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function Ci(t,n,e){var r=s(t,n-Hd,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function Pi(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return s(ep(o/y)*y,i,y).map(d).concat(s(ep(c/_)*_,f,_).map(p)).concat(s(ep(r/v)*v,e,v).filter(function(t){return Jd(t%y)>Hd}).map(l)).concat(s(ep(u/g)*g,a,g).filter(function(t){return Jd(t%_)>Hd}).map(h))}var e,r,i,o,a,u,f,c,l,h,d,p,v=10,g=v,y=90,_=360,b=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[d(o).concat(p(f).slice(1),d(i).reverse().slice(1),p(c).reverse().slice(1))]}},t.extent=function(n){return arguments.length?t.extentMajor(n).extentMinor(n):t.extentMinor()},t.extentMajor=function(n){return arguments.length?(o=+n[0][0],i=+n[1][0],c=+n[0][1],f=+n[1][1],o>i&&(n=o,o=i,i=n),c>f&&(n=c,c=f,f=n),t.precision(b)):[[o,c],[i,f]]},t.extentMinor=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],u=+n[0][1],a=+n[1][1],r>e&&(n=r,r=e,e=n),u>a&&(n=u,u=a,a=n),t.precision(b)):[[r,u],[e,a]]},t.step=function(n){return arguments.length?t.stepMajor(n).stepMinor(n):t.stepMinor()},t.stepMajor=function(n){return arguments.length?(y=+n[0],_=+n[1],t):[y,_]},t.stepMinor=function(n){return arguments.length?(v=+n[0],g=+n[1],t):[v,g]},t.precision=function(n){return arguments.length?(b=+n,l=ki(u,a,90),h=Ci(r,e,b),d=ki(c,f,90),p=Ci(o,i,b),t):b},t.extentMajor([[-180,-90+Hd],[180,90-Hd]]).extentMinor([[-180,-80-Hd],[180,80+Hd]])}function zi(t){return t}function Ri(){Fp.point=Li}function Li(t,n){Fp.point=Di,xp=Mp=t,wp=Ap=n}function Di(t,n){Bp.add(Ap*t-Mp*n),Mp=t,Ap=n}function Ui(){Di(xp,wp)}function qi(t,n){Vp+=t,$p+=n,++Wp}function Oi(){ev.point=Yi}function Yi(t,n){ev.point=Bi,qi(Sp=t,Ep=n)}function Bi(t,n){var e=t-Sp,r=n-Ep,i=fp(e*e+r*r);Zp+=i*(Sp+t)/2,Qp+=i*(Ep+n)/2,Jp+=i,qi(Sp=t,Ep=n)}function Fi(){ev.point=qi}function Ii(){ev.point=Hi}function ji(){Xi(Tp,Np)}function Hi(t,n){ev.point=Xi,qi(Tp=Sp=t,Np=Ep=n)}function Xi(t,n){var e=t-Sp,r=n-Ep,i=fp(e*e+r*r);Zp+=i*(Sp+t)/2,Qp+=i*(Ep+n)/2,Jp+=i,Kp+=(i=Ep*t-Sp*n)*(Sp+t),tv+=i*(Ep+n),nv+=3*i,qi(Sp=t,Ep=n)}function Gi(t){this._context=t}function Vi(t,n){cv.point=$i,iv=av=t,ov=uv=n}function $i(t,n){av-=t,uv-=n,fv.add(fp(av*av+uv*uv)),av=t,uv=n}function Wi(){this._string=[]}function Zi(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Qi(t){return function(n){var e=new Ji;for(var r in t)e[r]=t[r];return e.stream=n,e}}function Ji(){}function Ki(t,n,e){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),br(e,t.stream(Gp)),n(Gp.result()),null!=r&&t.clipExtent(r),t}function to(t,n,e){return Ki(t,function(e){var r=n[1][0]-n[0][0],i=n[1][1]-n[0][1],o=Math.min(r/(e[1][0]-e[0][0]),i/(e[1][1]-e[0][1])),a=+n[0][0]+(r-o*(e[1][0]+e[0][0]))/2,u=+n[0][1]+(i-o*(e[1][1]+e[0][1]))/2;t.scale(150*o).translate([a,u])},e)}function no(t,n,e){return to(t,[[0,0],n],e)}function eo(t,n,e){return Ki(t,function(e){var r=+n,i=r/(e[1][0]-e[0][0]),o=(r-i*(e[1][0]+e[0][0]))/2,a=-i*e[0][1];t.scale(150*i).translate([o,a])},e)}function ro(t,n,e){return Ki(t,function(e){var r=+n,i=r/(e[1][1]-e[0][1]),o=-i*e[0][0],a=(r-i*(e[1][1]+e[0][1]))/2;t.scale(150*i).translate([o,a])},e)}function io(t,n){return+n?function(t,n){function e(r,i,o,a,u,f,c,s,l,h,d,p,v,g){var y=c-r,_=s-i,b=y*y+_*_;if(b>4*n&&v--){var m=a+h,x=u+d,w=f+p,M=fp(m*m+x*x+w*w),A=dr(w/=M),T=Jd(Jd(w)-1)<Hd||Jd(o-l)<Hd?(o+l)/2:tp(x,m),N=t(T,A),S=N[0],E=N[1],k=S-r,C=E-i,P=_*k-y*C;(P*P/b>n||Jd((y*k+_*C)/b-.5)>.3||a*h+u*d+f*p<lv)&&(e(r,i,o,a,u,f,S,E,T,m/=M,x/=M,w,v,g),g.point(S,E),e(S,E,T,m,x,w,c,s,l,h,d,p,v,g))}}return function(n){function r(e,r){e=t(e,r),n.point(e[0],e[1])}function i(){y=NaN,w.point=o,n.lineStart()}function o(r,i){var o=Tr([r,i]),a=t(r,i);e(y,_,g,b,m,x,y=a[0],_=a[1],g=r,b=o[0],m=o[1],x=o[2],sv,n),n.point(y,_)}function a(){w.point=r,n.lineEnd()}function u(){i(),w.point=f,w.lineEnd=c}function f(t,n){o(s=t,n),l=y,h=_,d=b,p=m,v=x,w.point=o}function c(){e(y,_,g,b,m,x,l,h,s,d,p,v,sv,n),w.lineEnd=a,a()}var s,l,h,d,p,v,g,y,_,b,m,x,w={point:r,lineStart:i,lineEnd:a,polygonStart:function(){n.polygonStart(),w.lineStart=u},polygonEnd:function(){n.polygonEnd(),w.lineStart=i}};return w}}(t,n):function(t){return Qi({point:function(n,e){n=t(n,e),this.stream.point(n[0],n[1])}})}(t)}function oo(t,n,e,r){function i(t,r){return[u*t-f*r+n,e-f*t-u*r]}var o=np(r),a=ap(r),u=o*t,f=a*t,c=o/t,s=a/t,l=(a*e-o*n)/t,h=(a*n+o*e)/t;return i.invert=function(t,n){return[c*t-s*n+l,h-s*t-c*n]},i}function ao(t){return uo(function(){return t})()}function uo(t){function n(t){return l(t[0]*Qd,t[1]*Qd)}function e(){var t=oo(p,0,0,w).apply(null,i(y,_)),n=(w?oo:function(t,n,e){function r(r,i){return[n+t*r,e-t*i]}return r.invert=function(r,i){return[(r-n)/t,(e-i)/t]},r})(p,v-t[0],g-t[1],w);return o=ti(b,m,x),s=Jr(i,n),l=Jr(o,s),c=io(s,S),r()}function r(){return h=d=null,n}var i,o,a,u,f,c,s,l,h,d,p=150,v=480,g=250,y=0,_=0,b=0,m=0,x=0,w=0,M=null,A=Cp,T=null,N=zi,S=.5;return n.stream=function(t){return h&&d===t?h:h=hv(function(t){return Qi({point:function(n,e){var r=t(n,e);return this.stream.point(r[0],r[1])}})}(o)(A(c(N(d=t)))))},n.preclip=function(t){return arguments.length?(A=t,M=void 0,r()):A},n.postclip=function(t){return arguments.length?(N=t,T=a=u=f=null,r()):N},n.clipAngle=function(t){return arguments.length?(A=+t?gi(M=t*Qd):(M=null,Cp),r()):M*Zd},n.clipExtent=function(t){return arguments.length?(N=null==t?(T=a=u=f=null,zi):yi(T=+t[0][0],a=+t[0][1],u=+t[1][0],f=+t[1][1]),r()):null==T?null:[[T,a],[u,f]]},n.scale=function(t){return arguments.length?(p=+t,e()):p},n.translate=function(t){return arguments.length?(v=+t[0],g=+t[1],e()):[v,g]},n.center=function(t){return arguments.length?(y=t[0]%360*Qd,_=t[1]%360*Qd,e()):[y*Zd,_*Zd]},n.rotate=function(t){return arguments.length?(b=t[0]%360*Qd,m=t[1]%360*Qd,x=t.length>2?t[2]%360*Qd:0,e()):[b*Zd,m*Zd,x*Zd]},n.angle=function(t){return arguments.length?(w=t%360*Qd,e()):w*Zd},n.precision=function(t){return arguments.length?(c=io(s,S=t*t),r()):fp(S)},n.fitExtent=function(t,e){return to(n,t,e)},n.fitSize=function(t,e){return no(n,t,e)},n.fitWidth=function(t,e){return eo(n,t,e)},n.fitHeight=function(t,e){return ro(n,t,e)},function(){return i=t.apply(this,arguments),n.invert=i.invert&&function(t){return(t=l.invert(t[0],t[1]))&&[t[0]*Zd,t[1]*Zd]},e()}}function fo(t){var n=0,e=Gd/3,r=uo(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*Qd,e=t[1]*Qd):[n*Zd,e*Zd]},i}function co(t,n){function e(t,n){var e=fp(o-2*i*ap(n))/i;return[e*ap(t*=i),a-e*np(t)]}var r=ap(t),i=(r+ap(n))/2;if(Jd(i)<Hd)return function(t){function n(t,n){return[t*e,ap(n)/e]}var e=np(t);return n.invert=function(t,n){return[t/e,dr(n*e)]},n}(t);var o=1+r*(2*i-r),a=fp(o)/i;return e.invert=function(t,n){var e=a-n;return[tp(t,Jd(e))/i*up(e),dr((o-(t*t+e*e)*i*i)/(2*i))]},e}function so(){return fo(co).scale(155.424).center([0,33.6442])}function lo(){return so().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function ho(t){return function(n,e){var r=np(n),i=np(e),o=t(r*i);return[o*i*ap(n),o*ap(e)]}}function po(t){return function(n,e){var r=fp(n*n+e*e),i=t(r),o=ap(i),a=np(i);return[tp(n*o,r*a),dr(r&&e*o/r)]}}function vo(t,n){return[t,ip(cp((Vd+n)/2))]}function go(t){function n(){var n=Gd*u(),a=o(ii(o.rotate()).invert([0,0]));return c(null==s?[[a[0]-n,a[1]-n],[a[0]+n,a[1]+n]]:t===vo?[[Math.max(a[0]-n,s),e],[Math.min(a[0]+n,r),i]]:[[s,Math.max(a[1]-n,e)],[r,Math.min(a[1]+n,i)]])}var e,r,i,o=ao(t),a=o.center,u=o.scale,f=o.translate,c=o.clipExtent,s=null;return o.scale=function(t){return arguments.length?(u(t),n()):u()},o.translate=function(t){return arguments.length?(f(t),n()):f()},o.center=function(t){return arguments.length?(a(t),n()):a()},o.clipExtent=function(t){return arguments.length?(null==t?s=e=r=i=null:(s=+t[0][0],e=+t[0][1],r=+t[1][0],i=+t[1][1]),n()):null==s?null:[[s,e],[r,i]]},n()}function yo(t){return cp((Vd+t)/2)}function _o(t,n){function e(t,n){o>0?n<-Vd+Hd&&(n=-Vd+Hd):n>Vd-Hd&&(n=Vd-Hd);var e=o/op(yo(n),i);return[e*ap(i*t),o-e*np(i*t)]}var r=np(t),i=t===n?ap(t):ip(r/np(n))/ip(yo(n)/yo(t)),o=r*op(yo(t),i)/i;return i?(e.invert=function(t,n){var e=o-n,r=up(i)*fp(t*t+e*e);return[tp(t,Jd(e))/i*up(e),2*Kd(op(o/r,1/i))-Vd]},e):vo}function bo(t,n){return[t,n]}function mo(t,n){function e(t,n){var e=o-n,r=i*t;return[e*ap(r),o-e*np(r)]}var r=np(t),i=t===n?ap(t):(r-np(n))/(n-t),o=r/i+t;return Jd(i)<Hd?bo:(e.invert=function(t,n){var e=o-n;return[tp(t,Jd(e))/i*up(e),o-up(i)*fp(t*t+e*e)]},e)}function xo(t,n){var e=np(n),r=np(t)*e;return[e*ap(t)/r,ap(n)/r]}function wo(t,n,e,r){return 1===t&&1===n&&0===e&&0===r?zi:Qi({point:function(i,o){this.stream.point(i*t+e,o*n+r)}})}function Mo(t,n){var e=n*n,r=e*e;return[t*(.8707-.131979*e+r*(r*(.003971*e-.001529*r)-.013791)),n*(1.007226+e*(.015085+r*(.028874*e-.044475-.005916*r)))]}function Ao(t,n){return[np(n)*ap(t),ap(n)]}function To(t,n){var e=np(n),r=1+np(t)*e;return[e*ap(t)/r,ap(n)/r]}function No(t,n){return[ip(cp((Vd+n)/2)),-t]}function So(t,n){return t.parent===n.parent?1:2}function Eo(t,n){return t+n.x}function ko(t,n){return Math.max(t,n.y)}function Co(t){var n=0,e=t.children,r=e&&e.length;if(r)for(;--r>=0;)n+=e[r].value;else n=1;t.value=n}function Po(t,n){var e,r,i,o,a,u=new Do(t),f=+t.value&&(u.value=t.value),c=[u];for(null==n&&(n=zo);e=c.pop();)if(f&&(e.value=+e.data.value),(i=n(e.data))&&(a=i.length))for(e.children=new Array(a),o=a-1;o>=0;--o)c.push(r=e.children[o]=new Do(i[o])),r.parent=e,r.depth=e.depth+1;return u.eachBefore(Lo)}function zo(t){return t.children}function Ro(t){t.data=t.data.data}function Lo(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function Do(t){this.data=t,this.depth=this.height=0,this.parent=null}function Uo(t){for(var n,e,r=0,i=(t=function(t){for(var n,e,r=t.length;r;)e=Math.random()*r--|0,n=t[r],t[r]=t[e],t[e]=n;return t}(vv.call(t))).length,o=[];r<i;)n=t[r],e&&Oo(e,n)?++r:(e=function(t){switch(t.length){case 1:return function(t){return{x:t.x,y:t.y,r:t.r}}(t[0]);case 2:return Bo(t[0],t[1]);case 3:return Fo(t[0],t[1],t[2])}}(o=function(t,n){var e,r;if(Yo(n,t))return[n];for(e=0;e<t.length;++e)if(qo(n,t[e])&&Yo(Bo(t[e],n),t))return[t[e],n];for(e=0;e<t.length-1;++e)for(r=e+1;r<t.length;++r)if(qo(Bo(t[e],t[r]),n)&&qo(Bo(t[e],n),t[r])&&qo(Bo(t[r],n),t[e])&&Yo(Fo(t[e],t[r],n),t))return[t[e],t[r],n];throw new Error}(o,n)),r=0);return e}function qo(t,n){var e=t.r-n.r,r=n.x-t.x,i=n.y-t.y;return e<0||e*e<r*r+i*i}function Oo(t,n){var e=t.r-n.r+1e-6,r=n.x-t.x,i=n.y-t.y;return e>0&&e*e>r*r+i*i}function Yo(t,n){for(var e=0;e<n.length;++e)if(!Oo(t,n[e]))return!1;return!0}function Bo(t,n){var e=t.x,r=t.y,i=t.r,o=n.x,a=n.y,u=n.r,f=o-e,c=a-r,s=u-i,l=Math.sqrt(f*f+c*c);return{x:(e+o+f/l*s)/2,y:(r+a+c/l*s)/2,r:(l+i+u)/2}}function Fo(t,n,e){var r=t.x,i=t.y,o=t.r,a=n.x,u=n.y,f=n.r,c=e.x,s=e.y,l=e.r,h=r-a,d=r-c,p=i-u,v=i-s,g=f-o,y=l-o,_=r*r+i*i-o*o,b=_-a*a-u*u+f*f,m=_-c*c-s*s+l*l,x=d*p-h*v,w=(p*m-v*b)/(2*x)-r,M=(v*g-p*y)/x,A=(d*b-h*m)/(2*x)-i,T=(h*y-d*g)/x,N=M*M+T*T-1,S=2*(o+w*M+A*T),E=w*w+A*A-o*o,k=-(N?(S+Math.sqrt(S*S-4*N*E))/(2*N):E/S);return{x:r+w+M*k,y:i+A+T*k,r:k}}function Io(t,n,e){var r,i,o,a,u=t.x-n.x,f=t.y-n.y,c=u*u+f*f;c?(i=n.r+e.r,i*=i,a=t.r+e.r,i>(a*=a)?(r=(c+a-i)/(2*c),o=Math.sqrt(Math.max(0,a/c-r*r)),e.x=t.x-r*u-o*f,e.y=t.y-r*f+o*u):(r=(c+i-a)/(2*c),o=Math.sqrt(Math.max(0,i/c-r*r)),e.x=n.x+r*u-o*f,e.y=n.y+r*f+o*u)):(e.x=n.x+e.r,e.y=n.y)}function jo(t,n){var e=t.r+n.r-1e-6,r=n.x-t.x,i=n.y-t.y;return e>0&&e*e>r*r+i*i}function Ho(t){var n=t._,e=t.next._,r=n.r+e.r,i=(n.x*e.r+e.x*n.r)/r,o=(n.y*e.r+e.y*n.r)/r;return i*i+o*o}function Xo(t){this._=t,this.next=null,this.previous=null}function Go(t){if(!(i=t.length))return 0;var n,e,r,i,o,a,u,f,c,s,l;if(n=t[0],n.x=0,n.y=0,!(i>1))return n.r;if(e=t[1],n.x=-e.r,e.x=n.r,e.y=0,!(i>2))return n.r+e.r;Io(e,n,r=t[2]),n=new Xo(n),e=new Xo(e),r=new Xo(r),n.next=r.previous=e,e.next=n.previous=r,r.next=e.previous=n;t:for(u=3;u<i;++u){Io(n._,e._,r=t[u]),r=new Xo(r),f=e.next,c=n.previous,s=e._.r,l=n._.r;do{if(s<=l){if(jo(f._,r._)){e=f,n.next=e,e.previous=n,--u;continue t}s+=f._.r,f=f.next}else{if(jo(c._,r._)){(n=c).next=e,e.previous=n,--u;continue t}l+=c._.r,c=c.previous}}while(f!==c.next);for(r.previous=n,r.next=e,n.next=e.previous=e=r,o=Ho(n);(r=r.next)!==e;)(a=Ho(r))<o&&(n=r,o=a);e=n.next}for(n=[e._],r=e;(r=r.next)!==e;)n.push(r._);for(r=Uo(n),u=0;u<i;++u)n=t[u],n.x-=r.x,n.y-=r.y;return r.r}function Vo(t){if("function"!=typeof t)throw new Error;return t}function $o(){return 0}function Wo(t){return function(){return t}}function Zo(t){return Math.sqrt(t.value)}function Qo(t){return function(n){n.children||(n.r=Math.max(0,+t(n)||0))}}function Jo(t,n){return function(e){if(r=e.children){var r,i,o,a=r.length,u=t(e)*n||0;if(u)for(i=0;i<a;++i)r[i].r+=u;if(o=Go(r),u)for(i=0;i<a;++i)r[i].r-=u;e.r=o+u}}}function Ko(t){return function(n){var e=n.parent;n.r*=t,e&&(n.x=e.x+t*n.x,n.y=e.y+t*n.y)}}function ta(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function na(t,n,e,r,i){for(var o,a=t.children,u=-1,f=a.length,c=t.value&&(r-n)/t.value;++u<f;)(o=a[u]).y0=e,o.y1=i,o.x0=n,o.x1=n+=o.value*c}function ea(t){return t.id}function ra(t){return t.parentId}function ia(t,n){return t.parent===n.parent?1:2}function oa(t){var n=t.children;return n?n[0]:t.t}function aa(t){var n=t.children;return n?n[n.length-1]:t.t}function ua(t,n,e){var r=e/(n.i-t.i);n.c-=r,n.s+=e,t.c+=r,n.z+=e,n.m+=e}function fa(t,n,e){return t.a.parent===n.parent?t.a:e}function ca(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}function sa(t,n,e,r,i){for(var o,a=t.children,u=-1,f=a.length,c=t.value&&(i-e)/t.value;++u<f;)(o=a[u]).x0=n,o.x1=r,o.y0=e,o.y1=e+=o.value*c}function la(t,n,e,r,i,o){for(var a,u,f,c,s,l,h,d,p,v,g,y=[],_=n.children,b=0,m=0,x=_.length,w=n.value;b<x;){f=i-e,c=o-r;do{s=_[m++].value}while(!s&&m<x);for(l=h=s,g=s*s*(v=Math.max(c/f,f/c)/(w*t)),p=Math.max(h/g,g/l);m<x;++m){if(s+=u=_[m].value,u<l&&(l=u),u>h&&(h=u),g=s*s*v,(d=Math.max(h/g,g/l))>p){s-=u;break}p=d}y.push(a={value:s,dice:f<c,children:_.slice(b,m)}),a.dice?na(a,e,r,i,w?r+=c*s/w:o):sa(a,e,r,w?e+=f*s/w:i,o),w-=s,b=m}return y}function ha(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])}function da(t,n){return t[0]-n[0]||t[1]-n[1]}function pa(t){for(var n=t.length,e=[0,1],r=2,i=2;i<n;++i){for(;r>1&&ha(t[e[r-2]],t[e[r-1]],t[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function va(){return Math.random()}function ga(t){function n(n){var o=n+"",a=e.get(o);if(!a){if(i!==Pv)return i;e.set(o,a=r.push(n))}return t[(a-1)%t.length]}var e=he(),r=[],i=Pv;return t=null==t?[]:Cv.call(t),n.domain=function(t){if(!arguments.length)return r.slice();r=[],e=he();for(var i,o,a=-1,u=t.length;++a<u;)e.has(o=(i=t[a])+"")||e.set(o,r.push(i));return n},n.range=function(e){return arguments.length?(t=Cv.call(e),n):t.slice()},n.unknown=function(t){return arguments.length?(i=t,n):i},n.copy=function(){return ga().domain(r).range(t).unknown(i)},n}function ya(){function t(){var t=i().length,r=a[1]<a[0],h=a[r-0],d=a[1-r];n=(d-h)/Math.max(1,t-f+2*c),u&&(n=Math.floor(n)),h+=(d-h-n*(t-f))*l,e=n*(1-f),u&&(h=Math.round(h),e=Math.round(e));var p=s(t).map(function(t){return h+n*t});return o(r?p.reverse():p)}var n,e,r=ga().unknown(void 0),i=r.domain,o=r.range,a=[0,1],u=!1,f=0,c=0,l=.5;return delete r.unknown,r.domain=function(n){return arguments.length?(i(n),t()):i()},r.range=function(n){return arguments.length?(a=[+n[0],+n[1]],t()):a.slice()},r.rangeRound=function(n){return a=[+n[0],+n[1]],u=!0,t()},r.bandwidth=function(){return e},r.step=function(){return n},r.round=function(n){return arguments.length?(u=!!n,t()):u},r.padding=function(n){return arguments.length?(f=c=Math.max(0,Math.min(1,n)),t()):f},r.paddingInner=function(n){return arguments.length?(f=Math.max(0,Math.min(1,n)),t()):f},r.paddingOuter=function(n){return arguments.length?(c=Math.max(0,Math.min(1,n)),t()):c},r.align=function(n){return arguments.length?(l=Math.max(0,Math.min(1,n)),t()):l},r.copy=function(){return ya().domain(i()).range(a).round(u).paddingInner(f).paddingOuter(c).align(l)},t()}function _a(t){var n=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,delete t.paddingOuter,t.copy=function(){return _a(n())},t}function ba(t){return function(){return t}}function ma(t){return+t}function xa(t,n){return(n-=t=+t)?function(e){return(e-t)/n}:ba(n)}function wa(t,n,e,r){var i=t[0],o=t[1],a=n[0],u=n[1];return o<i?(i=e(o,i),a=r(u,a)):(i=e(i,o),a=r(a,u)),function(t){return a(i(t))}}function Ma(t,n,e,r){var i=Math.min(t.length,n.length)-1,o=new Array(i),a=new Array(i),u=-1;for(t[i]<t[0]&&(t=t.slice().reverse(),n=n.slice().reverse());++u<i;)o[u]=e(t[u],t[u+1]),a[u]=r(n[u],n[u+1]);return function(n){var e=Kc(t,n,1,i)-1;return a[e](o[e](n))}}function Aa(t,n){return n.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp())}function Ta(t,n){function e(){return i=Math.min(u.length,f.length)>2?Ma:wa,o=a=null,r}function r(n){return(o||(o=i(u,f,s?function(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=n?0:t>=e?1:r(t)}}}(t):t,c)))(+n)}var i,o,a,u=zv,f=zv,c=dn,s=!1;return r.invert=function(t){return(a||(a=i(f,u,xa,s?function(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}(n):n)))(+t)},r.domain=function(t){return arguments.length?(u=kv.call(t,ma),e()):u.slice()},r.range=function(t){return arguments.length?(f=Cv.call(t),e()):f.slice()},r.rangeRound=function(t){return f=Cv.call(t),c=pn,e()},r.clamp=function(t){return arguments.length?(s=!!t,e()):s},r.interpolate=function(t){return arguments.length?(c=t,e()):c},e()}function Na(n){var e=n.domain;return n.ticks=function(t){var n=e();return l(n[0],n[n.length-1],null==t?10:t)},n.tickFormat=function(n,r){return function(n,e,r){var i,o=n[0],a=n[n.length-1],u=d(o,a,null==e?10:e);switch((r=tr(null==r?",f":r)).type){case"s":var f=Math.max(Math.abs(o),Math.abs(a));return null!=r.precision||isNaN(i=ur(u,f))||(r.precision=i),t.formatPrefix(r,f);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=fr(u,Math.max(Math.abs(o),Math.abs(a))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=ar(u))||(r.precision=i-2*("%"===r.type))}return t.format(r)}(e(),n,r)},n.nice=function(t){null==t&&(t=10);var r,i=e(),o=0,a=i.length-1,u=i[o],f=i[a];return f<u&&(r=u,u=f,f=r,r=o,o=a,a=r),(r=h(u,f,t))>0?r=h(u=Math.floor(u/r)*r,f=Math.ceil(f/r)*r,t):r<0&&(r=h(u=Math.ceil(u*r)/r,f=Math.floor(f*r)/r,t)),r>0?(i[o]=Math.floor(u/r)*r,i[a]=Math.ceil(f/r)*r,e(i)):r<0&&(i[o]=Math.ceil(u*r)/r,i[a]=Math.floor(f*r)/r,e(i)),n},n}function Sa(){var t=Ta(xa,sn);return t.copy=function(){return Aa(t,Sa())},Na(t)}function Ea(){function t(t){return+t}var n=[0,1];return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=kv.call(e,ma),t):n.slice()},t.copy=function(){return Ea().domain(n)},Na(t)}function ka(t,n){var e,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a<o&&(e=r,r=i,i=e,e=o,o=a,a=e),t[r]=n.floor(o),t[i]=n.ceil(a),t}function Ca(t,n){return(n=Math.log(n/t))?function(e){return Math.log(e/t)/n}:ba(n)}function Pa(t,n){return t<0?function(e){return-Math.pow(-n,e)*Math.pow(-t,1-e)}:function(e){return Math.pow(n,e)*Math.pow(t,1-e)}}function za(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Ra(t){return 10===t?za:t===Math.E?Math.exp:function(n){return Math.pow(t,n)}}function La(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(n){return Math.log(n)/t})}function Da(t){return function(n){return-t(-n)}}function Ua(){function n(){return o=La(i),a=Ra(i),r()[0]<0&&(o=Da(o),a=Da(a)),e}var e=Ta(Ca,Pa).domain([1,10]),r=e.domain,i=10,o=La(10),a=Ra(10);return e.base=function(t){return arguments.length?(i=+t,n()):i},e.domain=function(t){return arguments.length?(r(t),n()):r()},e.ticks=function(t){var n,e=r(),u=e[0],f=e[e.length-1];(n=f<u)&&(d=u,u=f,f=d);var c,s,h,d=o(u),p=o(f),v=null==t?10:+t,g=[];if(!(i%1)&&p-d<v){if(d=Math.round(d)-1,p=Math.round(p)+1,u>0){for(;d<p;++d)for(s=1,c=a(d);s<i;++s)if(!((h=c*s)<u)){if(h>f)break;g.push(h)}}else for(;d<p;++d)for(s=i-1,c=a(d);s>=1;--s)if(!((h=c*s)<u)){if(h>f)break;g.push(h)}}else g=l(d,p,Math.min(p-d,v)).map(a);return n?g.reverse():g},e.tickFormat=function(n,r){if(null==r&&(r=10===i?".0e":","),"function"!=typeof r&&(r=t.format(r)),n===1/0)return r;null==n&&(n=10);var u=Math.max(1,i*n/e.ticks().length);return function(t){var n=t/a(Math.round(o(t)));return n*i<i-.5&&(n*=i),n<=u?r(t):""}},e.nice=function(){return r(ka(r(),{floor:function(t){return a(Math.floor(o(t)))},ceil:function(t){return a(Math.ceil(o(t)))}}))},e.copy=function(){return Aa(e,Ua().base(i))},e}function qa(t,n){return t<0?-Math.pow(-t,n):Math.pow(t,n)}function Oa(){var t=1,n=Ta(function(n,e){return(e=qa(e,t)-(n=qa(n,t)))?function(r){return(qa(r,t)-n)/e}:ba(e)},function(n,e){return e=qa(e,t)-(n=qa(n,t)),function(r){return qa(n+e*r,1/t)}}),e=n.domain;return n.exponent=function(n){return arguments.length?(t=+n,e(e())):t},n.copy=function(){return Aa(n,Oa().exponent(t))},Na(n)}function Ya(){function t(){var t=0,n=Math.max(1,i.length);for(o=new Array(n-1);++t<n;)o[t-1]=v(r,t/n);return e}function e(t){if(!isNaN(t=+t))return i[Kc(o,t)]}var r=[],i=[],o=[];return e.invertExtent=function(t){var n=i.indexOf(t);return n<0?[NaN,NaN]:[n>0?o[n-1]:r[0],n<o.length?o[n]:r[r.length-1]]},e.domain=function(e){if(!arguments.length)return r.slice();r=[];for(var i,o=0,a=e.length;o<a;++o)null==(i=e[o])||isNaN(i=+i)||r.push(i);return r.sort(n),t()},e.range=function(n){return arguments.length?(i=Cv.call(n),t()):i.slice()},e.quantiles=function(){return o.slice()},e.copy=function(){return Ya().domain(r).range(i)},e}function Ba(){function t(t){if(t<=t)return a[Kc(o,t,0,i)]}function n(){var n=-1;for(o=new Array(i);++n<i;)o[n]=((n+1)*r-(n-i)*e)/(i+1);return t}var e=0,r=1,i=1,o=[.5],a=[0,1];return t.domain=function(t){return arguments.length?(e=+t[0],r=+t[1],n()):[e,r]},t.range=function(t){return arguments.length?(i=(a=Cv.call(t)).length-1,n()):a.slice()},t.invertExtent=function(t){var n=a.indexOf(t);return n<0?[NaN,NaN]:n<1?[e,o[0]]:n>=i?[o[i-1],r]:[o[n-1],o[n]]},t.copy=function(){return Ba().domain([e,r]).range(a)},Na(t)}function Fa(){function t(t){if(t<=t)return e[Kc(n,t,0,r)]}var n=[.5],e=[0,1],r=1;return t.domain=function(i){return arguments.length?(n=Cv.call(i),r=Math.min(n.length,e.length-1),t):n.slice()},t.range=function(i){return arguments.length?(e=Cv.call(i),r=Math.min(n.length,e.length-1),t):e.slice()},t.invertExtent=function(t){var r=e.indexOf(t);return[n[r-1],n[r]]},t.copy=function(){return Fa().domain(n).range(e)},t}function Ia(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n<e-t?n:e},i.offset=function(t,e){return n(t=new Date(+t),null==e?1:Math.floor(e)),t},i.range=function(e,r,o){var a,u=[];if(e=i.ceil(e),o=null==o?1:Math.floor(o),!(e<r&&o>0))return u;do{u.push(a=new Date(+e)),n(e,o),t(e)}while(a<e&&e<r);return u},i.filter=function(e){return Ia(function(n){if(n>=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;n(t,-1),!e(t););else for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return Rv.setTime(+n),Lv.setTime(+r),t(Rv),t(Lv),Math.floor(e(Rv,Lv))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function ja(t){return Ia(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*qv)/Ov})}function Ha(t){return Ia(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/Ov})}function Xa(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Ga(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Va(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function $a(t){function n(t,n){return function(e){var r,i,o,a=[],u=-1,f=0,c=t.length;for(e instanceof Date||(e=new Date(+e));++u<c;)37===t.charCodeAt(u)&&(a.push(t.slice(f,u)),null!=(i=Ug[r=t.charAt(++u)])?r=t.charAt(++u):i="e"===r?" ":"0",(o=n[r])&&(r=o(e,i)),a.push(r),f=u+1);return a.push(t.slice(f,u)),a.join("")}}function e(t,n){return function(e){var i,o,a=Va(1900);if(r(a,t,e+="",0)!=e.length)return null;if("Q"in a)return new Date(a.Q);if("p"in a&&(a.H=a.H%12+12*a.p),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(o=(i=Ga(Va(a.y))).getUTCDay())>4||0===o?_g.ceil(i):_g(i),i=vg.offset(i,7*(a.V-1)),a.y=i.getUTCFullYear(),a.m=i.getUTCMonth(),a.d=i.getUTCDate()+(a.w+6)%7):(i=(o=(i=n(Va(a.y))).getDay())>4||0===o?$v.ceil(i):$v(i),i=Xv.offset(i,7*(a.V-1)),a.y=i.getFullYear(),a.m=i.getMonth(),a.d=i.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),o="Z"in a?Ga(Va(a.y)).getUTCDay():n(Va(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(o+5)%7:a.w+7*a.U-(o+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Ga(a)):n(a)}}function r(t,n,e,r){for(var i,o,a=0,u=n.length,f=e.length;a<u;){if(r>=f)return-1;if(37===(i=n.charCodeAt(a++))){if(i=n.charAt(a++),!(o=A[i in Ug?n.charAt(a++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}var i=t.dateTime,o=t.date,a=t.time,u=t.periods,f=t.days,c=t.shortDays,s=t.months,l=t.shortMonths,h=Qa(u),d=Ja(u),p=Qa(f),v=Ja(f),g=Qa(c),y=Ja(c),_=Qa(s),b=Ja(s),m=Qa(l),x=Ja(l),w={a:function(t){return c[t.getDay()]},A:function(t){return f[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:_u,e:_u,f:Mu,H:bu,I:mu,j:xu,L:wu,m:Au,M:Tu,p:function(t){return u[+(t.getHours()>=12)]},Q:Ku,s:tf,S:Nu,u:Su,U:Eu,V:ku,w:Cu,W:Pu,x:null,X:null,y:zu,Y:Ru,Z:Lu,"%":Ju},M={a:function(t){return c[t.getUTCDay()]},A:function(t){return f[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Du,e:Du,f:Bu,H:Uu,I:qu,j:Ou,L:Yu,m:Fu,M:Iu,p:function(t){return u[+(t.getUTCHours()>=12)]},Q:Ku,s:tf,S:ju,u:Hu,U:Xu,V:Gu,w:Vu,W:$u,x:null,X:null,y:Wu,Y:Zu,Z:Qu,"%":Ju},A={a:function(t,n,e){var r=g.exec(n.slice(e));return r?(t.w=y[r[0].toLowerCase()],e+r[0].length):-1},A:function(t,n,e){var r=p.exec(n.slice(e));return r?(t.w=v[r[0].toLowerCase()],e+r[0].length):-1},b:function(t,n,e){var r=m.exec(n.slice(e));return r?(t.m=x[r[0].toLowerCase()],e+r[0].length):-1},B:function(t,n,e){var r=_.exec(n.slice(e));return r?(t.m=b[r[0].toLowerCase()],e+r[0].length):-1},c:function(t,n,e){return r(t,i,n,e)},d:fu,e:fu,f:pu,H:su,I:su,j:cu,L:du,m:uu,M:lu,p:function(t,n,e){var r=h.exec(n.slice(e));return r?(t.p=d[r[0].toLowerCase()],e+r[0].length):-1},Q:gu,s:yu,S:hu,u:tu,U:nu,V:eu,w:Ka,W:ru,x:function(t,n,e){return r(t,o,n,e)},X:function(t,n,e){return r(t,a,n,e)},y:ou,Y:iu,Z:au,"%":vu};return w.x=n(o,w),w.X=n(a,w),w.c=n(i,w),M.x=n(o,M),M.X=n(a,M),M.c=n(i,M),{format:function(t){var e=n(t+="",w);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",Xa);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",M);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,Ga);return n.toString=function(){return t},n}}}function Wa(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o<e?new Array(e-o+1).join(n)+i:i)}function Za(t){return t.replace(Yg,"\\$&")}function Qa(t){return new RegExp("^(?:"+t.map(Za).join("|")+")","i")}function Ja(t){for(var n={},e=-1,r=t.length;++e<r;)n[t[e].toLowerCase()]=e;return n}function Ka(t,n,e){var r=qg.exec(n.slice(e,e+1));return r?(t.w=+r[0],e+r[0].length):-1}function tu(t,n,e){var r=qg.exec(n.slice(e,e+1));return r?(t.u=+r[0],e+r[0].length):-1}function nu(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.U=+r[0],e+r[0].length):-1}function eu(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.V=+r[0],e+r[0].length):-1}function ru(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.W=+r[0],e+r[0].length):-1}function iu(t,n,e){var r=qg.exec(n.slice(e,e+4));return r?(t.y=+r[0],e+r[0].length):-1}function ou(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),e+r[0].length):-1}function au(t,n,e){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function uu(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function fu(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function cu(t,n,e){var r=qg.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function su(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function lu(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function hu(t,n,e){var r=qg.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function du(t,n,e){var r=qg.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function pu(t,n,e){var r=qg.exec(n.slice(e,e+6));return r?(t.L=Math.floor(r[0]/1e3),e+r[0].length):-1}function vu(t,n,e){var r=Og.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function gu(t,n,e){var r=qg.exec(n.slice(e));return r?(t.Q=+r[0],e+r[0].length):-1}function yu(t,n,e){var r=qg.exec(n.slice(e));return r?(t.Q=1e3*+r[0],e+r[0].length):-1}function _u(t,n){return Wa(t.getDate(),n,2)}function bu(t,n){return Wa(t.getHours(),n,2)}function mu(t,n){return Wa(t.getHours()%12||12,n,2)}function xu(t,n){return Wa(1+Xv.count(cg(t),t),n,3)}function wu(t,n){return Wa(t.getMilliseconds(),n,3)}function Mu(t,n){return wu(t,n)+"000"}function Au(t,n){return Wa(t.getMonth()+1,n,2)}function Tu(t,n){return Wa(t.getMinutes(),n,2)}function Nu(t,n){return Wa(t.getSeconds(),n,2)}function Su(t){var n=t.getDay();return 0===n?7:n}function Eu(t,n){return Wa(Vv.count(cg(t),t),n,2)}function ku(t,n){var e=t.getDay();return t=e>=4||0===e?Qv(t):Qv.ceil(t),Wa(Qv.count(cg(t),t)+(4===cg(t).getDay()),n,2)}function Cu(t){return t.getDay()}function Pu(t,n){return Wa($v.count(cg(t),t),n,2)}function zu(t,n){return Wa(t.getFullYear()%100,n,2)}function Ru(t,n){return Wa(t.getFullYear()%1e4,n,4)}function Lu(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+Wa(n/60|0,"0",2)+Wa(n%60,"0",2)}function Du(t,n){return Wa(t.getUTCDate(),n,2)}function Uu(t,n){return Wa(t.getUTCHours(),n,2)}function qu(t,n){return Wa(t.getUTCHours()%12||12,n,2)}function Ou(t,n){return Wa(1+vg.count(Rg(t),t),n,3)}function Yu(t,n){return Wa(t.getUTCMilliseconds(),n,3)}function Bu(t,n){return Yu(t,n)+"000"}function Fu(t,n){return Wa(t.getUTCMonth()+1,n,2)}function Iu(t,n){return Wa(t.getUTCMinutes(),n,2)}function ju(t,n){return Wa(t.getUTCSeconds(),n,2)}function Hu(t){var n=t.getUTCDay();return 0===n?7:n}function Xu(t,n){return Wa(yg.count(Rg(t),t),n,2)}function Gu(t,n){var e=t.getUTCDay();return t=e>=4||0===e?xg(t):xg.ceil(t),Wa(xg.count(Rg(t),t)+(4===Rg(t).getUTCDay()),n,2)}function Vu(t){return t.getUTCDay()}function $u(t,n){return Wa(_g.count(Rg(t),t),n,2)}function Wu(t,n){return Wa(t.getUTCFullYear()%100,n,2)}function Zu(t,n){return Wa(t.getUTCFullYear()%1e4,n,4)}function Qu(){return"+0000"}function Ju(){return"%"}function Ku(t){return+t}function tf(t){return Math.floor(+t/1e3)}function nf(n){return Lg=$a(n),t.timeFormat=Lg.format,t.timeParse=Lg.parse,t.utcFormat=Lg.utcFormat,t.utcParse=Lg.utcParse,Lg}function ef(t){return new Date(t)}function rf(t){return t instanceof Date?+t:+new Date(+t)}function of(t,n,r,i,o,a,u,f,c){function s(e){return(u(e)<e?g:a(e)<e?y:o(e)<e?_:i(e)<e?b:n(e)<e?r(e)<e?m:x:t(e)<e?w:M)(e)}function l(n,r,i,o){if(null==n&&(n=10),"number"==typeof n){var a=Math.abs(i-r)/n,u=e(function(t){return t[2]}).right(A,a);u===A.length?(o=d(r/Wg,i/Wg,n),n=t):u?(o=(u=A[a/A[u-1][2]<A[u][2]/a?u-1:u])[1],n=u[0]):(o=Math.max(d(r,i,n),1),n=f)}return null==o?n:n.every(o)}var h=Ta(xa,sn),p=h.invert,v=h.domain,g=c(".%L"),y=c(":%S"),_=c("%I:%M"),b=c("%I %p"),m=c("%a %d"),x=c("%b %d"),w=c("%B"),M=c("%Y"),A=[[u,1,jg],[u,5,5*jg],[u,15,15*jg],[u,30,30*jg],[a,1,Hg],[a,5,5*Hg],[a,15,15*Hg],[a,30,30*Hg],[o,1,Xg],[o,3,3*Xg],[o,6,6*Xg],[o,12,12*Xg],[i,1,Gg],[i,2,2*Gg],[r,1,Vg],[n,1,$g],[n,3,3*$g],[t,1,Wg]];return h.invert=function(t){return new Date(p(t))},h.domain=function(t){return arguments.length?v(kv.call(t,rf)):v().map(ef)},h.ticks=function(t,n){var e,r=v(),i=r[0],o=r[r.length-1],a=o<i;return a&&(e=i,i=o,o=e),e=l(t,i,o,n),e=e?e.range(i,o+1):[],a?e.reverse():e},h.tickFormat=function(t,n){return null==n?s:c(n)},h.nice=function(t,n){var e=v();return(t=l(t,e[0],e[e.length-1],n))?v(ka(e,t)):h},h.copy=function(){return Aa(h,of(t,n,r,i,o,a,u,f,c))},h}function af(t){function n(n){var r=(n-e)*i;return t(o?Math.max(0,Math.min(1,r)):r)}var e=0,r=1,i=1,o=!1;return n.domain=function(t){return arguments.length?(e=+t[0],r=+t[1],i=e===r?0:1/(r-e),n):[e,r]},n.clamp=function(t){return arguments.length?(o=!!t,n):o},n.interpolator=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return af(t).domain([e,r]).clamp(o)},Na(n)}function uf(t){function n(n){var e=.5+((n=+n)-r)*(n<r?o:a);return t(u?Math.max(0,Math.min(1,e)):e)}var e=0,r=.5,i=1,o=1,a=1,u=!1;return n.domain=function(t){return arguments.length?(e=+t[0],r=+t[1],i=+t[2],o=e===r?0:.5/(r-e),a=r===i?0:.5/(i-r),n):[e,r,i]},n.clamp=function(t){return arguments.length?(u=!!t,n):u},n.interpolator=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return uf(t).domain([e,r,i]).clamp(u)},Na(n)}function ff(t){for(var n=t.length/6|0,e=new Array(n),r=0;r<n;)e[r]="#"+t.slice(6*r,6*++r);return e}function cf(t){return il(t[t.length-1])}function sf(t){var n=t.length;return function(e){return t[Math.max(0,Math.min(n-1,Math.floor(e*n)))]}}function lf(t){return function(){return t}}function hf(t){return t>=1?T_:t<=-1?-T_:Math.asin(t)}function df(t){return t.innerRadius}function pf(t){return t.outerRadius}function vf(t){return t.startAngle}function gf(t){return t.endAngle}function yf(t){return t&&t.padAngle}function _f(t,n,e,r,i,o,a){var u=t-e,f=n-r,c=(a?o:-o)/w_(u*u+f*f),s=c*f,l=-c*u,h=t+s,d=n+l,p=e+s,v=r+l,g=(h+p)/2,y=(d+v)/2,_=p-h,b=v-d,m=_*_+b*b,x=i-o,w=h*v-p*d,M=(b<0?-1:1)*w_(b_(0,x*x*m-w*w)),A=(w*b-_*M)/m,T=(-w*_-b*M)/m,N=(w*b+_*M)/m,S=(-w*_+b*M)/m,E=A-g,k=T-y,C=N-g,P=S-y;return E*E+k*k>C*C+P*P&&(A=N,T=S),{cx:A,cy:T,x01:-s,y01:-l,x11:A*(i/x-1),y11:T*(i/x-1)}}function bf(t){this._context=t}function mf(t){return new bf(t)}function xf(t){return t[0]}function wf(t){return t[1]}function Mf(){function t(t){var u,f,c,s=t.length,l=!1;for(null==i&&(a=o(c=oe())),u=0;u<=s;++u)!(u<s&&r(f=t[u],u,t))===l&&((l=!l)?a.lineStart():a.lineEnd()),l&&a.point(+n(f,u,t),+e(f,u,t));if(c)return a=null,c+""||null}var n=xf,e=wf,r=lf(!0),i=null,o=mf,a=null;return t.x=function(e){return arguments.length?(n="function"==typeof e?e:lf(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:lf(+n),t):e},t.defined=function(n){return arguments.length?(r="function"==typeof n?n:lf(!!n),t):r},t.curve=function(n){return arguments.length?(o=n,null!=i&&(a=o(i)),t):o},t.context=function(n){return arguments.length?(null==n?i=a=null:a=o(i=n),t):i},t}function Af(){function t(t){var n,s,l,h,d,p=t.length,v=!1,g=new Array(p),y=new Array(p);for(null==u&&(c=f(d=oe())),n=0;n<=p;++n){if(!(n<p&&a(h=t[n],n,t))===v)if(v=!v)s=n,c.areaStart(),c.lineStart();else{for(c.lineEnd(),c.lineStart(),l=n-1;l>=s;--l)c.point(g[l],y[l]);c.lineEnd(),c.areaEnd()}v&&(g[n]=+e(h,n,t),y[n]=+i(h,n,t),c.point(r?+r(h,n,t):g[n],o?+o(h,n,t):y[n]))}if(d)return c=null,d+""||null}function n(){return Mf().defined(a).curve(f).context(u)}var e=xf,r=null,i=lf(0),o=wf,a=lf(!0),u=null,f=mf,c=null;return t.x=function(n){return arguments.length?(e="function"==typeof n?n:lf(+n),r=null,t):e},t.x0=function(n){return arguments.length?(e="function"==typeof n?n:lf(+n),t):e},t.x1=function(n){return arguments.length?(r=null==n?null:"function"==typeof n?n:lf(+n),t):r},t.y=function(n){return arguments.length?(i="function"==typeof n?n:lf(+n),o=null,t):i},t.y0=function(n){return arguments.length?(i="function"==typeof n?n:lf(+n),t):i},t.y1=function(n){return arguments.length?(o=null==n?null:"function"==typeof n?n:lf(+n),t):o},t.lineX0=t.lineY0=function(){return n().x(e).y(i)},t.lineY1=function(){return n().x(e).y(o)},t.lineX1=function(){return n().x(r).y(i)},t.defined=function(n){return arguments.length?(a="function"==typeof n?n:lf(!!n),t):a},t.curve=function(n){return arguments.length?(f=n,null!=u&&(c=f(u)),t):f},t.context=function(n){return arguments.length?(null==n?u=c=null:c=f(u=n),t):u},t}function Tf(t,n){return n<t?-1:n>t?1:n>=t?0:NaN}function Nf(t){return t}function Sf(t){this._curve=t}function Ef(t){function n(n){return new Sf(t(n))}return n._curve=t,n}function kf(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(Ef(t)):n()._curve},t}function Cf(){return kf(Mf().curve(S_))}function Pf(){var t=Af().curve(S_),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return kf(e())},delete t.lineX0,t.lineEndAngle=function(){return kf(r())},delete t.lineX1,t.lineInnerRadius=function(){return kf(i())},delete t.lineY0,t.lineOuterRadius=function(){return kf(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(Ef(t)):n()._curve},t}function zf(t,n){return[(n=+n)*Math.cos(t-=Math.PI/2),n*Math.sin(t)]}function Rf(t){return t.source}function Lf(t){return t.target}function Df(t){function n(){var n,u=E_.call(arguments),f=e.apply(this,u),c=r.apply(this,u);if(a||(a=n=oe()),t(a,+i.apply(this,(u[0]=f,u)),+o.apply(this,u),+i.apply(this,(u[0]=c,u)),+o.apply(this,u)),n)return a=null,n+""||null}var e=Rf,r=Lf,i=xf,o=wf,a=null;return n.source=function(t){return arguments.length?(e=t,n):e},n.target=function(t){return arguments.length?(r=t,n):r},n.x=function(t){return arguments.length?(i="function"==typeof t?t:lf(+t),n):i},n.y=function(t){return arguments.length?(o="function"==typeof t?t:lf(+t),n):o},n.context=function(t){return arguments.length?(a=null==t?null:t,n):a},n}function Uf(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n=(n+r)/2,e,n,i,r,i)}function qf(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n,e=(e+i)/2,r,e,r,i)}function Of(t,n,e,r,i){var o=zf(n,e),a=zf(n,e=(e+i)/2),u=zf(r,e),f=zf(r,i);t.moveTo(o[0],o[1]),t.bezierCurveTo(a[0],a[1],u[0],u[1],f[0],f[1])}function Yf(){}function Bf(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function Ff(t){this._context=t}function If(t){this._context=t}function jf(t){this._context=t}function Hf(t,n){this._basis=new Ff(t),this._beta=n}function Xf(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function Gf(t,n){this._context=t,this._k=(1-n)/6}function Vf(t,n){this._context=t,this._k=(1-n)/6}function $f(t,n){this._context=t,this._k=(1-n)/6}function Wf(t,n,e){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>M_){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,f=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/f,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/f}if(t._l23_a>M_){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,s=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-n*t._l12_2a)/s,a=(a*c+t._y1*t._l23_2a-e*t._l12_2a)/s}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function Zf(t,n){this._context=t,this._alpha=n}function Qf(t,n){this._context=t,this._alpha=n}function Jf(t,n){this._context=t,this._alpha=n}function Kf(t){this._context=t}function tc(t){return t<0?-1:1}function nc(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(e-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i);return(tc(o)+tc(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function ec(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function rc(t,n,e){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3;t._context.bezierCurveTo(r+u,i+u*n,o-u,a-u*e,o,a)}function ic(t){this._context=t}function oc(t){this._context=new ac(t)}function ac(t){this._context=t}function uc(t){this._context=t}function fc(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],n=1;n<r-1;++n)i[n]=1,o[n]=4,a[n]=4*t[n]+2*t[n+1];for(i[r-1]=2,o[r-1]=7,a[r-1]=8*t[r-1]+t[r],n=1;n<r;++n)e=i[n]/o[n-1],o[n]-=e,a[n]-=e*a[n-1];for(i[r-1]=a[r-1]/o[r-1],n=r-2;n>=0;--n)i[n]=(a[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n<r-1;++n)o[n]=2*t[n+1]-i[n+1];return[i,o]}function cc(t,n){this._context=t,this._t=n}function sc(t,n){if((i=t.length)>1)for(var e,r,i,o=1,a=t[n[0]],u=a.length;o<i;++o)for(r=a,a=t[n[o]],e=0;e<u;++e)a[e][1]+=a[e][0]=isNaN(r[e][1])?r[e][0]:r[e][1]}function lc(t){for(var n=t.length,e=new Array(n);--n>=0;)e[n]=n;return e}function hc(t,n){return t[n]}function dc(t){var n=t.map(pc);return lc(t).sort(function(t,e){return n[t]-n[e]})}function pc(t){for(var n,e=0,r=-1,i=t.length;++r<i;)(n=+t[r][1])&&(e+=n);return e}function vc(t){return function(){return t}}function gc(t){return t[0]}function yc(t){return t[1]}function _c(){this._=null}function bc(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function mc(t,n){var e=n,r=n.R,i=e.U;i?i.L===e?i.L=r:i.R=r:t._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function xc(t,n){var e=n,r=n.L,i=e.U;i?i.L===e?i.L=r:i.R=r:t._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function wc(t){for(;t.L;)t=t.L;return t}function Mc(t,n,e,r){var i=[null,null],o=rb.push(i)-1;return i.left=t,i.right=n,e&&Tc(i,t,n,e),r&&Tc(i,n,t,r),nb[t.index].halfedges.push(o),nb[n.index].halfedges.push(o),i}function Ac(t,n,e){var r=[n,e];return r.left=t,r}function Tc(t,n,e,r){t[0]||t[1]?t.left===e?t[1]=r:t[0]=r:(t[0]=r,t.left=n,t.right=e)}function Nc(t,n,e,r,i){var o,a=t[0],u=t[1],f=a[0],c=a[1],s=0,l=1,h=u[0]-f,d=u[1]-c;if(o=n-f,h||!(o>0)){if(o/=h,h<0){if(o<s)return;o<l&&(l=o)}else if(h>0){if(o>l)return;o>s&&(s=o)}if(o=r-f,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>s&&(s=o)}else if(h>0){if(o<s)return;o<l&&(l=o)}if(o=e-c,d||!(o>0)){if(o/=d,d<0){if(o<s)return;o<l&&(l=o)}else if(d>0){if(o>l)return;o>s&&(s=o)}if(o=i-c,d||!(o<0)){if(o/=d,d<0){if(o>l)return;o>s&&(s=o)}else if(d>0){if(o<s)return;o<l&&(l=o)}return!(s>0||l<1)||(s>0&&(t[0]=[f+s*h,c+s*d]),l<1&&(t[1]=[f+l*h,c+l*d]),!0)}}}}}function Sc(t,n,e,r,i){var o=t[1];if(o)return!0;var a,u,f=t[0],c=t.left,s=t.right,l=c[0],h=c[1],d=s[0],p=s[1],v=(l+d)/2,g=(h+p)/2;if(p===h){if(v<n||v>=r)return;if(l>d){if(f){if(f[1]>=i)return}else f=[v,e];o=[v,i]}else{if(f){if(f[1]<e)return}else f=[v,i];o=[v,e]}}else if(a=(l-d)/(p-h),u=g-a*v,a<-1||a>1)if(l>d){if(f){if(f[1]>=i)return}else f=[(e-u)/a,e];o=[(i-u)/a,i]}else{if(f){if(f[1]<e)return}else f=[(i-u)/a,i];o=[(e-u)/a,e]}else if(h<p){if(f){if(f[0]>=r)return}else f=[n,a*n+u];o=[r,a*r+u]}else{if(f){if(f[0]<n)return}else f=[r,a*r+u];o=[n,a*n+u]}return t[0]=f,t[1]=o,!0}function Ec(t,n){var e=t.site,r=n.left,i=n.right;return e===i&&(i=r,r=e),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(e===r?(r=n[1],i=n[0]):(r=n[0],i=n[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function kc(t,n){return n[+(n.left!==t.site)]}function Cc(t,n){return n[+(n.left===t.site)]}function Pc(t){var n=t.P,e=t.N;if(n&&e){var r=n.site,i=t.site,o=e.site;if(r!==o){var a=i[0],u=i[1],f=r[0]-a,c=r[1]-u,s=o[0]-a,l=o[1]-u,h=2*(f*l-c*s);if(!(h>=-ub)){var d=f*f+c*c,p=s*s+l*l,v=(l*d-c*p)/h,g=(f*p-s*d)/h,y=ib.pop()||new function(){bc(this),this.x=this.y=this.arc=this.site=this.cy=null};y.arc=t,y.site=i,y.x=v+a,y.y=(y.cy=g+u)+Math.sqrt(v*v+g*g),t.circle=y;for(var _=null,b=eb._;b;)if(y.y<b.y||y.y===b.y&&y.x<=b.x){if(!b.L){_=b.P;break}b=b.L}else{if(!b.R){_=b;break}b=b.R}eb.insert(_,y),_||(K_=y)}}}}function zc(t){var n=t.circle;n&&(n.P||(K_=n.N),eb.remove(n),ib.push(n),bc(n),t.circle=null)}function Rc(t){var n=ob.pop()||new function(){bc(this),this.edge=this.site=this.circle=null};return n.site=t,n}function Lc(t){zc(t),tb.remove(t),ob.push(t),bc(t)}function Dc(t){var n=t.circle,e=n.x,r=n.cy,i=[e,r],o=t.P,a=t.N,u=[t];Lc(t);for(var f=o;f.circle&&Math.abs(e-f.circle.x)<ab&&Math.abs(r-f.circle.cy)<ab;)o=f.P,u.unshift(f),Lc(f),f=o;u.unshift(f),zc(f);for(var c=a;c.circle&&Math.abs(e-c.circle.x)<ab&&Math.abs(r-c.circle.cy)<ab;)a=c.N,u.push(c),Lc(c),c=a;u.push(c),zc(c);var s,l=u.length;for(s=1;s<l;++s)c=u[s],f=u[s-1],Tc(c.edge,f.site,c.site,i);f=u[0],(c=u[l-1]).edge=Mc(f.site,c.site,null,i),Pc(f),Pc(c)}function Uc(t){for(var n,e,r,i,o=t[0],a=t[1],u=tb._;u;)if((r=qc(u,a)-o)>ab)u=u.L;else{if(!((i=o-function(t,n){var e=t.N;if(e)return qc(e,n);var r=t.site;return r[1]===n?r[0]:1/0}(u,a))>ab)){r>-ab?(n=u.P,e=u):i>-ab?(n=u,e=u.N):n=e=u;break}if(!u.R){n=u;break}u=u.R}(function(t){nb[t.index]={site:t,halfedges:[]}})(t);var f=Rc(t);if(tb.insert(n,f),n||e){if(n===e)return zc(n),e=Rc(n.site),tb.insert(f,e),f.edge=e.edge=Mc(n.site,f.site),Pc(n),void Pc(e);if(e){zc(n),zc(e);var c=n.site,s=c[0],l=c[1],h=t[0]-s,d=t[1]-l,p=e.site,v=p[0]-s,g=p[1]-l,y=2*(h*g-d*v),_=h*h+d*d,b=v*v+g*g,m=[(g*_-d*b)/y+s,(h*b-v*_)/y+l];Tc(e.edge,c,p,m),f.edge=Mc(c,t,null,m),e.edge=Mc(t,p,null,m),Pc(n),Pc(e)}else f.edge=Mc(n.site,f.site)}}function qc(t,n){var e=t.site,r=e[0],i=e[1],o=i-n;if(!o)return r;var a=t.P;if(!a)return-1/0;var u=(e=a.site)[0],f=e[1],c=f-n;if(!c)return u;var s=u-r,l=1/o-1/c,h=s/c;return l?(-h+Math.sqrt(h*h-2*l*(s*s/(-2*c)-f+c/2+i-o/2)))/l+r:(r+u)/2}function Oc(t,n,e){return(t[0]-e[0])*(n[1]-t[1])-(t[0]-n[0])*(e[1]-t[1])}function Yc(t,n){return n[1]-t[1]||n[0]-t[0]}function Bc(t,n){var e,r,i,o=t.sort(Yc).pop();for(rb=[],nb=new Array(t.length),tb=new _c,eb=new _c;;)if(i=K_,o&&(!i||o[1]<i.y||o[1]===i.y&&o[0]<i.x))o[0]===e&&o[1]===r||(Uc(o),e=o[0],r=o[1]),o=t.pop();else{if(!i)break;Dc(i.arc)}if(function(){for(var t,n,e,r,i=0,o=nb.length;i<o;++i)if((t=nb[i])&&(r=(n=t.halfedges).length)){var a=new Array(r),u=new Array(r);for(e=0;e<r;++e)a[e]=e,u[e]=Ec(t,rb[n[e]]);for(a.sort(function(t,n){return u[n]-u[t]}),e=0;e<r;++e)u[e]=n[a[e]];for(e=0;e<r;++e)n[e]=u[e]}}(),n){var a=+n[0][0],u=+n[0][1],f=+n[1][0],c=+n[1][1];(function(t,n,e,r){for(var i,o=rb.length;o--;)Sc(i=rb[o],t,n,e,r)&&Nc(i,t,n,e,r)&&(Math.abs(i[0][0]-i[1][0])>ab||Math.abs(i[0][1]-i[1][1])>ab)||delete rb[o]})(a,u,f,c),function(t,n,e,r){var i,o,a,u,f,c,s,l,h,d,p,v,g=nb.length,y=!0;for(i=0;i<g;++i)if(o=nb[i]){for(a=o.site,u=(f=o.halfedges).length;u--;)rb[f[u]]||f.splice(u,1);for(u=0,c=f.length;u<c;)p=(d=Cc(o,rb[f[u]]))[0],v=d[1],l=(s=kc(o,rb[f[++u%c]]))[0],h=s[1],(Math.abs(p-l)>ab||Math.abs(v-h)>ab)&&(f.splice(u,0,rb.push(Ac(a,d,Math.abs(p-t)<ab&&r-v>ab?[t,Math.abs(l-t)<ab?h:r]:Math.abs(v-r)<ab&&e-p>ab?[Math.abs(h-r)<ab?l:e,r]:Math.abs(p-e)<ab&&v-n>ab?[e,Math.abs(l-e)<ab?h:n]:Math.abs(v-n)<ab&&p-t>ab?[Math.abs(h-n)<ab?l:t,n]:null))-1),++c);c&&(y=!1)}if(y){var _,b,m,x=1/0;for(i=0,y=null;i<g;++i)(o=nb[i])&&(m=(_=(a=o.site)[0]-t)*_+(b=a[1]-n)*b)<x&&(x=m,y=o);if(y){var w=[t,n],M=[t,r],A=[e,r],T=[e,n];y.halfedges.push(rb.push(Ac(a=y.site,w,M))-1,rb.push(Ac(a,M,A))-1,rb.push(Ac(a,A,T))-1,rb.push(Ac(a,T,w))-1)}}for(i=0;i<g;++i)(o=nb[i])&&(o.halfedges.length||delete nb[i])}(a,u,f,c)}this.edges=rb,this.cells=nb,tb=eb=rb=nb=null}function Fc(t){return function(){return t}}function Ic(t,n,e){this.k=t,this.x=n,this.y=e}function jc(t){return t.__zoom||fb}function Hc(){t.event.stopImmediatePropagation()}function Xc(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function Gc(){return!t.event.button}function Vc(){var t,n,e=this;return e instanceof SVGElement?(t=(e=e.ownerSVGElement||e).width.baseVal.value,n=e.height.baseVal.value):(t=e.clientWidth,n=e.clientHeight),[[0,0],[t,n]]}function $c(){return this.__zoom||fb}function Wc(){return-t.event.deltaY*(t.event.deltaMode?120:1)/500}function Zc(){return"ontouchstart"in this}function Qc(t,n,e){var r=t.invertX(n[0][0])-e[0][0],i=t.invertX(n[1][0])-e[1][0],o=t.invertY(n[0][1])-e[0][1],a=t.invertY(n[1][1])-e[1][1];return t.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}var Jc=e(n),Kc=Jc.right,ts=Jc.left,ns=Array.prototype,es=ns.slice,rs=ns.map,is=Math.sqrt(50),os=Math.sqrt(10),as=Math.sqrt(2),us=Array.prototype.slice,fs=1,cs=2,ss=3,ls=4,hs=1e-6,ds={value:function(){}};S.prototype=N.prototype={constructor:S,on:function(t,n){var e,r=this._,i=function(t,n){return t.trim().split(/^|\s+/).map(function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}(t+"",r),o=-1,a=i.length;{if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o<a;)if(e=(t=i[o]).type)r[e]=E(r[e],t.name,n);else if(null==n)for(e in r)r[e]=E(r[e],t.name,null);return this}for(;++o<a;)if((e=(t=i[o]).type)&&(e=function(t,n){for(var e,r=0,i=t.length;r<i;++r)if((e=t[r]).name===n)return e.value}(r[e],t.name)))return e}},copy:function(){var t={},n=this._;for(var e in n)t[e]=n[e].slice();return new S(t)},call:function(t,n){if((e=arguments.length-2)>0)for(var e,r,i=new Array(e),o=0;o<e;++o)i[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,e=(r=this._[t]).length;o<e;++o)r[o].value.apply(n,i)},apply:function(t,n,e){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,o=r.length;i<o;++i)r[i].value.apply(n,e)}};var ps="http://www.w3.org/1999/xhtml",vs={svg:"http://www.w3.org/2000/svg",xhtml:ps,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},gs=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var ys=document.documentElement;if(!ys.matches){var _s=ys.webkitMatchesSelector||ys.msMatchesSelector||ys.mozMatchesSelector||ys.oMatchesSelector;gs=function(t){return function(){return _s.call(this,t)}}}}var bs=gs;U.prototype={constructor:U,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,n){return this._parent.insertBefore(t,n)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var ms="$";H.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var xs={};if(t.event=null,"undefined"!=typeof document){"onmouseenter"in document.documentElement||(xs={mouseenter:"mouseover",mouseleave:"mouseout"})}var ws=[null];ut.prototype=ft.prototype={constructor:ut,select:function(t){"function"!=typeof t&&(t=z(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,a,u=n[i],f=u.length,c=r[i]=new Array(f),s=0;s<f;++s)(o=u[s])&&(a=t.call(o,o.__data__,s,u))&&("__data__"in o&&(a.__data__=o.__data__),c[s]=a);return new ut(r,this._parents)},selectAll:function(t){"function"!=typeof t&&(t=L(t));for(var n=this._groups,e=n.length,r=[],i=[],o=0;o<e;++o)for(var a,u=n[o],f=u.length,c=0;c<f;++c)(a=u[c])&&(r.push(t.call(a,a.__data__,c,u)),i.push(a));return new ut(r,i)},filter:function(t){"function"!=typeof t&&(t=bs(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,a=n[i],u=a.length,f=r[i]=[],c=0;c<u;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&f.push(o);return new ut(r,this._parents)},data:function(t,n){if(!t)return d=new Array(this.size()),c=-1,this.each(function(t){d[++c]=t}),d;var e=n?O:q,r=this._parents,i=this._groups;"function"!=typeof t&&(t=function(t){return function(){return t}}(t));for(var o=i.length,a=new Array(o),u=new Array(o),f=new Array(o),c=0;c<o;++c){var s=r[c],l=i[c],h=l.length,d=t.call(s,s&&s.__data__,c,r),p=d.length,v=u[c]=new Array(p),g=a[c]=new Array(p);e(s,l,v,g,f[c]=new Array(h),d,n);for(var y,_,b=0,m=0;b<p;++b)if(y=v[b]){for(b>=m&&(m=b+1);!(_=g[m])&&++m<p;);y._next=_||null}}return a=new ut(a,r),a._enter=u,a._exit=f,a},enter:function(){return new ut(this._enter||this._groups.map(D),this._parents)},exit:function(){return new ut(this._exit||this._groups.map(D),this._parents)},merge:function(t){for(var n=this._groups,e=t._groups,r=n.length,i=e.length,o=Math.min(r,i),a=new Array(r),u=0;u<o;++u)for(var f,c=n[u],s=e[u],l=c.length,h=a[u]=new Array(l),d=0;d<l;++d)(f=c[d]||s[d])&&(h[d]=f);for(;u<r;++u)a[u]=n[u];return new ut(a,this._parents)},order:function(){for(var t=this._groups,n=-1,e=t.length;++n<e;)for(var r,i=t[n],o=i.length-1,a=i[o];--o>=0;)(r=i[o])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=Y);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o<r;++o){for(var a,u=e[o],f=u.length,c=i[o]=new Array(f),s=0;s<f;++s)(a=u[s])&&(c[s]=a);c.sort(n)}return new ut(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){var t=new Array(this.size()),n=-1;return this.each(function(){t[++n]=this}),t},node:function(){for(var t=this._groups,n=0,e=t.length;n<e;++n)for(var r=t[n],i=0,o=r.length;i<o;++i){var a=r[i];if(a)return a}return null},size:function(){var t=0;return this.each(function(){++t}),t},empty:function(){return!this.node()},each:function(t){for(var n=this._groups,e=0,r=n.length;e<r;++e)for(var i,o=n[e],a=0,u=o.length;a<u;++a)(i=o[a])&&t.call(i,i.__data__,a,o);return this},attr:function(t,n){var e=k(t);if(arguments.length<2){var r=this.node();return e.local?r.getAttributeNS(e.space,e.local):r.getAttribute(e)}return this.each((null==n?e.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}}:"function"==typeof n?e.local?function(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}:function(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}:e.local?function(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}:function(t,n){return function(){this.setAttribute(t,n)}})(e,n))},style:function(t,n,e){return arguments.length>1?this.each((null==n?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof n?function(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}:function(t,n,e){return function(){this.style.setProperty(t,n,e)}})(t,n,null==e?"":e)):F(this.node(),t)},property:function(t,n){return arguments.length>1?this.each((null==n?function(t){return function(){delete this[t]}}:"function"==typeof n?function(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}:function(t,n){return function(){this[t]=n}})(t,n)):this.node()[t]},classed:function(t,n){var e=I(t+"");if(arguments.length<2){for(var r=j(this.node()),i=-1,o=e.length;++i<o;)if(!r.contains(e[i]))return!1;return!0}return this.each(("function"==typeof n?function(t,n){return function(){(n.apply(this,arguments)?X:G)(this,t)}}:n?function(t){return function(){X(this,t)}}:function(t){return function(){G(this,t)}})(e,n))},text:function(t){return arguments.length?this.each(null==t?V:("function"==typeof t?function(t){return function(){var n=t.apply(this,arguments);this.textContent=null==n?"":n}}:function(t){return function(){this.textContent=t}})(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?$:("function"==typeof t?function(t){return function(){var n=t.apply(this,arguments);this.innerHTML=null==n?"":n}}:function(t){return function(){this.innerHTML=t}})(t)):this.node().innerHTML},raise:function(){return this.each(W)},lower:function(){return this.each(Z)},append:function(t){var n="function"==typeof t?t:C(t);return this.select(function(){return this.appendChild(n.apply(this,arguments))})},insert:function(t,n){var e="function"==typeof t?t:C(t),r=null==n?Q:"function"==typeof n?n:z(n);return this.select(function(){return this.insertBefore(e.apply(this,arguments),r.apply(this,arguments)||null)})},remove:function(){return this.each(J)},clone:function(t){return this.select(t?tt:K)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,n,e){var r,i,o=function(t){return t.trim().split(/^|\s+/).map(function(t){var n="",e=t.indexOf(".");return e>=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}(t+""),a=o.length;if(!(arguments.length<2)){for(u=n?it:rt,null==e&&(e=!1),r=0;r<a;++r)this.each(u(o[r],n,e));return this}var u=this.node().__on;if(u)for(var f,c=0,s=u.length;c<s;++c)for(r=0,f=u[c];r<a;++r)if((i=o[r]).type===f.type&&i.name===f.name)return f.value},dispatch:function(t,n){return this.each(("function"==typeof n?function(t,n){return function(){return at(this,t,n.apply(this,arguments))}}:function(t,n){return function(){return at(this,t,n)}})(t,n))}};var Ms=0;lt.prototype=st.prototype={constructor:lt,get:function(t){for(var n=this._;!(n in t);)if(!(t=t.parentNode))return;return t[n]},set:function(t,n){return t[this._]=n},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}},xt.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var As="\\s*([+-]?\\d+)\\s*",Ts="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ns="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Ss=/^#([0-9a-f]{3})$/,Es=/^#([0-9a-f]{6})$/,ks=new RegExp("^rgb\\("+[As,As,As]+"\\)$"),Cs=new RegExp("^rgb\\("+[Ns,Ns,Ns]+"\\)$"),Ps=new RegExp("^rgba\\("+[As,As,As,Ts]+"\\)$"),zs=new RegExp("^rgba\\("+[Ns,Ns,Ns,Ts]+"\\)$"),Rs=new RegExp("^hsl\\("+[Ts,Ns,Ns]+"\\)$"),Ls=new RegExp("^hsla\\("+[Ts,Ns,Ns,Ts]+"\\)$"),Ds={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Nt(Et,kt,{displayable:function(){return this.rgb().displayable()},hex:function(){return this.rgb().hex()},toString:function(){return this.rgb()+""}}),Nt(Lt,Rt,St(Et,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Lt(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Lt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function(){return"#"+Dt(this.r)+Dt(this.g)+Dt(this.b)},toString:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),Nt(Ot,qt,St(Et,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ot(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ot(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),n=isNaN(t)||isNaN(this.s)?0:this.s,e=this.l,r=e+(e<.5?e:1-e)*n,i=2*e-r;return new Lt(Yt(t>=240?t-240:t+120,i,r),Yt(t,i,r),Yt(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Us=Math.PI/180,qs=180/Math.PI,Os=.96422,Ys=1,Bs=.82521,Fs=4/29,Is=6/29,js=3*Is*Is,Hs=Is*Is*Is;Nt(It,Ft,St(Et,{brighter:function(t){return new It(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new It(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return n=Os*Ht(n),t=Ys*Ht(t),e=Bs*Ht(e),new Lt(Xt(3.1338561*n-1.6168667*t-.4906146*e),Xt(-.9787684*n+1.9161415*t+.033454*e),Xt(.0719453*n-.2289914*t+1.4052427*e),this.opacity)}})),Nt(Wt,$t,St(Et,{brighter:function(t){return new Wt(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Wt(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Bt(this).rgb()}}));var Xs=-.29227,Gs=-.90649,Vs=1.97294,$s=Vs*Gs,Ws=1.78277*Vs,Zs=1.78277*Xs- -.14861*Gs;Nt(Qt,Zt,St(Et,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Qt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Qt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Us,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new Lt(255*(n+e*(-.14861*r+1.78277*i)),255*(n+e*(Xs*r+Gs*i)),255*(n+e*(Vs*r)),this.opacity)}}));var Qs,Js,Ks,tl,nl,el,rl=function t(n){function e(t,n){var e=r((t=Rt(t)).r,(n=Rt(n)).r),i=r(t.g,n.g),o=r(t.b,n.b),a=an(t.opacity,n.opacity);return function(n){return t.r=e(n),t.g=i(n),t.b=o(n),t.opacity=a(n),t+""}}var r=on(n);return e.gamma=t,e}(1),il=un(Kt),ol=un(tn),al=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,ul=new RegExp(al.source,"g"),fl=180/Math.PI,cl={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},sl=gn(function(t){return"none"===t?cl:(Qs||(Qs=document.createElement("DIV"),Js=document.documentElement,Ks=document.defaultView),Qs.style.transform=t,t=Ks.getComputedStyle(Js.appendChild(Qs),null).getPropertyValue("transform"),Js.removeChild(Qs),t=t.slice(7,-1).split(","),vn(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},"px, ","px)","deg)"),ll=gn(function(t){return null==t?cl:(tl||(tl=document.createElementNS("http://www.w3.org/2000/svg","g")),tl.setAttribute("transform",t),(t=tl.transform.baseVal.consolidate())?(t=t.matrix,vn(t.a,t.b,t.c,t.d,t.e,t.f)):cl)},", ",")",")"),hl=Math.SQRT2,dl=2,pl=4,vl=1e-12,gl=bn(rn),yl=bn(an),_l=mn(rn),bl=mn(an),ml=xn(rn),xl=xn(an),wl=0,Ml=0,Al=0,Tl=1e3,Nl=0,Sl=0,El=0,kl="object"==typeof performance&&performance.now?performance:Date,Cl="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};An.prototype=Tn.prototype={constructor:An,restart:function(t,n,e){if("function"!=typeof t)throw new TypeError("callback is not a function");e=(null==e?wn():+e)+(null==n?0:+n),this._next||el===this||(el?el._next=this:nl=this,el=this),this._call=t,this._time=e,kn()},stop:function(){this._call&&(this._call=null,this._time=1/0,kn())}};var Pl=N("start","end","interrupt"),zl=[],Rl=0,Ll=1,Dl=2,Ul=3,ql=4,Ol=5,Yl=6,Bl=ft.prototype.constructor,Fl=0,Il=ft.prototype;On.prototype=Yn.prototype={constructor:On,select:function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=z(t));for(var r=this._groups,i=r.length,o=new Array(i),a=0;a<i;++a)for(var u,f,c=r[a],s=c.length,l=o[a]=new Array(s),h=0;h<s;++h)(u=c[h])&&(f=t.call(u,u.__data__,h,c))&&("__data__"in u&&(f.__data__=u.__data__),l[h]=f,Pn(l[h],n,e,h,l,Ln(u,e)));return new On(o,this._parents,n,e)},selectAll:function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=L(t));for(var r=this._groups,i=r.length,o=[],a=[],u=0;u<i;++u)for(var f,c=r[u],s=c.length,l=0;l<s;++l)if(f=c[l]){for(var h,d=t.call(f,f.__data__,l,c),p=Ln(f,e),v=0,g=d.length;v<g;++v)(h=d[v])&&Pn(h,n,e,v,d,p);o.push(d),a.push(f)}return new On(o,a,n,e)},filter:function(t){"function"!=typeof t&&(t=bs(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,a=n[i],u=a.length,f=r[i]=[],c=0;c<u;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&f.push(o);return new On(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var n=this._groups,e=t._groups,r=n.length,i=e.length,o=Math.min(r,i),a=new Array(r),u=0;u<o;++u)for(var f,c=n[u],s=e[u],l=c.length,h=a[u]=new Array(l),d=0;d<l;++d)(f=c[d]||s[d])&&(h[d]=f);for(;u<r;++u)a[u]=n[u];return new On(a,this._parents,this._name,this._id)},selection:function(){return new Bl(this._groups,this._parents)},transition:function(){for(var t=this._name,n=this._id,e=Bn(),r=this._groups,i=r.length,o=0;o<i;++o)for(var a,u=r[o],f=u.length,c=0;c<f;++c)if(a=u[c]){var s=Ln(a,n);Pn(a,t,e,c,u,{time:s.time+s.delay+s.duration,delay:0,duration:s.duration,ease:s.ease})}return new On(r,this._parents,t,e)},call:Il.call,nodes:Il.nodes,node:Il.node,size:Il.size,empty:Il.empty,each:Il.each,on:function(t,n){var e=this._id;return arguments.length<2?Ln(this.node(),e).on.on(t):this.each(function(t,n,e){var r,i,o=function(t){return(t+"").trim().split(/^|\s+/).every(function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||"start"===t})}(n)?zn:Rn;return function(){var a=o(this,t),u=a.on;u!==r&&(i=(r=u).copy()).on(n,e),a.on=i}}(e,t,n))},attr:function(t,n){var e=k(t),r="transform"===e?ll:qn;return this.attrTween(t,"function"==typeof n?(e.local?function(t,n,e){var r,i,o;return function(){var a,u=e(this);if(null!=u)return(a=this.getAttributeNS(t.space,t.local))===u?null:a===r&&u===i?o:o=n(r=a,i=u);this.removeAttributeNS(t.space,t.local)}}:function(t,n,e){var r,i,o;return function(){var a,u=e(this);if(null!=u)return(a=this.getAttribute(t))===u?null:a===r&&u===i?o:o=n(r=a,i=u);this.removeAttribute(t)}})(e,r,Un(this,"attr."+t,n)):null==n?(e.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(e):(e.local?function(t,n,e){var r,i;return function(){var o=this.getAttributeNS(t.space,t.local);return o===e?null:o===r?i:i=n(r=o,e)}}:function(t,n,e){var r,i;return function(){var o=this.getAttribute(t);return o===e?null:o===r?i:i=n(r=o,e)}})(e,r,n+""))},attrTween:function(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(null==n)return this.tween(e,null);if("function"!=typeof n)throw new Error;var r=k(t);return this.tween(e,(r.local?function(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttributeNS(t.space,t.local,r(n))}}return e._value=n,e}:function(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttribute(t,r(n))}}return e._value=n,e})(r,n))},style:function(t,n,e){var r="transform"==(t+="")?sl:qn;return null==n?this.styleTween(t,function(t,n){var e,r,i;return function(){var o=F(this,t),a=(this.style.removeProperty(t),F(this,t));return o===a?null:o===e&&a===r?i:i=n(e=o,r=a)}}(t,r)).on("end.style."+t,function(t){return function(){this.style.removeProperty(t)}}(t)):this.styleTween(t,"function"==typeof n?function(t,n,e){var r,i,o;return function(){var a=F(this,t),u=e(this);return null==u&&(this.style.removeProperty(t),u=F(this,t)),a===u?null:a===r&&u===i?o:o=n(r=a,i=u)}}(t,r,Un(this,"style."+t,n)):function(t,n,e){var r,i;return function(){var o=F(this,t);return o===e?null:o===r?i:i=n(r=o,e)}}(t,r,n+""),e)},styleTween:function(t,n,e){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==n)return this.tween(r,null);if("function"!=typeof n)throw new Error;return this.tween(r,function(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}(t,n,null==e?"":e))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var n=t(this);this.textContent=null==n?"":n}}(Un(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",function(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}(this._id))},tween:function(t,n){var e=this._id;if(t+="",arguments.length<2){for(var r,i=Ln(this.node(),e).tween,o=0,a=i.length;o<a;++o)if((r=i[o]).name===t)return r.value;return null}return this.each((null==n?function(t,n){var e,r;return function(){var i=Rn(this,t),o=i.tween;if(o!==e)for(var a=0,u=(r=e=o).length;a<u;++a)if(r[a].name===n){(r=r.slice()).splice(a,1);break}i.tween=r}}:function(t,n,e){var r,i;if("function"!=typeof e)throw new Error;return function(){var o=Rn(this,t),a=o.tween;if(a!==r){i=(r=a).slice();for(var u={name:n,value:e},f=0,c=i.length;f<c;++f)if(i[f].name===n){i[f]=u;break}f===c&&i.push(u)}o.tween=i}})(e,t,n))},delay:function(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?function(t,n){return function(){zn(this,t).delay=+n.apply(this,arguments)}}:function(t,n){return n=+n,function(){zn(this,t).delay=n}})(n,t)):Ln(this.node(),n).delay},duration:function(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?function(t,n){return function(){Rn(this,t).duration=+n.apply(this,arguments)}}:function(t,n){return n=+n,function(){Rn(this,t).duration=n}})(n,t)):Ln(this.node(),n).duration},ease:function(t){var n=this._id;return arguments.length?this.each(function(t,n){if("function"!=typeof n)throw new Error;return function(){Rn(this,t).ease=n}}(n,t)):Ln(this.node(),n).ease}};var jl=function t(n){function e(t){return Math.pow(t,n)}return n=+n,e.exponent=t,e}(3),Hl=function t(n){function e(t){return 1-Math.pow(1-t,n)}return n=+n,e.exponent=t,e}(3),Xl=function t(n){function e(t){return((t*=2)<=1?Math.pow(t,n):2-Math.pow(2-t,n))/2}return n=+n,e.exponent=t,e}(3),Gl=Math.PI,Vl=Gl/2,$l=4/11,Wl=6/11,Zl=8/11,Ql=.75,Jl=9/11,Kl=10/11,th=.9375,nh=21/22,eh=63/64,rh=1/$l/$l,ih=function t(n){function e(t){return t*t*((n+1)*t-n)}return n=+n,e.overshoot=t,e}(1.70158),oh=function t(n){function e(t){return--t*t*((n+1)*t+n)+1}return n=+n,e.overshoot=t,e}(1.70158),ah=function t(n){function e(t){return((t*=2)<1?t*t*((n+1)*t-n):(t-=2)*t*((n+1)*t+n)+2)/2}return n=+n,e.overshoot=t,e}(1.70158),uh=2*Math.PI,fh=function t(n,e){function r(t){return n*Math.pow(2,10*--t)*Math.sin((i-t)/e)}var i=Math.asin(1/(n=Math.max(1,n)))*(e/=uh);return r.amplitude=function(n){return t(n,e*uh)},r.period=function(e){return t(n,e)},r}(1,.3),ch=function t(n,e){function r(t){return 1-n*Math.pow(2,-10*(t=+t))*Math.sin((t+i)/e)}var i=Math.asin(1/(n=Math.max(1,n)))*(e/=uh);return r.amplitude=function(n){return t(n,e*uh)},r.period=function(e){return t(n,e)},r}(1,.3),sh=function t(n,e){function r(t){return((t=2*t-1)<0?n*Math.pow(2,10*t)*Math.sin((i-t)/e):2-n*Math.pow(2,-10*t)*Math.sin((i+t)/e))/2}var i=Math.asin(1/(n=Math.max(1,n)))*(e/=uh);return r.amplitude=function(n){return t(n,e*uh)},r.period=function(e){return t(n,e)},r}(1,.3),lh={time:null,delay:0,duration:250,ease:In};ft.prototype.interrupt=function(t){return this.each(function(){Dn(this,t)})},ft.prototype.transition=function(t){var n,e;t instanceof On?(n=t._id,t=t._name):(n=Bn(),(e=lh).time=wn(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,o=0;o<i;++o)for(var a,u=r[o],f=u.length,c=0;c<f;++c)(a=u[c])&&Pn(a,t,n,c,u,e||Vn(a,n));return new On(r,this._parents,t,n)};var hh=[null],dh={name:"drag"},ph={name:"space"},vh={name:"handle"},gh={name:"center"},yh={name:"x",handles:["e","w"].map(Qn),input:function(t,n){return t&&[[t[0],n[0][1]],[t[1],n[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},_h={name:"y",handles:["n","s"].map(Qn),input:function(t,n){return t&&[[n[0][0],t[0]],[n[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},bh={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(Qn),input:function(t){return t},output:function(t){return t}},mh={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},xh={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},wh={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},Mh={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},Ah={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1},Th=Math.cos,Nh=Math.sin,Sh=Math.PI,Eh=Sh/2,kh=2*Sh,Ch=Math.max,Ph=Array.prototype.slice,zh=Math.PI,Rh=2*zh,Lh=Rh-1e-6;ie.prototype=oe.prototype={constructor:ie,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,r){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+r)},bezierCurveTo:function(t,n,e,r,i,o){this._+="C"+ +t+","+ +n+","+ +e+","+ +r+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(t,n,e,r,i){t=+t,n=+n,e=+e,r=+r,i=+i;var o=this._x1,a=this._y1,u=e-t,f=r-n,c=o-t,s=a-n,l=c*c+s*s;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(l>1e-6)if(Math.abs(s*u-f*c)>1e-6&&i){var h=e-o,d=r-a,p=u*u+f*f,v=h*h+d*d,g=Math.sqrt(p),y=Math.sqrt(l),_=i*Math.tan((zh-Math.acos((p+l-v)/(2*g*y)))/2),b=_/y,m=_/g;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*c)+","+(n+b*s)),this._+="A"+i+","+i+",0,0,"+ +(s*h>c*d)+","+(this._x1=t+m*u)+","+(this._y1=n+m*f)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n;var a=(e=+e)*Math.cos(r),u=e*Math.sin(r),f=t+a,c=n+u,s=1^o,l=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+f+","+c:(Math.abs(this._x1-f)>1e-6||Math.abs(this._y1-c)>1e-6)&&(this._+="L"+f+","+c),e&&(l<0&&(l=l%Rh+Rh),l>Lh?this._+="A"+e+","+e+",0,1,"+s+","+(t-a)+","+(n-u)+"A"+e+","+e+",0,1,"+s+","+(this._x1=f)+","+(this._y1=c):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=zh)+","+s+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};le.prototype=he.prototype={constructor:le,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var Dh=he.prototype;ye.prototype=_e.prototype={constructor:ye,has:Dh.has,add:function(t){return t+="",this["$"+t]=t,this},remove:Dh.remove,clear:Dh.clear,values:Dh.keys,size:Dh.size,empty:Dh.empty,each:Dh.each};var Uh=Array.prototype.slice,qh=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],Oh={},Yh={},Bh=34,Fh=10,Ih=13,jh=ke(","),Hh=jh.parse,Xh=jh.parseRows,Gh=jh.format,Vh=jh.formatRows,$h=ke("\t"),Wh=$h.parse,Zh=$h.parseRows,Qh=$h.format,Jh=$h.formatRows,Kh=Le(Hh),td=Le(Wh),nd=Ue("application/xml"),ed=Ue("text/html"),rd=Ue("image/svg+xml"),id=je.prototype=He.prototype;id.copy=function(){var t,n,e=new He(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=Xe(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=Xe(n));return e},id.add=function(t){var n=+this._x.call(null,t),e=+this._y.call(null,t);return Ye(this.cover(n,e),n,e,t)},id.addAll=function(t){var n,e,r,i,o=t.length,a=new Array(o),u=new Array(o),f=1/0,c=1/0,s=-1/0,l=-1/0;for(e=0;e<o;++e)isNaN(r=+this._x.call(null,n=t[e]))||isNaN(i=+this._y.call(null,n))||(a[e]=r,u[e]=i,r<f&&(f=r),r>s&&(s=r),i<c&&(c=i),i>l&&(l=i));for(s<f&&(f=this._x0,s=this._x1),l<c&&(c=this._y0,l=this._y1),this.cover(f,c).cover(s,l),e=0;e<o;++e)Ye(this,a[e],u[e],t[e]);return this},id.cover=function(t,n){if(isNaN(t=+t)||isNaN(n=+n))return this;var e=this._x0,r=this._y0,i=this._x1,o=this._y1;if(isNaN(e))i=(e=Math.floor(t))+1,o=(r=Math.floor(n))+1;else{if(!(e>t||t>i||r>n||n>o))return this;var a,u,f=i-e,c=this._root;switch(u=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{a=new Array(4),a[u]=c,c=a}while(f*=2,i=e+f,o=r+f,t>i||n>o);break;case 1:do{a=new Array(4),a[u]=c,c=a}while(f*=2,e=i-f,o=r+f,e>t||n>o);break;case 2:do{a=new Array(4),a[u]=c,c=a}while(f*=2,i=e+f,r=o-f,t>i||r>n);break;case 3:do{a=new Array(4),a[u]=c,c=a}while(f*=2,e=i-f,r=o-f,e>t||r>n)}this._root&&this._root.length&&(this._root=c)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},id.data=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},id.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},id.find=function(t,n,e){var r,i,o,a,u,f,c,s=this._x0,l=this._y0,h=this._x1,d=this._y1,p=[],v=this._root;for(v&&p.push(new Be(v,s,l,h,d)),null==e?e=1/0:(s=t-e,l=n-e,h=t+e,d=n+e,e*=e);f=p.pop();)if(!(!(v=f.node)||(i=f.x0)>h||(o=f.y0)>d||(a=f.x1)<s||(u=f.y1)<l))if(v.length){var g=(i+a)/2,y=(o+u)/2;p.push(new Be(v[3],g,y,a,u),new Be(v[2],i,y,g,u),new Be(v[1],g,o,a,y),new Be(v[0],i,o,g,y)),(c=(n>=y)<<1|t>=g)&&(f=p[p.length-1],p[p.length-1]=p[p.length-1-c],p[p.length-1-c]=f)}else{var _=t-+this._x.call(null,v.data),b=n-+this._y.call(null,v.data),m=_*_+b*b;if(m<e){var x=Math.sqrt(e=m);s=t-x,l=n-x,h=t+x,d=n+x,r=v.data}}return r},id.remove=function(t){if(isNaN(o=+this._x.call(null,t))||isNaN(a=+this._y.call(null,t)))return this;var n,e,r,i,o,a,u,f,c,s,l,h,d=this._root,p=this._x0,v=this._y0,g=this._x1,y=this._y1;if(!d)return this;if(d.length)for(;;){if((c=o>=(u=(p+g)/2))?p=u:g=u,(s=a>=(f=(v+y)/2))?v=f:y=f,n=d,!(d=d[l=s<<1|c]))return this;if(!d.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(d=n[0]||n[1]||n[2]||n[3])&&d===(n[3]||n[2]||n[1]||n[0])&&!d.length&&(e?e[h]=d:this._root=d),this):(this._root=i,this)},id.removeAll=function(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this},id.root=function(){return this._root},id.size=function(){var t=0;return this.visit(function(n){if(!n.length)do{++t}while(n=n.next)}),t},id.visit=function(t){var n,e,r,i,o,a,u=[],f=this._root;for(f&&u.push(new Be(f,this._x0,this._y0,this._x1,this._y1));n=u.pop();)if(!t(f=n.node,r=n.x0,i=n.y0,o=n.x1,a=n.y1)&&f.length){var c=(r+o)/2,s=(i+a)/2;(e=f[3])&&u.push(new Be(e,c,s,o,a)),(e=f[2])&&u.push(new Be(e,r,s,c,a)),(e=f[1])&&u.push(new Be(e,c,i,o,s)),(e=f[0])&&u.push(new Be(e,r,i,c,s))}return this},id.visitAfter=function(t){var n,e=[],r=[];for(this._root&&e.push(new Be(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var o,a=n.x0,u=n.y0,f=n.x1,c=n.y1,s=(a+f)/2,l=(u+c)/2;(o=i[0])&&e.push(new Be(o,a,u,s,l)),(o=i[1])&&e.push(new Be(o,s,u,f,l)),(o=i[2])&&e.push(new Be(o,a,l,s,c)),(o=i[3])&&e.push(new Be(o,s,l,f,c))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this},id.x=function(t){return arguments.length?(this._x=t,this):this._x},id.y=function(t){return arguments.length?(this._y=t,this):this._y};var od=10,ad=Math.PI*(3-Math.sqrt(5)),ud=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;tr.prototype=nr.prototype,nr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var fd,cd,sd={"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return er(100*t,n)},r:er,s:function(t,n){var e=Je(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(fd=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Je(t,Math.max(0,n+o-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},ld=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];or({decimal:".",thousands:",",grouping:[3],currency:["$",""]}),sr.prototype={constructor:sr,reset:function(){this.s=this.t=0},add:function(t){lr(jd,t,this.t),lr(this,jd.s,this.s),this.s?this.t+=jd.t:this.s=jd.t},valueOf:function(){return this.s}};var hd,dd,pd,vd,gd,yd,_d,bd,md,xd,wd,Md,Ad,Td,Nd,Sd,Ed,kd,Cd,Pd,zd,Rd,Ld,Dd,Ud,qd,Od,Yd,Bd,Fd,Id,jd=new sr,Hd=1e-6,Xd=1e-12,Gd=Math.PI,Vd=Gd/2,$d=Gd/4,Wd=2*Gd,Zd=180/Gd,Qd=Gd/180,Jd=Math.abs,Kd=Math.atan,tp=Math.atan2,np=Math.cos,ep=Math.ceil,rp=Math.exp,ip=Math.log,op=Math.pow,ap=Math.sin,up=Math.sign||function(t){return t>0?1:t<0?-1:0},fp=Math.sqrt,cp=Math.tan,sp={Feature:function(t,n){gr(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++r<i;)gr(e[r].geometry,n)}},lp={Sphere:function(t,n){n.sphere()},Point:function(t,n){t=t.coordinates,n.point(t[0],t[1],t[2])},MultiPoint:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)t=e[r],n.point(t[0],t[1],t[2])},LineString:function(t,n){yr(t.coordinates,n,0)},MultiLineString:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)yr(e[r],n,0)},Polygon:function(t,n){_r(t.coordinates,n)},MultiPolygon:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)_r(e[r],n)},GeometryCollection:function(t,n){for(var e=t.geometries,r=-1,i=e.length;++r<i;)gr(e[r],n)}},hp=cr(),dp=cr(),pp={point:vr,lineStart:vr,lineEnd:vr,polygonStart:function(){hp.reset(),pp.lineStart=mr,pp.lineEnd=xr},polygonEnd:function(){var t=+hp;dp.add(t<0?Wd+t:t),this.lineStart=this.lineEnd=this.point=vr},sphere:function(){dp.add(Wd)}},vp=cr(),gp={point:Pr,lineStart:Rr,lineEnd:Lr,polygonStart:function(){gp.point=Dr,gp.lineStart=Ur,gp.lineEnd=qr,vp.reset(),pp.polygonStart()},polygonEnd:function(){pp.polygonEnd(),gp.point=Pr,gp.lineStart=Rr,gp.lineEnd=Lr,hp<0?(yd=-(bd=180),_d=-(md=90)):vp>Hd?md=90:vp<-Hd&&(_d=-90),Nd[0]=yd,Nd[1]=bd}},yp={sphere:vr,point:Fr,lineStart:jr,lineEnd:Gr,polygonStart:function(){yp.lineStart=Vr,yp.lineEnd=$r},polygonEnd:function(){yp.lineStart=jr,yp.lineEnd=Gr}};Kr.invert=Kr;var _p,bp,mp,xp,wp,Mp,Ap,Tp,Np,Sp,Ep,kp=cr(),Cp=di(function(){return!0},function(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,a){var u=o>0?Gd:-Gd,f=Jd(o-e);Jd(f-Gd)<Hd?(t.point(e,r=(r+a)/2>0?Vd:-Vd),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(o,r),n=0):i!==u&&f>=Gd&&(Jd(e-i)<Hd&&(e-=i*Hd),Jd(o-u)<Hd&&(o-=u*Hd),r=function(t,n,e,r){var i,o,a=ap(t-e);return Jd(a)>Hd?Kd((ap(n)*(o=np(r))*ap(e)-ap(r)*(i=np(n))*ap(t))/(i*o*a)):(n+r)/2}(e,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),n=0),t.point(e=o,r=a),i=u},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}},function(t,n,e,r){var i;if(null==t)i=e*Vd,r.point(-Gd,i),r.point(0,i),r.point(Gd,i),r.point(Gd,0),r.point(Gd,-i),r.point(0,-i),r.point(-Gd,-i),r.point(-Gd,0),r.point(-Gd,i);else if(Jd(t[0]-n[0])>Hd){var o=t[0]<n[0]?Gd:-Gd;i=e*o/2,r.point(-o,i),r.point(0,i),r.point(o,i)}else r.point(n[0],n[1])},[-Gd,-Vd]),Pp=1e9,zp=-Pp,Rp=cr(),Lp={sphere:vr,point:vr,lineStart:function(){Lp.point=bi,Lp.lineEnd=_i},lineEnd:vr,polygonStart:vr,polygonEnd:vr},Dp=[null,null],Up={type:"LineString",coordinates:Dp},qp={Feature:function(t,n){return Mi(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++r<i;)if(Mi(e[r].geometry,n))return!0;return!1}},Op={Sphere:function(){return!0},Point:function(t,n){return Ai(t.coordinates,n)},MultiPoint:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)if(Ai(e[r],n))return!0;return!1},LineString:function(t,n){return Ti(t.coordinates,n)},MultiLineString:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)if(Ti(e[r],n))return!0;return!1},Polygon:function(t,n){return Ni(t.coordinates,n)},MultiPolygon:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)if(Ni(e[r],n))return!0;return!1},GeometryCollection:function(t,n){for(var e=t.geometries,r=-1,i=e.length;++r<i;)if(Mi(e[r],n))return!0;return!1}},Yp=cr(),Bp=cr(),Fp={point:vr,lineStart:vr,lineEnd:vr,polygonStart:function(){Fp.lineStart=Ri,Fp.lineEnd=Ui},polygonEnd:function(){Fp.lineStart=Fp.lineEnd=Fp.point=vr,Yp.add(Jd(Bp)),Bp.reset()},result:function(){var t=Yp/2;return Yp.reset(),t}},Ip=1/0,jp=Ip,Hp=-Ip,Xp=Hp,Gp={point:function(t,n){t<Ip&&(Ip=t),t>Hp&&(Hp=t),n<jp&&(jp=n),n>Xp&&(Xp=n)},lineStart:vr,lineEnd:vr,polygonStart:vr,polygonEnd:vr,result:function(){var t=[[Ip,jp],[Hp,Xp]];return Hp=Xp=-(jp=Ip=1/0),t}},Vp=0,$p=0,Wp=0,Zp=0,Qp=0,Jp=0,Kp=0,tv=0,nv=0,ev={point:qi,lineStart:Oi,lineEnd:Fi,polygonStart:function(){ev.lineStart=Ii,ev.lineEnd=ji},polygonEnd:function(){ev.point=qi,ev.lineStart=Oi,ev.lineEnd=Fi},result:function(){var t=nv?[Kp/nv,tv/nv]:Jp?[Zp/Jp,Qp/Jp]:Wp?[Vp/Wp,$p/Wp]:[NaN,NaN];return Vp=$p=Wp=Zp=Qp=Jp=Kp=tv=nv=0,t}};Gi.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._context.moveTo(t,n),this._point=1;break;case 1:this._context.lineTo(t,n);break;default:this._context.moveTo(t+this._radius,n),this._context.arc(t,n,this._radius,0,Wd)}},result:vr};var rv,iv,ov,av,uv,fv=cr(),cv={point:vr,lineStart:function(){cv.point=Vi},lineEnd:function(){rv&&$i(iv,ov),cv.point=vr},polygonStart:function(){rv=!0},polygonEnd:function(){rv=null},result:function(){var t=+fv;return fv.reset(),t}};Wi.prototype={_radius:4.5,_circle:Zi(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._string.push("M",t,",",n),this._point=1;break;case 1:this._string.push("L",t,",",n);break;default:null==this._circle&&(this._circle=Zi(this._radius)),this._string.push("M",t,",",n,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Ji.prototype={constructor:Ji,point:function(t,n){this.stream.point(t,n)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var sv=16,lv=np(30*Qd),hv=Qi({point:function(t,n){this.stream.point(t*Qd,n*Qd)}}),dv=ho(function(t){return fp(2/(1+t))});dv.invert=po(function(t){return 2*dr(t/2)});var pv=ho(function(t){return(t=hr(t))&&t/ap(t)});pv.invert=po(function(t){return t}),vo.invert=function(t,n){return[t,2*Kd(rp(n))-Vd]},bo.invert=bo,xo.invert=po(Kd),Mo.invert=function(t,n){var e,r=n,i=25;do{var o=r*r,a=o*o;r-=e=(r*(1.007226+o*(.015085+a*(.028874*o-.044475-.005916*a)))-n)/(1.007226+o*(.045255+a*(.259866*o-.311325-.005916*11*a)))}while(Jd(e)>Hd&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},Ao.invert=po(dr),To.invert=po(function(t){return 2*Kd(t)}),No.invert=function(t,n){return[-n,2*Kd(rp(t))-Vd]},Do.prototype=Po.prototype={constructor:Do,count:function(){return this.eachAfter(Co)},each:function(t){var n,e,r,i,o=this,a=[o];do{for(n=a.reverse(),a=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r<i;++r)a.push(e[r])}while(a.length);return this},eachAfter:function(t){for(var n,e,r,i=this,o=[i],a=[];i=o.pop();)if(a.push(i),n=i.children)for(e=0,r=n.length;e<r;++e)o.push(n[e]);for(;i=a.pop();)t(i);return this},eachBefore:function(t){for(var n,e,r=this,i=[r];r=i.pop();)if(t(r),n=r.children)for(e=n.length-1;e>=0;--e)i.push(n[e]);return this},sum:function(t){return this.eachAfter(function(n){for(var e=+t(n.data)||0,r=n.children,i=r&&r.length;--i>=0;)e+=r[i].value;n.value=e})},sort:function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},path:function(t){for(var n=this,e=function(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},descendants:function(){var t=[];return this.each(function(n){t.push(n)}),t},leaves:function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},links:function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n},copy:function(){return Po(this).eachBefore(Ro)}};var vv=Array.prototype.slice,gv="$",yv={depth:-1},_v={};ca.prototype=Object.create(Do.prototype);var bv=(1+Math.sqrt(5))/2,mv=function t(n){function e(t,e,r,i,o){la(n,t,e,r,i,o)}return e.ratio=function(n){return t((n=+n)>1?n:1)},e}(bv),xv=function t(n){function e(t,e,r,i,o){if((a=t._squarify)&&a.ratio===n)for(var a,u,f,c,s,l=-1,h=a.length,d=t.value;++l<h;){for(f=(u=a[l]).children,c=u.value=0,s=f.length;c<s;++c)u.value+=f[c].value;u.dice?na(u,e,r,i,r+=(o-r)*u.value/d):sa(u,e,r,e+=(i-e)*u.value/d,o),d-=u.value}else t._squarify=a=la(n,t,e,r,i,o),a.ratio=n}return e.ratio=function(n){return t((n=+n)>1?n:1)},e}(bv),wv=function t(n){function e(t,e){return t=null==t?0:+t,e=null==e?1:+e,1===arguments.length?(e=t,t=0):e-=t,function(){return n()*e+t}}return e.source=t,e}(va),Mv=function t(n){function e(t,e){var r,i;return t=null==t?0:+t,e=null==e?1:+e,function(){var o;if(null!=r)o=r,r=null;else do{r=2*n()-1,o=2*n()-1,i=r*r+o*o}while(!i||i>1);return t+e*o*Math.sqrt(-2*Math.log(i)/i)}}return e.source=t,e}(va),Av=function t(n){function e(){var t=Mv.source(n).apply(this,arguments);return function(){return Math.exp(t())}}return e.source=t,e}(va),Tv=function t(n){function e(t){return function(){for(var e=0,r=0;r<t;++r)e+=n();return e}}return e.source=t,e}(va),Nv=function t(n){function e(t){var e=Tv.source(n)(t);return function(){return e()/t}}return e.source=t,e}(va),Sv=function t(n){function e(t){return function(){return-Math.log(1-n())/t}}return e.source=t,e}(va),Ev=Array.prototype,kv=Ev.map,Cv=Ev.slice,Pv={name:"implicit"},zv=[0,1],Rv=new Date,Lv=new Date,Dv=Ia(function(){},function(t,n){t.setTime(+t+n)},function(t,n){return n-t});Dv.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Ia(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):Dv:null};var Uv=Dv.range,qv=6e4,Ov=6048e5,Yv=Ia(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),Bv=Yv.range,Fv=Ia(function(t){t.setTime(Math.floor(t/qv)*qv)},function(t,n){t.setTime(+t+n*qv)},function(t,n){return(n-t)/qv},function(t){return t.getMinutes()}),Iv=Fv.range,jv=Ia(function(t){var n=t.getTimezoneOffset()*qv%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),Hv=jv.range,Xv=Ia(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*qv)/864e5},function(t){return t.getDate()-1}),Gv=Xv.range,Vv=ja(0),$v=ja(1),Wv=ja(2),Zv=ja(3),Qv=ja(4),Jv=ja(5),Kv=ja(6),tg=Vv.range,ng=$v.range,eg=Wv.range,rg=Zv.range,ig=Qv.range,og=Jv.range,ag=Kv.range,ug=Ia(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),fg=ug.range,cg=Ia(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});cg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ia(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};var sg=cg.range,lg=Ia(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*qv)},function(t,n){return(n-t)/qv},function(t){return t.getUTCMinutes()}),hg=lg.range,dg=Ia(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()}),pg=dg.range,vg=Ia(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),gg=vg.range,yg=Ha(0),_g=Ha(1),bg=Ha(2),mg=Ha(3),xg=Ha(4),wg=Ha(5),Mg=Ha(6),Ag=yg.range,Tg=_g.range,Ng=bg.range,Sg=mg.range,Eg=xg.range,kg=wg.range,Cg=Mg.range,Pg=Ia(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),zg=Pg.range,Rg=Ia(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});Rg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ia(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var Lg,Dg=Rg.range,Ug={"-":"",_:" ",0:"0"},qg=/^\s*\d+/,Og=/^%/,Yg=/[\\^$*+?|[\]().{}]/g;nf({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Bg="%Y-%m-%dT%H:%M:%S.%LZ",Fg=Date.prototype.toISOString?function(t){return t.toISOString()}:t.utcFormat(Bg),Ig=+new Date("2000-01-01T00:00:00.000Z")?function(t){var n=new Date(t);return isNaN(n)?null:n}:t.utcParse(Bg),jg=1e3,Hg=60*jg,Xg=60*Hg,Gg=24*Xg,Vg=7*Gg,$g=30*Gg,Wg=365*Gg,Zg=ff("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Qg=ff("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),Jg=ff("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),Kg=ff("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),ty=ff("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),ny=ff("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),ey=ff("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),ry=ff("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),iy=ff("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),oy=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(ff),ay=cf(oy),uy=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(ff),fy=cf(uy),cy=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(ff),sy=cf(cy),ly=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(ff),hy=cf(ly),dy=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(ff),py=cf(dy),vy=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(ff),gy=cf(vy),yy=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(ff),_y=cf(yy),by=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(ff),my=cf(by),xy=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(ff),wy=cf(xy),My=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(ff),Ay=cf(My),Ty=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(ff),Ny=cf(Ty),Sy=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(ff),Ey=cf(Sy),ky=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(ff),Cy=cf(ky),Py=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(ff),zy=cf(Py),Ry=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(ff),Ly=cf(Ry),Dy=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(ff),Uy=cf(Dy),qy=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(ff),Oy=cf(qy),Yy=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(ff),By=cf(Yy),Fy=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(ff),Iy=cf(Fy),jy=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(ff),Hy=cf(jy),Xy=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(ff),Gy=cf(Xy),Vy=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(ff),$y=cf(Vy),Wy=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(ff),Zy=cf(Wy),Qy=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(ff),Jy=cf(Qy),Ky=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(ff),t_=cf(Ky),n_=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(ff),e_=cf(n_),r_=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(ff),i_=cf(r_),o_=xl(Zt(300,.5,0),Zt(-240,.5,1)),a_=xl(Zt(-100,.75,.35),Zt(80,1.5,.8)),u_=xl(Zt(260,.75,.35),Zt(80,1.5,.8)),f_=Zt(),c_=Rt(),s_=Math.PI/3,l_=2*Math.PI/3,h_=sf(ff("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),d_=sf(ff("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),p_=sf(ff("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),v_=sf(ff("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),g_=Math.abs,y_=Math.atan2,__=Math.cos,b_=Math.max,m_=Math.min,x_=Math.sin,w_=Math.sqrt,M_=1e-12,A_=Math.PI,T_=A_/2,N_=2*A_;bf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var S_=Ef(mf);Sf.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};var E_=Array.prototype.slice,k_={draw:function(t,n){var e=Math.sqrt(n/A_);t.moveTo(e,0),t.arc(0,0,e,0,N_)}},C_={draw:function(t,n){var e=Math.sqrt(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}},P_=Math.sqrt(1/3),z_=2*P_,R_={draw:function(t,n){var e=Math.sqrt(n/z_),r=e*P_;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},L_=Math.sin(A_/10)/Math.sin(7*A_/10),D_=Math.sin(N_/10)*L_,U_=-Math.cos(N_/10)*L_,q_={draw:function(t,n){var e=Math.sqrt(.8908130915292852*n),r=D_*e,i=U_*e;t.moveTo(0,-e),t.lineTo(r,i);for(var o=1;o<5;++o){var a=N_*o/5,u=Math.cos(a),f=Math.sin(a);t.lineTo(f*e,-u*e),t.lineTo(u*r-f*i,f*r+u*i)}t.closePath()}},O_={draw:function(t,n){var e=Math.sqrt(n),r=-e/2;t.rect(r,r,e,e)}},Y_=Math.sqrt(3),B_={draw:function(t,n){var e=-Math.sqrt(n/(3*Y_));t.moveTo(0,2*e),t.lineTo(-Y_*e,-e),t.lineTo(Y_*e,-e),t.closePath()}},F_=Math.sqrt(3)/2,I_=1/Math.sqrt(12),j_=3*(I_/2+1),H_={draw:function(t,n){var e=Math.sqrt(n/j_),r=e/2,i=e*I_,o=r,a=e*I_+e,u=-o,f=a;t.moveTo(r,i),t.lineTo(o,a),t.lineTo(u,f),t.lineTo(-.5*r-F_*i,F_*r+-.5*i),t.lineTo(-.5*o-F_*a,F_*o+-.5*a),t.lineTo(-.5*u-F_*f,F_*u+-.5*f),t.lineTo(-.5*r+F_*i,-.5*i-F_*r),t.lineTo(-.5*o+F_*a,-.5*a-F_*o),t.lineTo(-.5*u+F_*f,-.5*f-F_*u),t.closePath()}},X_=[k_,C_,R_,O_,q_,B_,H_];Ff.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Bf(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Bf(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},If.prototype={areaStart:Yf,areaEnd:Yf,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:Bf(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},jf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:Bf(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Hf.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],a=t[e]-i,u=n[e]-o,f=-1;++f<=e;)r=f/e,this._basis.point(this._beta*t[f]+(1-this._beta)*(i+r*a),this._beta*n[f]+(1-this._beta)*(o+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var G_=function t(n){function e(t){return 1===n?new Ff(t):new Hf(t,n)}return e.beta=function(n){return t(+n)},e}(.85);Gf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Xf(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:Xf(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var V_=function t(n){function e(t){return new Gf(t,n)}return e.tension=function(n){return t(+n)},e}(0);Vf.prototype={areaStart:Yf,areaEnd:Yf,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Xf(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var $_=function t(n){function e(t){return new Vf(t,n)}return e.tension=function(n){return t(+n)},e}(0);$f.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Xf(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var W_=function t(n){function e(t){return new $f(t,n)}return e.tension=function(n){return t(+n)},e}(0);Zf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Wf(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Z_=function t(n){function e(t){return n?new Zf(t,n):new Gf(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Qf.prototype={areaStart:Yf,areaEnd:Yf,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Wf(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Q_=function t(n){function e(t){return n?new Qf(t,n):new Vf(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Jf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Wf(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var J_=function t(n){function e(t){return n?new Jf(t,n):new $f(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Kf.prototype={areaStart:Yf,areaEnd:Yf,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}},ic.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:rc(this,this._t0,ec(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,t!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,rc(this,ec(this,e=nc(this,t,n)),e);break;default:rc(this,this._t0,e=nc(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(oc.prototype=Object.create(ic.prototype)).point=function(t,n){ic.prototype.point.call(this,n,t)},ac.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,r,i,o){this._context.bezierCurveTo(n,t,r,e,o,i)}},uc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var r=fc(t),i=fc(n),o=0,a=1;a<e;++o,++a)this._context.bezierCurveTo(r[0][o],i[0][o],r[1][o],i[1][o],t[a],n[a]);(this._line||0!==this._line&&1===e)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,n){this._x.push(+t),this._y.push(+n)}},cc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}},_c.prototype={constructor:_c,insert:function(t,n){var e,r,i;if(t){if(n.P=t,n.N=t.N,t.N&&(t.N.P=n),t.N=n,t.R){for(t=t.R;t.L;)t=t.L;t.L=n}else t.R=n;e=t}else this._?(t=wc(this._),n.P=null,n.N=t,t.P=t.L=n,e=t):(n.P=n.N=null,this._=n,e=null);for(n.L=n.R=null,n.U=e,n.C=!0,t=n;e&&e.C;)e===(r=e.U).L?(i=r.R)&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.R&&(mc(this,e),e=(t=e).U),e.C=!1,r.C=!0,xc(this,r)):(i=r.L)&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.L&&(xc(this,e),e=(t=e).U),e.C=!1,r.C=!0,mc(this,r)),e=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var n,e,r,i=t.U,o=t.L,a=t.R;if(e=o?a?wc(a):o:a,i?i.L===t?i.L=e:i.R=e:this._=e,o&&a?(r=e.C,e.C=t.C,e.L=o,o.U=e,e!==a?(i=e.U,e.U=t.U,t=e.R,i.L=t,e.R=a,a.U=e):(e.U=i,i=e,t=e.R)):(r=t.C,t=e),t&&(t.U=i),!r)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((n=i.R).C&&(n.C=!1,i.C=!0,mc(this,i),n=i.R),n.L&&n.L.C||n.R&&n.R.C){n.R&&n.R.C||(n.L.C=!1,n.C=!0,xc(this,n),n=i.R),n.C=i.C,i.C=n.R.C=!1,mc(this,i),t=this._;break}}else if((n=i.L).C&&(n.C=!1,i.C=!0,xc(this,i),n=i.L),n.L&&n.L.C||n.R&&n.R.C){n.L&&n.L.C||(n.R.C=!1,n.C=!0,mc(this,n),n=i.L),n.C=i.C,i.C=n.L.C=!1,xc(this,i),t=this._;break}n.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var K_,tb,nb,eb,rb,ib=[],ob=[],ab=1e-6,ub=1e-12;Bc.prototype={constructor:Bc,polygons:function(){var t=this.edges;return this.cells.map(function(n){var e=n.halfedges.map(function(e){return kc(n,t[e])});return e.data=n.site.data,e})},triangles:function(){var t=[],n=this.edges;return this.cells.forEach(function(e,r){if(o=(i=e.halfedges).length)for(var i,o,a,u=e.site,f=-1,c=n[i[o-1]],s=c.left===u?c.right:c.left;++f<o;)a=s,s=(c=n[i[f]]).left===u?c.right:c.left,a&&s&&r<a.index&&r<s.index&&Oc(u,a,s)<0&&t.push([u.data,a.data,s.data])}),t},links:function(){return this.edges.filter(function(t){return t.right}).map(function(t){return{source:t.left.data,target:t.right.data}})},find:function(t,n,e){for(var r,i,o=this,a=o._found||0,u=o.cells.length;!(i=o.cells[a]);)if(++a>=u)return null;var f=t-i.site[0],c=n-i.site[1],s=f*f+c*c;do{i=o.cells[r=a],a=null,i.halfedges.forEach(function(e){var r=o.edges[e],u=r.left;if(u!==i.site&&u||(u=r.right)){var f=t-u[0],c=n-u[1],l=f*f+c*c;l<s&&(s=l,a=u.index)}})}while(null!==a);return o._found=r,null==e||s<=e*e?i.site:null}},Ic.prototype={constructor:Ic,scale:function(t){return 1===t?this:new Ic(this.k*t,this.x,this.y)},translate:function(t,n){return 0===t&0===n?this:new Ic(this.k,this.x+this.k*t,this.y+this.k*n)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var fb=new Ic(1,0,0);jc.prototype=Ic.prototype,t.version="5.5.0",t.bisect=Kc,t.bisectRight=Kc,t.bisectLeft=ts,t.ascending=n,t.bisector=e,t.cross=function(t,n,e){var i,o,a,u,f=t.length,c=n.length,s=new Array(f*c);for(null==e&&(e=r),i=a=0;i<f;++i)for(u=t[i],o=0;o<c;++o,++a)s[a]=e(u,n[o]);return s},t.descending=function(t,n){return n<t?-1:n>t?1:n>=t?0:NaN},t.deviation=a,t.extent=u,t.histogram=function(){function t(t){var i,o,a=t.length,u=new Array(a);for(i=0;i<a;++i)u[i]=n(t[i],i,t);var f=e(u),c=f[0],l=f[1],h=r(u,c,l);Array.isArray(h)||(h=d(c,l,h),h=s(Math.ceil(c/h)*h,Math.floor(l/h)*h,h));for(var p=h.length;h[0]<=c;)h.shift(),--p;for(;h[p-1]>l;)h.pop(),--p;var v,g=new Array(p+1);for(i=0;i<=p;++i)(v=g[i]=[]).x0=i>0?h[i-1]:c,v.x1=i<p?h[i]:l;for(i=0;i<a;++i)c<=(o=u[i])&&o<=l&&g[Kc(h,o,0,p)].push(t[i]);return g}var n=c,e=u,r=p;return t.value=function(e){return arguments.length?(n="function"==typeof e?e:f(e),t):n},t.domain=function(n){return arguments.length?(e="function"==typeof n?n:f([n[0],n[1]]),t):e},t.thresholds=function(n){return arguments.length?(r="function"==typeof n?n:Array.isArray(n)?f(es.call(n)):f(n),t):r},t},t.thresholdFreedmanDiaconis=function(t,e,r){return t=rs.call(t,i).sort(n),Math.ceil((r-e)/(2*(v(t,.75)-v(t,.25))*Math.pow(t.length,-1/3)))},t.thresholdScott=function(t,n,e){return Math.ceil((e-n)/(3.5*a(t)*Math.pow(t.length,-1/3)))},t.thresholdSturges=p,t.max=g,t.mean=function(t,n){var e,r=t.length,o=r,a=-1,u=0;if(null==n)for(;++a<r;)isNaN(e=i(t[a]))?--o:u+=e;else for(;++a<r;)isNaN(e=i(n(t[a],a,t)))?--o:u+=e;if(o)return u/o},t.median=function(t,e){var r,o=t.length,a=-1,u=[];if(null==e)for(;++a<o;)isNaN(r=i(t[a]))||u.push(r);else for(;++a<o;)isNaN(r=i(e(t[a],a,t)))||u.push(r);return v(u.sort(n),.5)},t.merge=y,t.min=_,t.pairs=function(t,n){null==n&&(n=r);for(var e=0,i=t.length-1,o=t[0],a=new Array(i<0?0:i);e<i;)a[e]=n(o,o=t[++e]);return a},t.permute=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},t.quantile=v,t.range=s,t.scan=function(t,e){if(r=t.length){var r,i,o=0,a=0,u=t[a];for(null==e&&(e=n);++o<r;)(e(i=t[o],u)<0||0!==e(u,u))&&(u=i,a=o);return 0===e(u,u)?a:void 0}},t.shuffle=function(t,n,e){for(var r,i,o=(null==e?t.length:e)-(n=null==n?0:+n);o;)i=Math.random()*o--|0,r=t[o+n],t[o+n]=t[i+n],t[i+n]=r;return t},t.sum=function(t,n){var e,r=t.length,i=-1,o=0;if(null==n)for(;++i<r;)(e=+t[i])&&(o+=e);else for(;++i<r;)(e=+n(t[i],i,t))&&(o+=e);return o},t.ticks=l,t.tickIncrement=h,t.tickStep=d,t.transpose=b,t.variance=o,t.zip=function(){return b(arguments)},t.axisTop=function(t){return T(fs,t)},t.axisRight=function(t){return T(cs,t)},t.axisBottom=function(t){return T(ss,t)},t.axisLeft=function(t){return T(ls,t)},t.brush=function(){return ee(bh)},t.brushX=function(){return ee(yh)},t.brushY=function(){return ee(_h)},t.brushSelection=function(t){var n=t.__brush;return n?n.dim.output(n.selection):null},t.chord=function(){function t(t){var o,a,u,f,c,l,h=t.length,d=[],p=s(h),v=[],g=[],y=g.groups=new Array(h),_=new Array(h*h);for(o=0,c=-1;++c<h;){for(a=0,l=-1;++l<h;)a+=t[c][l];d.push(a),v.push(s(h)),o+=a}for(e&&p.sort(function(t,n){return e(d[t],d[n])}),r&&v.forEach(function(n,e){n.sort(function(n,i){return r(t[e][n],t[e][i])})}),f=(o=Ch(0,kh-n*h)/o)?n:kh/h,a=0,c=-1;++c<h;){for(u=a,l=-1;++l<h;){var b=p[c],m=v[b][l],x=t[b][m],w=a,M=a+=x*o;_[m*h+b]={index:b,subindex:m,startAngle:w,endAngle:M,value:x}}y[b]={index:b,startAngle:u,endAngle:a,value:d[b]},a+=f}for(c=-1;++c<h;)for(l=c-1;++l<h;){var A=_[l*h+c],T=_[c*h+l];(A.value||T.value)&&g.push(A.value<T.value?{source:T,target:A}:{source:A,target:T})}return i?g.sort(i):g}var n=0,e=null,r=null,i=null;return t.padAngle=function(e){return arguments.length?(n=Ch(0,e),t):n},t.sortGroups=function(n){return arguments.length?(e=n,t):e},t.sortSubgroups=function(n){return arguments.length?(r=n,t):r},t.sortChords=function(n){return arguments.length?(null==n?i=null:(i=function(t){return function(n,e){return t(n.source.value+n.target.value,e.source.value+e.target.value)}}(n))._=n,t):i&&i._},t},t.ribbon=function(){function t(){var t,u=Ph.call(arguments),f=n.apply(this,u),c=e.apply(this,u),s=+r.apply(this,(u[0]=f,u)),l=i.apply(this,u)-Eh,h=o.apply(this,u)-Eh,d=s*Th(l),p=s*Nh(l),v=+r.apply(this,(u[0]=c,u)),g=i.apply(this,u)-Eh,y=o.apply(this,u)-Eh;if(a||(a=t=oe()),a.moveTo(d,p),a.arc(0,0,s,l,h),l===g&&h===y||(a.quadraticCurveTo(0,0,v*Th(g),v*Nh(g)),a.arc(0,0,v,g,y)),a.quadraticCurveTo(0,0,d,p),a.closePath(),t)return a=null,t+""||null}var n=ae,e=ue,r=fe,i=ce,o=se,a=null;return t.radius=function(n){return arguments.length?(r="function"==typeof n?n:re(+n),t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:re(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:re(+n),t):o},t.source=function(e){return arguments.length?(n=e,t):n},t.target=function(n){return arguments.length?(e=n,t):e},t.context=function(n){return arguments.length?(a=null==n?null:n,t):a},t},t.nest=function(){function t(n,i,a,u){if(i>=o.length)return null!=e&&n.sort(e),null!=r?r(n):n;for(var f,c,s,l=-1,h=n.length,d=o[i++],p=he(),v=a();++l<h;)(s=p.get(f=d(c=n[l])+""))?s.push(c):p.set(f,[c]);return p.each(function(n,e){u(v,e,t(n,i,a,u))}),v}function n(t,e){if(++e>o.length)return t;var i,u=a[e-1];return null!=r&&e>=o.length?i=t.entries():(i=[],t.each(function(t,r){i.push({key:r,values:n(t,e)})})),null!=u?i.sort(function(t,n){return u(t.key,n.key)}):i}var e,r,i,o=[],a=[];return i={object:function(n){return t(n,0,de,pe)},map:function(n){return t(n,0,ve,ge)},entries:function(e){return n(t(e,0,ve,ge),0)},key:function(t){return o.push(t),i},sortKeys:function(t){return a[o.length-1]=t,i},sortValues:function(t){return e=t,i},rollup:function(t){return r=t,i}}},t.set=_e,t.map=he,t.keys=function(t){var n=[];for(var e in t)n.push(e);return n},t.values=function(t){var n=[];for(var e in t)n.push(t[e]);return n},t.entries=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},t.color=kt,t.rgb=Rt,t.hsl=qt,t.lab=Ft,t.hcl=$t,t.lch=function(t,n,e,r){return 1===arguments.length?Vt(t):new Wt(e,n,t,null==r?1:r)},t.gray=function(t,n){return new It(t,0,0,null==n?1:n)},t.cubehelix=Zt,t.contours=Me,t.contourDensity=function(){function t(t){var e=new Float32Array(v*y),r=new Float32Array(v*y);t.forEach(function(t,n,r){var i=a(t,n,r)+p>>h,o=u(t,n,r)+p>>h;i>=0&&i<v&&o>=0&&o<y&&++e[i+o*v]}),Ae({width:v,height:y,data:e},{width:v,height:y,data:r},l>>h),Te({width:v,height:y,data:r},{width:v,height:y,data:e},l>>h),Ae({width:v,height:y,data:e},{width:v,height:y,data:r},l>>h),Te({width:v,height:y,data:r},{width:v,height:y,data:e},l>>h),Ae({width:v,height:y,data:e},{width:v,height:y,data:r},l>>h),Te({width:v,height:y,data:r},{width:v,height:y,data:e},l>>h);var i=_(e);if(!Array.isArray(i)){var o=g(e);i=d(0,o,i),(i=s(0,Math.floor(o/i)*i,i)).shift()}return Me().thresholds(i).size([v,y])(e).map(n)}function n(t){return t.value*=Math.pow(2,-2*h),t.coordinates.forEach(e),t}function e(t){t.forEach(r)}function r(t){t.forEach(i)}function i(t){t[0]=t[0]*Math.pow(2,h)-p,t[1]=t[1]*Math.pow(2,h)-p}function o(){return p=3*l,v=f+2*p>>h,y=c+2*p>>h,t}var a=Ne,u=Se,f=960,c=500,l=20,h=2,p=3*l,v=f+2*p>>h,y=c+2*p>>h,_=me(20);return t.x=function(n){return arguments.length?(a="function"==typeof n?n:me(+n),t):a},t.y=function(n){return arguments.length?(u="function"==typeof n?n:me(+n),t):u},t.size=function(t){if(!arguments.length)return[f,c];var n=Math.ceil(t[0]),e=Math.ceil(t[1]);if(!(n>=0||n>=0))throw new Error("invalid size");return f=n,c=e,o()},t.cellSize=function(t){if(!arguments.length)return 1<<h;if(!((t=+t)>=1))throw new Error("invalid cell size");return h=Math.floor(Math.log(t)/Math.LN2),o()},t.thresholds=function(n){return arguments.length?(_="function"==typeof n?n:Array.isArray(n)?me(Uh.call(n)):me(n),t):_},t.bandwidth=function(t){if(!arguments.length)return Math.sqrt(l*(l+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return l=Math.round((Math.sqrt(4*t*t+1)-1)/2),o()},t},t.dispatch=N,t.drag=function(){function n(t){t.on("mousedown.drag",e).filter(g).on("touchstart.drag",o).on("touchmove.drag",a).on("touchend.drag touchcancel.drag",u).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(){if(!h&&d.apply(this,arguments)){var n=f("mouse",p.apply(this,arguments),pt,this,arguments);n&&(ct(t.event.view).on("mousemove.drag",r,!0).on("mouseup.drag",i,!0),_t(t.event.view),gt(),l=!1,c=t.event.clientX,s=t.event.clientY,n("start"))}}function r(){if(yt(),!l){var n=t.event.clientX-c,e=t.event.clientY-s;l=n*n+e*e>m}y.mouse("drag")}function i(){ct(t.event.view).on("mousemove.drag mouseup.drag",null),bt(t.event.view,l),yt(),y.mouse("end")}function o(){if(d.apply(this,arguments)){var n,e,r=t.event.changedTouches,i=p.apply(this,arguments),o=r.length;for(n=0;n<o;++n)(e=f(r[n].identifier,i,vt,this,arguments))&&(gt(),e("start"))}}function a(){var n,e,r=t.event.changedTouches,i=r.length;for(n=0;n<i;++n)(e=y[r[n].identifier])&&(yt(),e("drag"))}function u(){var n,e,r=t.event.changedTouches,i=r.length;for(h&&clearTimeout(h),h=setTimeout(function(){h=null},500),n=0;n<i;++n)(e=y[r[n].identifier])&&(gt(),e("end"))}function f(e,r,i,o,a){var u,f,c,s=i(r,e),l=_.copy();if(ot(new xt(n,"beforestart",u,e,b,s[0],s[1],0,0,l),function(){return null!=(t.event.subject=u=v.apply(o,a))&&(f=u.x-s[0]||0,c=u.y-s[1]||0,!0)}))return function t(h){var d,p=s;switch(h){case"start":y[e]=t,d=b++;break;case"end":delete y[e],--b;case"drag":s=i(r,e),d=b}ot(new xt(n,h,u,e,d,s[0]+f,s[1]+c,s[0]-p[0],s[1]-p[1],l),l.apply,l,[h,o,a])}}var c,s,l,h,d=wt,p=Mt,v=At,g=Tt,y={},_=N("start","drag","end"),b=0,m=0;return n.filter=function(t){return arguments.length?(d="function"==typeof t?t:mt(!!t),n):d},n.container=function(t){return arguments.length?(p="function"==typeof t?t:mt(t),n):p},n.subject=function(t){return arguments.length?(v="function"==typeof t?t:mt(t),n):v},n.touchable=function(t){return arguments.length?(g="function"==typeof t?t:mt(!!t),n):g},n.on=function(){var t=_.on.apply(_,arguments);return t===_?n:t},n.clickDistance=function(t){return arguments.length?(m=(t=+t)*t,n):Math.sqrt(m)},n},t.dragDisable=_t,t.dragEnable=bt,t.dsvFormat=ke,t.csvParse=Hh,t.csvParseRows=Xh,t.csvFormat=Gh,t.csvFormatRows=Vh,t.tsvParse=Wh,t.tsvParseRows=Zh,t.tsvFormat=Qh,t.tsvFormatRows=Jh,t.easeLinear=function(t){return+t},t.easeQuad=Fn,t.easeQuadIn=function(t){return t*t},t.easeQuadOut=function(t){return t*(2-t)},t.easeQuadInOut=Fn,t.easeCubic=In,t.easeCubicIn=function(t){return t*t*t},t.easeCubicOut=function(t){return--t*t*t+1},t.easeCubicInOut=In,t.easePoly=Xl,t.easePolyIn=jl,t.easePolyOut=Hl,t.easePolyInOut=Xl,t.easeSin=jn,t.easeSinIn=function(t){return 1-Math.cos(t*Vl)},t.easeSinOut=function(t){return Math.sin(t*Vl)},t.easeSinInOut=jn,t.easeExp=Hn,t.easeExpIn=function(t){return Math.pow(2,10*t-10)},t.easeExpOut=function(t){return 1-Math.pow(2,-10*t)},t.easeExpInOut=Hn,t.easeCircle=Xn,t.easeCircleIn=function(t){return 1-Math.sqrt(1-t*t)},t.easeCircleOut=function(t){return Math.sqrt(1- --t*t)},t.easeCircleInOut=Xn,t.easeBounce=Gn,t.easeBounceIn=function(t){return 1-Gn(1-t)},t.easeBounceOut=Gn,t.easeBounceInOut=function(t){return((t*=2)<=1?1-Gn(1-t):Gn(t-1)+1)/2},t.easeBack=ah,t.easeBackIn=ih,t.easeBackOut=oh,t.easeBackInOut=ah,t.easeElastic=ch,t.easeElasticIn=fh,t.easeElasticOut=ch,t.easeElasticInOut=sh,t.blob=function(t,n){return fetch(t,n).then(Ce)},t.buffer=function(t,n){return fetch(t,n).then(Pe)},t.dsv=function(t,n,e,r){3===arguments.length&&"function"==typeof e&&(r=e,e=void 0);var i=ke(t);return Re(n,e).then(function(t){return i.parse(t,r)})},t.csv=Kh,t.tsv=td,t.image=function(t,n){return new Promise(function(e,r){var i=new Image;for(var o in n)i[o]=n[o];i.onerror=r,i.onload=function(){e(i)},i.src=t})},t.json=function(t,n){return fetch(t,n).then(De)},t.text=Re,t.xml=nd,t.html=ed,t.svg=rd,t.forceCenter=function(t,n){function e(){var e,i,o=r.length,a=0,u=0;for(e=0;e<o;++e)a+=(i=r[e]).x,u+=i.y;for(a=a/o-t,u=u/o-n,e=0;e<o;++e)(i=r[e]).x-=a,i.y-=u}var r;return null==t&&(t=0),null==n&&(n=0),e.initialize=function(t){r=t},e.x=function(n){return arguments.length?(t=+n,e):t},e.y=function(t){return arguments.length?(n=+t,e):n},e},t.forceCollide=function(t){function n(){for(var t,n,r,f,c,s,l,h=i.length,d=0;d<u;++d)for(n=je(i,Ge,Ve).visitAfter(e),t=0;t<h;++t)r=i[t],s=o[r.index],l=s*s,f=r.x+r.vx,c=r.y+r.vy,n.visit(function(t,n,e,i,o){var u=t.data,h=t.r,d=s+h;if(!u)return n>f+d||i<f-d||e>c+d||o<c-d;if(u.index>r.index){var p=f-u.x-u.vx,v=c-u.y-u.vy,g=p*p+v*v;g<d*d&&(0===p&&(p=Oe(),g+=p*p),0===v&&(v=Oe(),g+=v*v),g=(d-(g=Math.sqrt(g)))/g*a,r.vx+=(p*=g)*(d=(h*=h)/(l+h)),r.vy+=(v*=g)*d,u.vx-=p*(d=1-d),u.vy-=v*d)}})}function e(t){if(t.data)return t.r=o[t.data.index];for(var n=t.r=0;n<4;++n)t[n]&&t[n].r>t.r&&(t.r=t[n].r)}function r(){if(i){var n,e,r=i.length;for(o=new Array(r),n=0;n<r;++n)e=i[n],o[e.index]=+t(e,n,i)}}var i,o,a=1,u=1;return"function"!=typeof t&&(t=qe(null==t?1:+t)),n.initialize=function(t){i=t,r()},n.iterations=function(t){return arguments.length?(u=+t,n):u},n.strength=function(t){return arguments.length?(a=+t,n):a},n.radius=function(e){return arguments.length?(t="function"==typeof e?e:qe(+e),r(),n):t},n},t.forceLink=function(t){function n(n){for(var e=0,r=t.length;e<d;++e)for(var i,u,f,s,l,h,p,v=0;v<r;++v)u=(i=t[v]).source,s=(f=i.target).x+f.vx-u.x-u.vx||Oe(),l=f.y+f.vy-u.y-u.vy||Oe(),s*=h=((h=Math.sqrt(s*s+l*l))-a[v])/h*n*o[v],l*=h,f.vx-=s*(p=c[v]),f.vy-=l*p,u.vx+=s*(p=1-p),u.vy+=l*p}function e(){if(u){var n,e,l=u.length,h=t.length,d=he(u,s);for(n=0,f=new Array(l);n<h;++n)(e=t[n]).index=n,"object"!=typeof e.source&&(e.source=We(d,e.source)),"object"!=typeof e.target&&(e.target=We(d,e.target)),f[e.source.index]=(f[e.source.index]||0)+1,f[e.target.index]=(f[e.target.index]||0)+1;for(n=0,c=new Array(h);n<h;++n)e=t[n],c[n]=f[e.source.index]/(f[e.source.index]+f[e.target.index]);o=new Array(h),r(),a=new Array(h),i()}}function r(){if(u)for(var n=0,e=t.length;n<e;++n)o[n]=+l(t[n],n,t)}function i(){if(u)for(var n=0,e=t.length;n<e;++n)a[n]=+h(t[n],n,t)}var o,a,u,f,c,s=$e,l=function(t){return 1/Math.min(f[t.source.index],f[t.target.index])},h=qe(30),d=1;return null==t&&(t=[]),n.initialize=function(t){u=t,e()},n.links=function(r){return arguments.length?(t=r,e(),n):t},n.id=function(t){return arguments.length?(s=t,n):s},n.iterations=function(t){return arguments.length?(d=+t,n):d},n.strength=function(t){return arguments.length?(l="function"==typeof t?t:qe(+t),r(),n):l},n.distance=function(t){return arguments.length?(h="function"==typeof t?t:qe(+t),i(),n):h},n},t.forceManyBody=function(){function t(t){var n,u=i.length,f=je(i,Ze,Qe).visitAfter(e);for(a=t,n=0;n<u;++n)o=i[n],f.visit(r)}function n(){if(i){var t,n,e=i.length;for(u=new Array(e),t=0;t<e;++t)n=i[t],u[n.index]=+f(n,t,i)}}function e(t){var n,e,r,i,o,a=0,f=0;if(t.length){for(r=i=o=0;o<4;++o)(n=t[o])&&(e=Math.abs(n.value))&&(a+=n.value,f+=e,r+=e*n.x,i+=e*n.y);t.x=r/f,t.y=i/f}else{(n=t).x=n.data.x,n.y=n.data.y;do{a+=u[n.data.index]}while(n=n.next)}t.value=a}function r(t,n,e,r){if(!t.value)return!0;var i=t.x-o.x,f=t.y-o.y,h=r-n,d=i*i+f*f;if(h*h/l<d)return d<s&&(0===i&&(i=Oe(),d+=i*i),0===f&&(f=Oe(),d+=f*f),d<c&&(d=Math.sqrt(c*d)),o.vx+=i*t.value*a/d,o.vy+=f*t.value*a/d),!0;if(!(t.length||d>=s)){(t.data!==o||t.next)&&(0===i&&(i=Oe(),d+=i*i),0===f&&(f=Oe(),d+=f*f),d<c&&(d=Math.sqrt(c*d)));do{t.data!==o&&(h=u[t.data.index]*a/d,o.vx+=i*h,o.vy+=f*h)}while(t=t.next)}}var i,o,a,u,f=qe(-30),c=1,s=1/0,l=.81;return t.initialize=function(t){i=t,n()},t.strength=function(e){return arguments.length?(f="function"==typeof e?e:qe(+e),n(),t):f},t.distanceMin=function(n){return arguments.length?(c=n*n,t):Math.sqrt(c)},t.distanceMax=function(n){return arguments.length?(s=n*n,t):Math.sqrt(s)},t.theta=function(n){return arguments.length?(l=n*n,t):Math.sqrt(l)},t},t.forceRadial=function(t,n,e){function r(t){for(var r=0,i=o.length;r<i;++r){var f=o[r],c=f.x-n||1e-6,s=f.y-e||1e-6,l=Math.sqrt(c*c+s*s),h=(u[r]-l)*a[r]*t/l;f.vx+=c*h,f.vy+=s*h}}function i(){if(o){var n,e=o.length;for(a=new Array(e),u=new Array(e),n=0;n<e;++n)u[n]=+t(o[n],n,o),a[n]=isNaN(u[n])?0:+f(o[n],n,o)}}var o,a,u,f=qe(.1);return"function"!=typeof t&&(t=qe(+t)),null==n&&(n=0),null==e&&(e=0),r.initialize=function(t){o=t,i()},r.strength=function(t){return arguments.length?(f="function"==typeof t?t:qe(+t),i(),r):f},r.radius=function(n){return arguments.length?(t="function"==typeof n?n:qe(+n),i(),r):t},r.x=function(t){return arguments.length?(n=+t,r):n},r.y=function(t){return arguments.length?(e=+t,r):e},r},t.forceSimulation=function(t){function n(){e(),d.call("tick",o),a<u&&(h.stop(),d.call("end",o))}function e(){var n,e,r=t.length;for(a+=(c-a)*f,l.each(function(t){t(a)}),n=0;n<r;++n)null==(e=t[n]).fx?e.x+=e.vx*=s:(e.x=e.fx,e.vx=0),null==e.fy?e.y+=e.vy*=s:(e.y=e.fy,e.vy=0)}function r(){for(var n,e=0,r=t.length;e<r;++e){if(n=t[e],n.index=e,isNaN(n.x)||isNaN(n.y)){var i=od*Math.sqrt(e),o=e*ad;n.x=i*Math.cos(o),n.y=i*Math.sin(o)}(isNaN(n.vx)||isNaN(n.vy))&&(n.vx=n.vy=0)}}function i(n){return n.initialize&&n.initialize(t),n}var o,a=1,u=.001,f=1-Math.pow(u,1/300),c=0,s=.6,l=he(),h=Tn(n),d=N("tick","end");return null==t&&(t=[]),r(),o={tick:e,restart:function(){return h.restart(n),o},stop:function(){return h.stop(),o},nodes:function(n){return arguments.length?(t=n,r(),l.each(i),o):t},alpha:function(t){return arguments.length?(a=+t,o):a},alphaMin:function(t){return arguments.length?(u=+t,o):u},alphaDecay:function(t){return arguments.length?(f=+t,o):+f},alphaTarget:function(t){return arguments.length?(c=+t,o):c},velocityDecay:function(t){return arguments.length?(s=1-t,o):1-s},force:function(t,n){return arguments.length>1?(null==n?l.remove(t):l.set(t,i(n)),o):l.get(t)},find:function(n,e,r){var i,o,a,u,f,c=0,s=t.length;for(null==r?r=1/0:r*=r,c=0;c<s;++c)(a=(i=n-(u=t[c]).x)*i+(o=e-u.y)*o)<r&&(f=u,r=a);return f},on:function(t,n){return arguments.length>1?(d.on(t,n),o):d.on(t)}}},t.forceX=function(t){function n(t){for(var n,e=0,a=r.length;e<a;++e)(n=r[e]).vx+=(o[e]-n.x)*i[e]*t}function e(){if(r){var n,e=r.length;for(i=new Array(e),o=new Array(e),n=0;n<e;++n)i[n]=isNaN(o[n]=+t(r[n],n,r))?0:+a(r[n],n,r)}}var r,i,o,a=qe(.1);return"function"!=typeof t&&(t=qe(null==t?0:+t)),n.initialize=function(t){r=t,e()},n.strength=function(t){return arguments.length?(a="function"==typeof t?t:qe(+t),e(),n):a},n.x=function(r){return arguments.length?(t="function"==typeof r?r:qe(+r),e(),n):t},n},t.forceY=function(t){function n(t){for(var n,e=0,a=r.length;e<a;++e)(n=r[e]).vy+=(o[e]-n.y)*i[e]*t}function e(){if(r){var n,e=r.length;for(i=new Array(e),o=new Array(e),n=0;n<e;++n)i[n]=isNaN(o[n]=+t(r[n],n,r))?0:+a(r[n],n,r)}}var r,i,o,a=qe(.1);return"function"!=typeof t&&(t=qe(null==t?0:+t)),n.initialize=function(t){r=t,e()},n.strength=function(t){return arguments.length?(a="function"==typeof t?t:qe(+t),e(),n):a},n.y=function(r){return arguments.length?(t="function"==typeof r?r:qe(+r),e(),n):t},n},t.formatDefaultLocale=or,t.formatLocale=ir,t.formatSpecifier=tr,t.precisionFixed=ar,t.precisionPrefix=ur,t.precisionRound=fr,t.geoArea=function(t){return dp.reset(),br(t,pp),2*dp},t.geoBounds=function(t){var n,e,r,i,o,a,u;if(md=bd=-(yd=_d=1/0),Td=[],br(t,gp),e=Td.length){for(Td.sort(Yr),n=1,o=[r=Td[0]];n<e;++n)Br(r,(i=Td[n])[0])||Br(r,i[1])?(Or(r[0],i[1])>Or(r[0],r[1])&&(r[1]=i[1]),Or(i[0],r[1])>Or(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,n=0,r=o[e=o.length-1];n<=e;r=i,++n)i=o[n],(u=Or(r[1],i[0]))>a&&(a=u,yd=i[0],bd=r[1])}return Td=Nd=null,yd===1/0||_d===1/0?[[NaN,NaN],[NaN,NaN]]:[[yd,_d],[bd,md]]},t.geoCentroid=function(t){Sd=Ed=kd=Cd=Pd=zd=Rd=Ld=Dd=Ud=qd=0,br(t,yp);var n=Dd,e=Ud,r=qd,i=n*n+e*e+r*r;return i<Xd&&(n=zd,e=Rd,r=Ld,Ed<Hd&&(n=kd,e=Cd,r=Pd),(i=n*n+e*e+r*r)<Xd)?[NaN,NaN]:[tp(e,n)*Zd,dr(r/fp(i))*Zd]},t.geoCircle=function(){function t(){var t=r.apply(this,arguments),u=i.apply(this,arguments)*Qd,f=o.apply(this,arguments)*Qd;return n=[],e=ti(-t[0]*Qd,-t[1]*Qd,0).invert,oi(a,u,f,1),t={type:"Polygon",coordinates:[n]},n=e=null,t}var n,e,r=Qr([0,0]),i=Qr(90),o=Qr(6),a={point:function(t,r){n.push(t=e(t,r)),t[0]*=Zd,t[1]*=Zd}};return t.center=function(n){return arguments.length?(r="function"==typeof n?n:Qr([+n[0],+n[1]]),t):r},t.radius=function(n){return arguments.length?(i="function"==typeof n?n:Qr(+n),t):i},t.precision=function(n){return arguments.length?(o="function"==typeof n?n:Qr(+n),t):o},t},t.geoClipAntimeridian=Cp,t.geoClipCircle=gi,t.geoClipExtent=function(){var t,n,e,r=0,i=0,o=960,a=500;return e={stream:function(e){return t&&n===e?t:t=yi(r,i,o,a)(n=e)},extent:function(u){return arguments.length?(r=+u[0][0],i=+u[0][1],o=+u[1][0],a=+u[1][1],t=n=null,e):[[r,i],[o,a]]}}},t.geoClipRectangle=yi,t.geoContains=function(t,n){return(t&&qp.hasOwnProperty(t.type)?qp[t.type]:Mi)(t,n)},t.geoDistance=wi,t.geoGraticule=Pi,t.geoGraticule10=function(){return Pi()()},t.geoInterpolate=function(t,n){var e=t[0]*Qd,r=t[1]*Qd,i=n[0]*Qd,o=n[1]*Qd,a=np(r),u=ap(r),f=np(o),c=ap(o),s=a*np(e),l=a*ap(e),h=f*np(i),d=f*ap(i),p=2*dr(fp(pr(o-r)+a*f*pr(i-e))),v=ap(p),g=p?function(t){var n=ap(t*=p)/v,e=ap(p-t)/v,r=e*s+n*h,i=e*l+n*d,o=e*u+n*c;return[tp(i,r)*Zd,tp(o,fp(r*r+i*i))*Zd]}:function(){return[e*Zd,r*Zd]};return g.distance=p,g},t.geoLength=xi,t.geoPath=function(t,n){function e(t){return t&&("function"==typeof o&&i.pointRadius(+o.apply(this,arguments)),br(t,r(i))),i.result()}var r,i,o=4.5;return e.area=function(t){return br(t,r(Fp)),Fp.result()},e.measure=function(t){return br(t,r(cv)),cv.result()},e.bounds=function(t){return br(t,r(Gp)),Gp.result()},e.centroid=function(t){return br(t,r(ev)),ev.result()},e.projection=function(n){return arguments.length?(r=null==n?(t=null,zi):(t=n).stream,e):t},e.context=function(t){return arguments.length?(i=null==t?(n=null,new Wi):new Gi(n=t),"function"!=typeof o&&i.pointRadius(o),e):n},e.pointRadius=function(t){return arguments.length?(o="function"==typeof t?t:(i.pointRadius(+t),+t),e):o},e.projection(t).context(n)},t.geoAlbers=lo,t.geoAlbersUsa=function(){function t(t){var n=t[0],e=t[1];return u=null,i.point(n,e),u||(o.point(n,e),u)||(a.point(n,e),u)}function n(){return e=r=null,t}var e,r,i,o,a,u,f=lo(),c=so().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=so().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,n){u=[t,n]}};return t.invert=function(t){var n=f.scale(),e=f.translate(),r=(t[0]-e[0])/n,i=(t[1]-e[1])/n;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?c:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:f).invert(t)},t.stream=function(t){return e&&r===t?e:e=function(t){var n=t.length;return{point:function(e,r){for(var i=-1;++i<n;)t[i].point(e,r)},sphere:function(){for(var e=-1;++e<n;)t[e].sphere()},lineStart:function(){for(var e=-1;++e<n;)t[e].lineStart()},lineEnd:function(){for(var e=-1;++e<n;)t[e].lineEnd()},polygonStart:function(){for(var e=-1;++e<n;)t[e].polygonStart()},polygonEnd:function(){for(var e=-1;++e<n;)t[e].polygonEnd()}}}([f.stream(r=t),c.stream(t),s.stream(t)])},t.precision=function(t){return arguments.length?(f.precision(t),c.precision(t),s.precision(t),n()):f.precision()},t.scale=function(n){return arguments.length?(f.scale(n),c.scale(.35*n),s.scale(n),t.translate(f.translate())):f.scale()},t.translate=function(t){if(!arguments.length)return f.translate();var e=f.scale(),r=+t[0],u=+t[1];return i=f.translate(t).clipExtent([[r-.455*e,u-.238*e],[r+.455*e,u+.238*e]]).stream(l),o=c.translate([r-.307*e,u+.201*e]).clipExtent([[r-.425*e+Hd,u+.12*e+Hd],[r-.214*e-Hd,u+.234*e-Hd]]).stream(l),a=s.translate([r-.205*e,u+.212*e]).clipExtent([[r-.214*e+Hd,u+.166*e+Hd],[r-.115*e-Hd,u+.234*e-Hd]]).stream(l),n()},t.fitExtent=function(n,e){return to(t,n,e)},t.fitSize=function(n,e){return no(t,n,e)},t.fitWidth=function(n,e){return eo(t,n,e)},t.fitHeight=function(n,e){return ro(t,n,e)},t.scale(1070)},t.geoAzimuthalEqualArea=function(){return ao(dv).scale(124.75).clipAngle(179.999)},t.geoAzimuthalEqualAreaRaw=dv,t.geoAzimuthalEquidistant=function(){return ao(pv).scale(79.4188).clipAngle(179.999)},t.geoAzimuthalEquidistantRaw=pv,t.geoConicConformal=function(){return fo(_o).scale(109.5).parallels([30,30])},t.geoConicConformalRaw=_o,t.geoConicEqualArea=so,t.geoConicEqualAreaRaw=co,t.geoConicEquidistant=function(){return fo(mo).scale(131.154).center([0,13.9389])},t.geoConicEquidistantRaw=mo,t.geoEquirectangular=function(){return ao(bo).scale(152.63)},t.geoEquirectangularRaw=bo,t.geoGnomonic=function(){return ao(xo).scale(144.049).clipAngle(60)},t.geoGnomonicRaw=xo,t.geoIdentity=function(){function t(){return i=o=null,a}var n,e,r,i,o,a,u=1,f=0,c=0,s=1,l=1,h=zi,d=null,p=zi;return a={stream:function(t){return i&&o===t?i:i=h(p(o=t))},postclip:function(i){return arguments.length?(p=i,d=n=e=r=null,t()):p},clipExtent:function(i){return arguments.length?(p=null==i?(d=n=e=r=null,zi):yi(d=+i[0][0],n=+i[0][1],e=+i[1][0],r=+i[1][1]),t()):null==d?null:[[d,n],[e,r]]},scale:function(n){return arguments.length?(h=wo((u=+n)*s,u*l,f,c),t()):u},translate:function(n){return arguments.length?(h=wo(u*s,u*l,f=+n[0],c=+n[1]),t()):[f,c]},reflectX:function(n){return arguments.length?(h=wo(u*(s=n?-1:1),u*l,f,c),t()):s<0},reflectY:function(n){return arguments.length?(h=wo(u*s,u*(l=n?-1:1),f,c),t()):l<0},fitExtent:function(t,n){return to(a,t,n)},fitSize:function(t,n){return no(a,t,n)},fitWidth:function(t,n){return eo(a,t,n)},fitHeight:function(t,n){return ro(a,t,n)}}},t.geoProjection=ao,t.geoProjectionMutator=uo,t.geoMercator=function(){return go(vo).scale(961/Wd)},t.geoMercatorRaw=vo,t.geoNaturalEarth1=function(){return ao(Mo).scale(175.295)},t.geoNaturalEarth1Raw=Mo,t.geoOrthographic=function(){return ao(Ao).scale(249.5).clipAngle(90+Hd)},t.geoOrthographicRaw=Ao,t.geoStereographic=function(){return ao(To).scale(250).clipAngle(142)},t.geoStereographicRaw=To,t.geoTransverseMercator=function(){var t=go(No),n=t.center,e=t.rotate;return t.center=function(t){return arguments.length?n([-t[1],t[0]]):(t=n(),[t[1],-t[0]])},t.rotate=function(t){return arguments.length?e([t[0],t[1],t.length>2?t[2]+90:90]):(t=e(),[t[0],t[1],t[2]-90])},e([0,0,90]).scale(159.155)},t.geoTransverseMercatorRaw=No,t.geoRotation=ii,t.geoStream=br,t.geoTransform=function(t){return{stream:Qi(t)}},t.cluster=function(){function t(t){var o,a=0;t.eachAfter(function(t){var e=t.children;e?(t.x=function(t){return t.reduce(Eo,0)/t.length}(e),t.y=function(t){return 1+t.reduce(ko,0)}(e)):(t.x=o?a+=n(t,o):0,t.y=0,o=t)});var u=function(t){for(var n;n=t.children;)t=n[0];return t}(t),f=function(t){for(var n;n=t.children;)t=n[n.length-1];return t}(t),c=u.x-n(u,f)/2,s=f.x+n(f,u)/2;return t.eachAfter(i?function(n){n.x=(n.x-t.x)*e,n.y=(t.y-n.y)*r}:function(n){n.x=(n.x-c)/(s-c)*e,n.y=(1-(t.y?n.y/t.y:1))*r})}var n=So,e=1,r=1,i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(n){return arguments.length?(i=!1,e=+n[0],r=+n[1],t):i?null:[e,r]},t.nodeSize=function(n){return arguments.length?(i=!0,e=+n[0],r=+n[1],t):i?[e,r]:null},t},t.hierarchy=Po,t.pack=function(){function t(t){return t.x=e/2,t.y=r/2,n?t.eachBefore(Qo(n)).eachAfter(Jo(i,.5)).eachBefore(Ko(1)):t.eachBefore(Qo(Zo)).eachAfter(Jo($o,1)).eachAfter(Jo(i,t.r/Math.min(e,r))).eachBefore(Ko(Math.min(e,r)/(2*t.r))),t}var n=null,e=1,r=1,i=$o;return t.radius=function(e){return arguments.length?(n=function(t){return null==t?null:Vo(t)}(e),t):n},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i="function"==typeof n?n:Wo(+n),t):i},t},t.packSiblings=function(t){return Go(t),t},t.packEnclose=Uo,t.partition=function(){function t(t){var o=t.height+1;return t.x0=t.y0=r,t.x1=n,t.y1=e/o,t.eachBefore(function(t,n){return function(e){e.children&&na(e,e.x0,t*(e.depth+1)/n,e.x1,t*(e.depth+2)/n);var i=e.x0,o=e.y0,a=e.x1-r,u=e.y1-r;a<i&&(i=a=(i+a)/2),u<o&&(o=u=(o+u)/2),e.x0=i,e.y0=o,e.x1=a,e.y1=u}}(e,o)),i&&t.eachBefore(ta),t}var n=1,e=1,r=0,i=!1;return t.round=function(n){return arguments.length?(i=!!n,t):i},t.size=function(r){return arguments.length?(n=+r[0],e=+r[1],t):[n,e]},t.padding=function(n){return arguments.length?(r=+n,t):r},t},t.stratify=function(){function t(t){var r,i,o,a,u,f,c,s=t.length,l=new Array(s),h={};for(i=0;i<s;++i)r=t[i],u=l[i]=new Do(r),null!=(f=n(r,i,t))&&(f+="")&&(h[c=gv+(u.id=f)]=c in h?_v:u);for(i=0;i<s;++i)if(u=l[i],null!=(f=e(t[i],i,t))&&(f+="")){if(!(a=h[gv+f]))throw new Error("missing: "+f);if(a===_v)throw new Error("ambiguous: "+f);a.children?a.children.push(u):a.children=[u],u.parent=a}else{if(o)throw new Error("multiple roots");o=u}if(!o)throw new Error("no root");if(o.parent=yv,o.eachBefore(function(t){t.depth=t.parent.depth+1,--s}).eachBefore(Lo),o.parent=null,s>0)throw new Error("cycle");return o}var n=ea,e=ra;return t.id=function(e){return arguments.length?(n=Vo(e),t):n},t.parentId=function(n){return arguments.length?(e=Vo(n),t):e},t},t.tree=function(){function t(t){var f=function(t){for(var n,e,r,i,o,a=new ca(t,0),u=[a];n=u.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)u.push(e=n.children[i]=new ca(r[i],i)),e.parent=n;return(a.parent=new ca(null,0)).children=[a],a}(t);if(f.eachAfter(n),f.parent.m=-f.z,f.eachBefore(e),u)t.eachBefore(r);else{var c=t,s=t,l=t;t.eachBefore(function(t){t.x<c.x&&(c=t),t.x>s.x&&(s=t),t.depth>l.depth&&(l=t)});var h=c===s?1:i(c,s)/2,d=h-c.x,p=o/(s.x+h+d),v=a/(l.depth||1);t.eachBefore(function(t){t.x=(t.x+d)*p,t.y=t.depth*v})}return t}function n(t){var n=t.children,e=t.parent.children,r=t.i?e[t.i-1]:null;if(n){(function(t){for(var n,e=0,r=0,i=t.children,o=i.length;--o>=0;)(n=i[o]).z+=e,n.m+=e,e+=n.s+(r+=n.c)})(t);var o=(n[0].z+n[n.length-1].z)/2;r?(t.z=r.z+i(t._,r._),t.m=t.z-o):t.z=o}else r&&(t.z=r.z+i(t._,r._));t.parent.A=function(t,n,e){if(n){for(var r,o=t,a=t,u=n,f=o.parent.children[0],c=o.m,s=a.m,l=u.m,h=f.m;u=aa(u),o=oa(o),u&&o;)f=oa(f),(a=aa(a)).a=t,(r=u.z+l-o.z-c+i(u._,o._))>0&&(ua(fa(u,t,e),t,r),c+=r,s+=r),l+=u.m,c+=o.m,h+=f.m,s+=a.m;u&&!aa(a)&&(a.t=u,a.m+=l-s),o&&!oa(f)&&(f.t=o,f.m+=c-h,e=t)}return e}(t,r,t.parent.A||e[0])}function e(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function r(t){t.x*=o,t.y=t.depth*a}var i=ia,o=1,a=1,u=null;return t.separation=function(n){return arguments.length?(i=n,t):i},t.size=function(n){return arguments.length?(u=!1,o=+n[0],a=+n[1],t):u?null:[o,a]},t.nodeSize=function(n){return arguments.length?(u=!0,o=+n[0],a=+n[1],t):u?[o,a]:null},t},t.treemap=function(){function t(t){return t.x0=t.y0=0,t.x1=i,t.y1=o,t.eachBefore(n),a=[0],r&&t.eachBefore(ta),t}function n(t){var n=a[t.depth],r=t.x0+n,i=t.y0+n,o=t.x1-n,h=t.y1-n;o<r&&(r=o=(r+o)/2),h<i&&(i=h=(i+h)/2),t.x0=r,t.y0=i,t.x1=o,t.y1=h,t.children&&(n=a[t.depth+1]=u(t)/2,r+=l(t)-n,i+=f(t)-n,o-=c(t)-n,h-=s(t)-n,o<r&&(r=o=(r+o)/2),h<i&&(i=h=(i+h)/2),e(t,r,i,o,h))}var e=mv,r=!1,i=1,o=1,a=[0],u=$o,f=$o,c=$o,s=$o,l=$o;return t.round=function(n){return arguments.length?(r=!!n,t):r},t.size=function(n){return arguments.length?(i=+n[0],o=+n[1],t):[i,o]},t.tile=function(n){return arguments.length?(e=Vo(n),t):e},t.padding=function(n){return arguments.length?t.paddingInner(n).paddingOuter(n):t.paddingInner()},t.paddingInner=function(n){return arguments.length?(u="function"==typeof n?n:Wo(+n),t):u},t.paddingOuter=function(n){return arguments.length?t.paddingTop(n).paddingRight(n).paddingBottom(n).paddingLeft(n):t.paddingTop()},t.paddingTop=function(n){return arguments.length?(f="function"==typeof n?n:Wo(+n),t):f},t.paddingRight=function(n){return arguments.length?(c="function"==typeof n?n:Wo(+n),t):c},t.paddingBottom=function(n){return arguments.length?(s="function"==typeof n?n:Wo(+n),t):s},t.paddingLeft=function(n){return arguments.length?(l="function"==typeof n?n:Wo(+n),t):l},t},t.treemapBinary=function(t,n,e,r,i){function o(t,n,e,r,i,a,u){if(t>=n-1){var c=f[t];return c.x0=r,c.y0=i,c.x1=a,void(c.y1=u)}for(var l=s[t],h=e/2+l,d=t+1,p=n-1;d<p;){var v=d+p>>>1;s[v]<h?d=v+1:p=v}h-s[d-1]<s[d]-h&&t+1<d&&--d;var g=s[d]-l,y=e-g;if(a-r>u-i){var _=(r*y+a*g)/e;o(t,d,g,r,i,_,u),o(d,n,y,_,i,a,u)}else{var b=(i*y+u*g)/e;o(t,d,g,r,i,a,b),o(d,n,y,r,b,a,u)}}var a,u,f=t.children,c=f.length,s=new Array(c+1);for(s[0]=u=a=0;a<c;++a)s[a+1]=u+=f[a].value;o(0,c,t.value,n,e,r,i)},t.treemapDice=na,t.treemapSlice=sa,t.treemapSliceDice=function(t,n,e,r,i){(1&t.depth?sa:na)(t,n,e,r,i)},t.treemapSquarify=mv,t.treemapResquarify=xv,t.interpolate=dn,t.interpolateArray=fn,t.interpolateBasis=Kt,t.interpolateBasisClosed=tn,t.interpolateDate=cn,t.interpolateNumber=sn,t.interpolateObject=ln,t.interpolateRound=pn,t.interpolateString=hn,t.interpolateTransformCss=sl,t.interpolateTransformSvg=ll,t.interpolateZoom=_n,t.interpolateRgb=rl,t.interpolateRgbBasis=il,t.interpolateRgbBasisClosed=ol,t.interpolateHsl=gl,t.interpolateHslLong=yl,t.interpolateLab=function(t,n){var e=an((t=Ft(t)).l,(n=Ft(n)).l),r=an(t.a,n.a),i=an(t.b,n.b),o=an(t.opacity,n.opacity);return function(n){return t.l=e(n),t.a=r(n),t.b=i(n),t.opacity=o(n),t+""}},t.interpolateHcl=_l,t.interpolateHclLong=bl,t.interpolateCubehelix=ml,t.interpolateCubehelixLong=xl,t.piecewise=function(t,n){for(var e=0,r=n.length-1,i=n[0],o=new Array(r<0?0:r);e<r;)o[e]=t(i,i=n[++e]);return function(t){var n=Math.max(0,Math.min(r-1,Math.floor(t*=r)));return o[n](t-n)}},t.quantize=function(t,n){for(var e=new Array(n),r=0;r<n;++r)e[r]=t(r/(n-1));return e},t.path=oe,t.polygonArea=function(t){for(var n,e=-1,r=t.length,i=t[r-1],o=0;++e<r;)n=i,i=t[e],o+=n[1]*i[0]-n[0]*i[1];return o/2},t.polygonCentroid=function(t){for(var n,e,r=-1,i=t.length,o=0,a=0,u=t[i-1],f=0;++r<i;)n=u,u=t[r],f+=e=n[0]*u[1]-u[0]*n[1],o+=(n[0]+u[0])*e,a+=(n[1]+u[1])*e;return f*=3,[o/f,a/f]},t.polygonHull=function(t){if((e=t.length)<3)return null;var n,e,r=new Array(e),i=new Array(e);for(n=0;n<e;++n)r[n]=[+t[n][0],+t[n][1],n];for(r.sort(da),n=0;n<e;++n)i[n]=[r[n][0],-r[n][1]];var o=pa(r),a=pa(i),u=a[0]===o[0],f=a[a.length-1]===o[o.length-1],c=[];for(n=o.length-1;n>=0;--n)c.push(t[r[o[n]][2]]);for(n=+u;n<a.length-f;++n)c.push(t[r[a[n]][2]]);return c},t.polygonContains=function(t,n){for(var e,r,i=t.length,o=t[i-1],a=n[0],u=n[1],f=o[0],c=o[1],s=!1,l=0;l<i;++l)e=(o=t[l])[0],(r=o[1])>u!=c>u&&a<(f-e)*(u-r)/(c-r)+e&&(s=!s),f=e,c=r;return s},t.polygonLength=function(t){for(var n,e,r=-1,i=t.length,o=t[i-1],a=o[0],u=o[1],f=0;++r<i;)n=a,e=u,n-=a=(o=t[r])[0],e-=u=o[1],f+=Math.sqrt(n*n+e*e);return f},t.quadtree=je,t.randomUniform=wv,t.randomNormal=Mv,t.randomLogNormal=Av,t.randomBates=Nv,t.randomIrwinHall=Tv,t.randomExponential=Sv,t.scaleBand=ya,t.scalePoint=function(){return _a(ya().paddingInner(1))},t.scaleIdentity=Ea,t.scaleLinear=Sa,t.scaleLog=Ua,t.scaleOrdinal=ga,t.scaleImplicit=Pv,t.scalePow=Oa,t.scaleSqrt=function(){return Oa().exponent(.5)},t.scaleQuantile=Ya,t.scaleQuantize=Ba,t.scaleThreshold=Fa,t.scaleTime=function(){return of(cg,ug,Vv,Xv,jv,Fv,Yv,Dv,t.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},t.scaleUtc=function(){return of(Rg,Pg,yg,vg,dg,lg,Yv,Dv,t.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)])},t.scaleSequential=af,t.scaleDiverging=uf,t.schemeCategory10=Zg,t.schemeAccent=Qg,t.schemeDark2=Jg,t.schemePaired=Kg,t.schemePastel1=ty,t.schemePastel2=ny,t.schemeSet1=ey,t.schemeSet2=ry,t.schemeSet3=iy,t.interpolateBrBG=ay,t.schemeBrBG=oy,t.interpolatePRGn=fy,t.schemePRGn=uy,t.interpolatePiYG=sy,t.schemePiYG=cy,t.interpolatePuOr=hy,t.schemePuOr=ly,t.interpolateRdBu=py,t.schemeRdBu=dy,t.interpolateRdGy=gy,t.schemeRdGy=vy,t.interpolateRdYlBu=_y,t.schemeRdYlBu=yy,t.interpolateRdYlGn=my,t.schemeRdYlGn=by,t.interpolateSpectral=wy,t.schemeSpectral=xy,t.interpolateBuGn=Ay,t.schemeBuGn=My,t.interpolateBuPu=Ny,t.schemeBuPu=Ty,t.interpolateGnBu=Ey,t.schemeGnBu=Sy,t.interpolateOrRd=Cy,t.schemeOrRd=ky,t.interpolatePuBuGn=zy,t.schemePuBuGn=Py,t.interpolatePuBu=Ly,t.schemePuBu=Ry,t.interpolatePuRd=Uy,t.schemePuRd=Dy,t.interpolateRdPu=Oy,t.schemeRdPu=qy,t.interpolateYlGnBu=By,t.schemeYlGnBu=Yy,t.interpolateYlGn=Iy,t.schemeYlGn=Fy,t.interpolateYlOrBr=Hy,t.schemeYlOrBr=jy,t.interpolateYlOrRd=Gy,t.schemeYlOrRd=Xy,t.interpolateBlues=$y,t.schemeBlues=Vy,t.interpolateGreens=Zy,t.schemeGreens=Wy,t.interpolateGreys=Jy,t.schemeGreys=Qy,t.interpolatePurples=t_,t.schemePurples=Ky,t.interpolateReds=e_,t.schemeReds=n_,t.interpolateOranges=i_,t.schemeOranges=r_,t.interpolateCubehelixDefault=o_,t.interpolateRainbow=function(t){(t<0||t>1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return f_.h=360*t-100,f_.s=1.5-1.5*n,f_.l=.8-.9*n,f_+""},t.interpolateWarm=a_,t.interpolateCool=u_,t.interpolateSinebow=function(t){var n;return t=(.5-t)*Math.PI,c_.r=255*(n=Math.sin(t))*n,c_.g=255*(n=Math.sin(t+s_))*n,c_.b=255*(n=Math.sin(t+l_))*n,c_+""},t.interpolateViridis=h_,t.interpolateMagma=d_,t.interpolateInferno=p_,t.interpolatePlasma=v_,t.create=function(t){return ct(C(t).call(document.documentElement))},t.creator=C,t.local=st,t.matcher=bs,t.mouse=pt,t.namespace=k,t.namespaces=vs,t.clientPoint=dt,t.select=ct,t.selectAll=function(t){return"string"==typeof t?new ut([document.querySelectorAll(t)],[document.documentElement]):new ut([null==t?[]:t],ws)},t.selection=ft,t.selector=z,t.selectorAll=L,t.style=F,t.touch=vt,t.touches=function(t,n){null==n&&(n=ht().touches);for(var e=0,r=n?n.length:0,i=new Array(r);e<r;++e)i[e]=dt(t,n[e]);return i},t.window=B,t.customEvent=ot,t.arc=function(){function t(){var t,c,s=+n.apply(this,arguments),l=+e.apply(this,arguments),h=o.apply(this,arguments)-T_,d=a.apply(this,arguments)-T_,p=g_(d-h),v=d>h;if(f||(f=t=oe()),l<s&&(c=l,l=s,s=c),l>M_)if(p>N_-M_)f.moveTo(l*__(h),l*x_(h)),f.arc(0,0,l,h,d,!v),s>M_&&(f.moveTo(s*__(d),s*x_(d)),f.arc(0,0,s,d,h,v));else{var g,y,_=h,b=d,m=h,x=d,w=p,M=p,A=u.apply(this,arguments)/2,T=A>M_&&(i?+i.apply(this,arguments):w_(s*s+l*l)),N=m_(g_(l-s)/2,+r.apply(this,arguments)),S=N,E=N;if(T>M_){var k=hf(T/s*x_(A)),C=hf(T/l*x_(A));(w-=2*k)>M_?(k*=v?1:-1,m+=k,x-=k):(w=0,m=x=(h+d)/2),(M-=2*C)>M_?(C*=v?1:-1,_+=C,b-=C):(M=0,_=b=(h+d)/2)}var P=l*__(_),z=l*x_(_),R=s*__(x),L=s*x_(x);if(N>M_){var D=l*__(b),U=l*x_(b),q=s*__(m),O=s*x_(m);if(p<A_){var Y=w>M_?function(t,n,e,r,i,o,a,u){var f=e-t,c=r-n,s=a-i,l=u-o,h=(s*(n-o)-l*(t-i))/(l*f-s*c);return[t+h*f,n+h*c]}(P,z,q,O,D,U,R,L):[R,L],B=P-Y[0],F=z-Y[1],I=D-Y[0],j=U-Y[1],H=1/x_(function(t){return t>1?0:t<-1?A_:Math.acos(t)}((B*I+F*j)/(w_(B*B+F*F)*w_(I*I+j*j)))/2),X=w_(Y[0]*Y[0]+Y[1]*Y[1]);S=m_(N,(s-X)/(H-1)),E=m_(N,(l-X)/(H+1))}}M>M_?E>M_?(g=_f(q,O,P,z,l,E,v),y=_f(D,U,R,L,l,E,v),f.moveTo(g.cx+g.x01,g.cy+g.y01),E<N?f.arc(g.cx,g.cy,E,y_(g.y01,g.x01),y_(y.y01,y.x01),!v):(f.arc(g.cx,g.cy,E,y_(g.y01,g.x01),y_(g.y11,g.x11),!v),f.arc(0,0,l,y_(g.cy+g.y11,g.cx+g.x11),y_(y.cy+y.y11,y.cx+y.x11),!v),f.arc(y.cx,y.cy,E,y_(y.y11,y.x11),y_(y.y01,y.x01),!v))):(f.moveTo(P,z),f.arc(0,0,l,_,b,!v)):f.moveTo(P,z),s>M_&&w>M_?S>M_?(g=_f(R,L,D,U,s,-S,v),y=_f(P,z,q,O,s,-S,v),f.lineTo(g.cx+g.x01,g.cy+g.y01),S<N?f.arc(g.cx,g.cy,S,y_(g.y01,g.x01),y_(y.y01,y.x01),!v):(f.arc(g.cx,g.cy,S,y_(g.y01,g.x01),y_(g.y11,g.x11),!v),f.arc(0,0,s,y_(g.cy+g.y11,g.cx+g.x11),y_(y.cy+y.y11,y.cx+y.x11),v),f.arc(y.cx,y.cy,S,y_(y.y11,y.x11),y_(y.y01,y.x01),!v))):f.arc(0,0,s,x,m,v):f.lineTo(R,L)}else f.moveTo(0,0);if(f.closePath(),t)return f=null,t+""||null}var n=df,e=pf,r=lf(0),i=null,o=vf,a=gf,u=yf,f=null;return t.centroid=function(){var t=(+n.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-A_/2;return[__(r)*t,x_(r)*t]},t.innerRadius=function(e){return arguments.length?(n="function"==typeof e?e:lf(+e),t):n},t.outerRadius=function(n){return arguments.length?(e="function"==typeof n?n:lf(+n),t):e},t.cornerRadius=function(n){return arguments.length?(r="function"==typeof n?n:lf(+n),t):r},t.padRadius=function(n){return arguments.length?(i=null==n?null:"function"==typeof n?n:lf(+n),t):i},t.startAngle=function(n){return arguments.length?(o="function"==typeof n?n:lf(+n),t):o},t.endAngle=function(n){return arguments.length?(a="function"==typeof n?n:lf(+n),t):a},t.padAngle=function(n){return arguments.length?(u="function"==typeof n?n:lf(+n),t):u},t.context=function(n){return arguments.length?(f=null==n?null:n,t):f},t},t.area=Af,t.line=Mf,t.pie=function(){function t(t){var u,f,c,s,l,h=t.length,d=0,p=new Array(h),v=new Array(h),g=+i.apply(this,arguments),y=Math.min(N_,Math.max(-N_,o.apply(this,arguments)-g)),_=Math.min(Math.abs(y)/h,a.apply(this,arguments)),b=_*(y<0?-1:1);for(u=0;u<h;++u)(l=v[p[u]=u]=+n(t[u],u,t))>0&&(d+=l);for(null!=e?p.sort(function(t,n){return e(v[t],v[n])}):null!=r&&p.sort(function(n,e){return r(t[n],t[e])}),u=0,c=d?(y-h*b)/d:0;u<h;++u,g=s)f=p[u],s=g+((l=v[f])>0?l*c:0)+b,v[f]={data:t[f],index:u,value:l,startAngle:g,endAngle:s,padAngle:_};return v}var n=Nf,e=Tf,r=null,i=lf(0),o=lf(N_),a=lf(0);return t.value=function(e){return arguments.length?(n="function"==typeof e?e:lf(+e),t):n},t.sortValues=function(n){return arguments.length?(e=n,r=null,t):e},t.sort=function(n){return arguments.length?(r=n,e=null,t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:lf(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:lf(+n),t):o},t.padAngle=function(n){return arguments.length?(a="function"==typeof n?n:lf(+n),t):a},t},t.areaRadial=Pf,t.radialArea=Pf,t.lineRadial=Cf,t.radialLine=Cf,t.pointRadial=zf,t.linkHorizontal=function(){return Df(Uf)},t.linkVertical=function(){return Df(qf)},t.linkRadial=function(){var t=Df(Of);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.symbol=function(){function t(){var t;if(r||(r=t=oe()),n.apply(this,arguments).draw(r,+e.apply(this,arguments)),t)return r=null,t+""||null}var n=lf(k_),e=lf(64),r=null;return t.type=function(e){return arguments.length?(n="function"==typeof e?e:lf(e),t):n},t.size=function(n){return arguments.length?(e="function"==typeof n?n:lf(+n),t):e},t.context=function(n){return arguments.length?(r=null==n?null:n,t):r},t},t.symbols=X_,t.symbolCircle=k_,t.symbolCross=C_,t.symbolDiamond=R_,t.symbolSquare=O_,t.symbolStar=q_,t.symbolTriangle=B_,t.symbolWye=H_,t.curveBasisClosed=function(t){return new If(t)},t.curveBasisOpen=function(t){return new jf(t)},t.curveBasis=function(t){return new Ff(t)},t.curveBundle=G_,t.curveCardinalClosed=$_,t.curveCardinalOpen=W_,t.curveCardinal=V_,t.curveCatmullRomClosed=Q_,t.curveCatmullRomOpen=J_,t.curveCatmullRom=Z_,t.curveLinearClosed=function(t){return new Kf(t)},t.curveLinear=mf,t.curveMonotoneX=function(t){return new ic(t)},t.curveMonotoneY=function(t){return new oc(t)},t.curveNatural=function(t){return new uc(t)},t.curveStep=function(t){return new cc(t,.5)},t.curveStepAfter=function(t){return new cc(t,1)},t.curveStepBefore=function(t){return new cc(t,0)},t.stack=function(){function t(t){var o,a,u=n.apply(this,arguments),f=t.length,c=u.length,s=new Array(c);for(o=0;o<c;++o){for(var l,h=u[o],d=s[o]=new Array(f),p=0;p<f;++p)d[p]=l=[0,+i(t[p],h,p,t)],l.data=t[p];d.key=h}for(o=0,a=e(s);o<c;++o)s[a[o]].index=o;return r(s,a),s}var n=lf([]),e=lc,r=sc,i=hc;return t.keys=function(e){return arguments.length?(n="function"==typeof e?e:lf(E_.call(e)),t):n},t.value=function(n){return arguments.length?(i="function"==typeof n?n:lf(+n),t):i},t.order=function(n){return arguments.length?(e=null==n?lc:"function"==typeof n?n:lf(E_.call(n)),t):e},t.offset=function(n){return arguments.length?(r=null==n?sc:n,t):r},t},t.stackOffsetExpand=function(t,n){if((r=t.length)>0){for(var e,r,i,o=0,a=t[0].length;o<a;++o){for(i=e=0;e<r;++e)i+=t[e][o][1]||0;if(i)for(e=0;e<r;++e)t[e][o][1]/=i}sc(t,n)}},t.stackOffsetDiverging=function(t,n){if((u=t.length)>1)for(var e,r,i,o,a,u,f=0,c=t[n[0]].length;f<c;++f)for(o=a=0,e=0;e<u;++e)(i=(r=t[n[e]][f])[1]-r[0])>=0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=a,r[0]=a+=i):r[0]=o},t.stackOffsetNone=sc,t.stackOffsetSilhouette=function(t,n){if((e=t.length)>0){for(var e,r=0,i=t[n[0]],o=i.length;r<o;++r){for(var a=0,u=0;a<e;++a)u+=t[a][r][1]||0;i[r][1]+=i[r][0]=-u/2}sc(t,n)}},t.stackOffsetWiggle=function(t,n){if((i=t.length)>0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,a=1;a<r;++a){for(var u=0,f=0,c=0;u<i;++u){for(var s=t[n[u]],l=s[a][1]||0,h=(l-(s[a-1][1]||0))/2,d=0;d<u;++d){var p=t[n[d]];h+=(p[a][1]||0)-(p[a-1][1]||0)}f+=l,c+=h*l}e[a-1][1]+=e[a-1][0]=o,f&&(o-=c/f)}e[a-1][1]+=e[a-1][0]=o,sc(t,n)}},t.stackOrderAscending=dc,t.stackOrderDescending=function(t){return dc(t).reverse()},t.stackOrderInsideOut=function(t){var n,e,r=t.length,i=t.map(pc),o=lc(t).sort(function(t,n){return i[n]-i[t]}),a=0,u=0,f=[],c=[];for(n=0;n<r;++n)e=o[n],a<u?(a+=i[e],f.push(e)):(u+=i[e],c.push(e));return c.reverse().concat(f)},t.stackOrderNone=lc,t.stackOrderReverse=function(t){return lc(t).reverse()},t.timeInterval=Ia,t.timeMillisecond=Dv,t.timeMilliseconds=Uv,t.utcMillisecond=Dv,t.utcMilliseconds=Uv,t.timeSecond=Yv,t.timeSeconds=Bv,t.utcSecond=Yv,t.utcSeconds=Bv,t.timeMinute=Fv,t.timeMinutes=Iv,t.timeHour=jv,t.timeHours=Hv,t.timeDay=Xv,t.timeDays=Gv,t.timeWeek=Vv,t.timeWeeks=tg,t.timeSunday=Vv,t.timeSundays=tg,t.timeMonday=$v,t.timeMondays=ng,t.timeTuesday=Wv,t.timeTuesdays=eg,t.timeWednesday=Zv,t.timeWednesdays=rg,t.timeThursday=Qv,t.timeThursdays=ig,t.timeFriday=Jv,t.timeFridays=og,t.timeSaturday=Kv,t.timeSaturdays=ag,t.timeMonth=ug,t.timeMonths=fg,t.timeYear=cg,t.timeYears=sg,t.utcMinute=lg,t.utcMinutes=hg,t.utcHour=dg,t.utcHours=pg,t.utcDay=vg,t.utcDays=gg,t.utcWeek=yg,t.utcWeeks=Ag,t.utcSunday=yg,t.utcSundays=Ag,t.utcMonday=_g,t.utcMondays=Tg,t.utcTuesday=bg,t.utcTuesdays=Ng,t.utcWednesday=mg,t.utcWednesdays=Sg,t.utcThursday=xg,t.utcThursdays=Eg,t.utcFriday=wg,t.utcFridays=kg,t.utcSaturday=Mg,t.utcSaturdays=Cg,t.utcMonth=Pg,t.utcMonths=zg,t.utcYear=Rg,t.utcYears=Dg,t.timeFormatDefaultLocale=nf,t.timeFormatLocale=$a,t.isoFormat=Fg,t.isoParse=Ig,t.now=wn,t.timer=Tn,t.timerFlush=Nn,t.timeout=Cn,t.interval=function(t,n,e){var r=new An,i=n;return null==n?(r.restart(t,n,e),r):(n=+n,e=null==e?wn():+e,r.restart(function o(a){a+=i,r.restart(o,i+=n,e),t(a)},n,e),r)},t.transition=Yn,t.active=function(t,n){var e,r,i=t.__transition;if(i){n=null==n?null:n+"";for(r in i)if((e=i[r]).state>Ll&&e.name===n)return new On(t,hh,n,+r)}return null},t.interrupt=Dn,t.voronoi=function(){function t(t){return new Bc(t.map(function(r,i){var o=[Math.round(n(r,i,t)/ab)*ab,Math.round(e(r,i,t)/ab)*ab];return o.index=i,o.data=r,o}),r)}var n=gc,e=yc,r=null;return t.polygons=function(n){return t(n).polygons()},t.links=function(n){return t(n).links()},t.triangles=function(n){return t(n).triangles()},t.x=function(e){return arguments.length?(n="function"==typeof e?e:vc(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:vc(+n),t):e},t.extent=function(n){return arguments.length?(r=null==n?null:[[+n[0][0],+n[0][1]],[+n[1][0],+n[1][1]]],t):r&&[[r[0][0],r[0][1]],[r[1][0],r[1][1]]]},t.size=function(n){return arguments.length?(r=null==n?null:[[0,0],[+n[0],+n[1]]],t):r&&[r[1][0]-r[0][0],r[1][1]-r[0][1]]},t},t.zoom=function(){function n(t){t.property("__zoom",$c).on("wheel.zoom",f).on("mousedown.zoom",c).on("dblclick.zoom",s).filter(m).on("touchstart.zoom",l).on("touchmove.zoom",h).on("touchend.zoom touchcancel.zoom",d).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(t,n){return(n=Math.max(x[0],Math.min(x[1],n)))===t.k?t:new Ic(n,t.x,t.y)}function r(t,n,e){var r=n[0]-e[0]*t.k,i=n[1]-e[1]*t.k;return r===t.x&&i===t.y?t:new Ic(t.k,r,i)}function i(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function o(t,n,e){t.on("start.zoom",function(){a(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){a(this,arguments).end()}).tween("zoom",function(){var t=arguments,r=a(this,t),o=y.apply(this,t),u=e||i(o),f=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),c=this.__zoom,s="function"==typeof n?n.apply(this,t):n,l=A(c.invert(u).concat(f/c.k),s.invert(u).concat(f/s.k));return function(t){if(1===t)t=s;else{var n=l(t),e=f/n[2];t=new Ic(e,u[0]-n[0]*e,u[1]-n[1]*e)}r.zoom(null,t)}})}function a(t,n){for(var e,r=0,i=T.length;r<i;++r)if((e=T[r]).that===t)return e;return new u(t,n)}function u(t,n){this.that=t,this.args=n,this.index=-1,this.active=0,this.extent=y.apply(t,n)}function f(){if(g.apply(this,arguments)){var t=a(this,arguments),n=this.__zoom,i=Math.max(x[0],Math.min(x[1],n.k*Math.pow(2,b.apply(this,arguments)))),o=pt(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=n.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(n.k===i)return;t.mouse=[o,n.invert(o)],Dn(this),t.start()}Xc(),t.wheel=setTimeout(function(){t.wheel=null,t.end()},k),t.zoom("mouse",_(r(e(n,i),t.mouse[0],t.mouse[1]),t.extent,w))}}function c(){if(!v&&g.apply(this,arguments)){var n=a(this,arguments),e=ct(t.event.view).on("mousemove.zoom",function(){if(Xc(),!n.moved){var e=t.event.clientX-o,i=t.event.clientY-u;n.moved=e*e+i*i>C}n.zoom("mouse",_(r(n.that.__zoom,n.mouse[0]=pt(n.that),n.mouse[1]),n.extent,w))},!0).on("mouseup.zoom",function(){e.on("mousemove.zoom mouseup.zoom",null),bt(t.event.view,n.moved),Xc(),n.end()},!0),i=pt(this),o=t.event.clientX,u=t.event.clientY;_t(t.event.view),Hc(),n.mouse=[i,this.__zoom.invert(i)],Dn(this),n.start()}}function s(){if(g.apply(this,arguments)){var i=this.__zoom,a=pt(this),u=i.invert(a),f=i.k*(t.event.shiftKey?.5:2),c=_(r(e(i,f),a,u),y.apply(this,arguments),w);Xc(),M>0?ct(this).transition().duration(M).call(o,c,a):ct(this).call(n.transform,c)}}function l(){if(g.apply(this,arguments)){var n,e,r,i,o=a(this,arguments),u=t.event.changedTouches,f=u.length;for(Hc(),e=0;e<f;++e)i=[i=vt(this,u,(r=u[e]).identifier),this.__zoom.invert(i),r.identifier],o.touch0?o.touch1||(o.touch1=i):(o.touch0=i,n=!0);if(p&&(p=clearTimeout(p),!o.touch1))return o.end(),void((i=ct(this).on("dblclick.zoom"))&&i.apply(this,arguments));n&&(p=setTimeout(function(){p=null},E),Dn(this),o.start())}}function h(){var n,i,o,u,f=a(this,arguments),c=t.event.changedTouches,s=c.length;for(Xc(),p&&(p=clearTimeout(p)),n=0;n<s;++n)o=vt(this,c,(i=c[n]).identifier),f.touch0&&f.touch0[2]===i.identifier?f.touch0[0]=o:f.touch1&&f.touch1[2]===i.identifier&&(f.touch1[0]=o);if(i=f.that.__zoom,f.touch1){var l=f.touch0[0],h=f.touch0[1],d=f.touch1[0],v=f.touch1[1],g=(g=d[0]-l[0])*g+(g=d[1]-l[1])*g,y=(y=v[0]-h[0])*y+(y=v[1]-h[1])*y;i=e(i,Math.sqrt(g/y)),o=[(l[0]+d[0])/2,(l[1]+d[1])/2],u=[(h[0]+v[0])/2,(h[1]+v[1])/2]}else{if(!f.touch0)return;o=f.touch0[0],u=f.touch0[1]}f.zoom("touch",_(r(i,o,u),f.extent,w))}function d(){var n,e,r=a(this,arguments),i=t.event.changedTouches,o=i.length;for(Hc(),v&&clearTimeout(v),v=setTimeout(function(){v=null},E),n=0;n<o;++n)e=i[n],r.touch0&&r.touch0[2]===e.identifier?delete r.touch0:r.touch1&&r.touch1[2]===e.identifier&&delete r.touch1;r.touch1&&!r.touch0&&(r.touch0=r.touch1,delete r.touch1),r.touch0?r.touch0[1]=this.__zoom.invert(r.touch0[0]):r.end()}var p,v,g=Gc,y=Vc,_=Qc,b=Wc,m=Zc,x=[0,1/0],w=[[-1/0,-1/0],[1/0,1/0]],M=250,A=_n,T=[],S=N("start","zoom","end"),E=500,k=150,C=0;return n.transform=function(t,n){var e=t.selection?t.selection():t;e.property("__zoom",$c),t!==e?o(t,n):e.interrupt().each(function(){a(this,arguments).start().zoom(null,"function"==typeof n?n.apply(this,arguments):n).end()})},n.scaleBy=function(t,e){n.scaleTo(t,function(){return this.__zoom.k*("function"==typeof e?e.apply(this,arguments):e)})},n.scaleTo=function(t,o){n.transform(t,function(){var t=y.apply(this,arguments),n=this.__zoom,a=i(t),u=n.invert(a),f="function"==typeof o?o.apply(this,arguments):o;return _(r(e(n,f),a,u),t,w)})},n.translateBy=function(t,e,r){n.transform(t,function(){return _(this.__zoom.translate("function"==typeof e?e.apply(this,arguments):e,"function"==typeof r?r.apply(this,arguments):r),y.apply(this,arguments),w)})},n.translateTo=function(t,e,r){n.transform(t,function(){var t=y.apply(this,arguments),n=this.__zoom,o=i(t);return _(fb.translate(o[0],o[1]).scale(n.k).translate("function"==typeof e?-e.apply(this,arguments):-e,"function"==typeof r?-r.apply(this,arguments):-r),t,w)})},u.prototype={start:function(){return 1==++this.active&&(this.index=T.push(this)-1,this.emit("start")),this},zoom:function(t,n){return this.mouse&&"mouse"!==t&&(this.mouse[1]=n.invert(this.mouse[0])),this.touch0&&"touch"!==t&&(this.touch0[1]=n.invert(this.touch0[0])),this.touch1&&"touch"!==t&&(this.touch1[1]=n.invert(this.touch1[0])),this.that.__zoom=n,this.emit("zoom"),this},end:function(){return 0==--this.active&&(T.splice(this.index,1),this.index=-1,this.emit("end")),this},emit:function(t){ot(new function(t,n,e){this.target=t,this.type=n,this.transform=e}(n,t,this.that.__zoom),S.apply,S,[t,this.that,this.args])}},n.wheelDelta=function(t){return arguments.length?(b="function"==typeof t?t:Fc(+t),n):b},n.filter=function(t){return arguments.length?(g="function"==typeof t?t:Fc(!!t),n):g},n.touchable=function(t){return arguments.length?(m="function"==typeof t?t:Fc(!!t),n):m},n.extent=function(t){return arguments.length?(y="function"==typeof t?t:Fc([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),n):y},n.scaleExtent=function(t){return arguments.length?(x[0]=+t[0],x[1]=+t[1],n):[x[0],x[1]]},n.translateExtent=function(t){return arguments.length?(w[0][0]=+t[0][0],w[1][0]=+t[1][0],w[0][1]=+t[0][1],w[1][1]=+t[1][1],n):[[w[0][0],w[0][1]],[w[1][0],w[1][1]]]},n.constrain=function(t){return arguments.length?(_=t,n):_},n.duration=function(t){return arguments.length?(M=+t,n):M},n.interpolate=function(t){return arguments.length?(A=t,n):A},n.on=function(){var t=S.on.apply(S,arguments);return t===S?n:t},n.clickDistance=function(t){return arguments.length?(C=(t=+t)*t,n):Math.sqrt(C)},n},t.zoomTransform=jc,t.zoomIdentity=fb,Object.defineProperty(t,"__esModule",{value:!0})}); /*!
* Lightbox for Bootstrap by @ashleydw * https://github.com/ashleydw/lightbox * * License: https://github.com/ashleydw/lightbox/blob/master/LICENSE */
+function ($) {
'use strict';
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var Lightbox = (function ($) {
var NAME = 'ekkoLightbox'; var JQUERY_NO_CONFLICT = $.fn[NAME];
var Default = { title: , footer: , maxWidth: 9999, maxHeight: 9999, showArrows: true, //display the left / right arrows or not wrapping: true, //if true, gallery loops infinitely type: null, //force the lightbox into image / youtube mode. if null, or not image|youtube|vimeo; detect it alwaysShowClose: false, //always show the close button, even if there is no title
loadingMessage: 'leftArrow: '❮', rightArrow: '❯', strings: { close: 'Close', fail: 'Failed to load image:', type: 'Could not detect remote target type. Force the type using data-type' }, doc: document, // if in an iframe can specify top.document onShow: function onShow() {}, onShown: function onShown() {}, onHide: function onHide() {}, onHidden: function onHidden() {}, onNavigate: function onNavigate() {}, onContentLoaded: function onContentLoaded() {} };
var Lightbox = (function () { _createClass(Lightbox, null, [{ key: 'Default',
/**
Class properties: _$element: null -> the <a> element currently being displayed _$modal: The bootstrap modal generated _$modalDialog: The .modal-dialog _$modalContent: The .modal-content _$modalBody: The .modal-body _$modalHeader: The .modal-header _$modalFooter: The .modal-footer _$lightboxContainerOne: Container of the first lightbox element _$lightboxContainerTwo: Container of the second lightbox element _$lightboxBody: First element in the container _$modalArrows: The overlayed arrows container _$galleryItems: Other <a>'s available for this gallery _galleryName: Name of the current data('gallery') showing _galleryIndex: The current index of the _$galleryItems being shown _config: {} the options for the modal _modalId: unique id for the current lightbox _padding / _border: CSS properties for the modal container; these are used to calculate the available space for the content */
get: function get() { return Default; } }]);
function Lightbox($element, config) { var _this = this;
_classCallCheck(this, Lightbox);
this._config = $.extend({}, Default, config); this._$modalArrows = null; this._galleryIndex = 0; this._galleryName = null; this._padding = null; this._border = null; this._titleIsShown = false; this._footerIsShown = false; this._wantedWidth = 0; this._wantedHeight = 0; this._touchstartX = 0; this._touchendX = 0;
this._modalId = 'ekkoLightbox-' + Math.floor(Math.random() * 1000 + 1); this._$element = $element instanceof jQuery ? $element : $($element);
this._isBootstrap3 = $.fn.modal.Constructor.VERSION[0] == 3;
var h4 = '' + (this._config.title || " ") + '
';var btn = '<button type="button" class="close" data-dismiss="modal" aria-label="' + this._config.strings.close + '">×</button>';
var header = ' '; var footer = ' '; var body = 'this._$modal = $('#' + this._modalId, this._config.doc); this._$modalDialog = this._$modal.find('.modal-dialog').first(); this._$modalContent = this._$modal.find('.modal-content').first(); this._$modalBody = this._$modal.find('.modal-body').first(); this._$modalHeader = this._$modal.find('.modal-header').first(); this._$modalFooter = this._$modal.find('.modal-footer').first();
this._$lightboxContainer = this._$modalBody.find('.ekko-lightbox-container').first(); this._$lightboxBodyOne = this._$lightboxContainer.find('> div:first-child').first(); this._$lightboxBodyTwo = this._$lightboxContainer.find('> div:last-child').first();
this._border = this._calculateBorders(); this._padding = this._calculatePadding();
this._galleryName = this._$element.data('gallery'); if (this._galleryName) { this._$galleryItems = $(document.body).find('*[data-gallery="' + this._galleryName + '"]'); this._galleryIndex = this._$galleryItems.index(this._$element); $(document).on('keydown.ekkoLightbox', this._navigationalBinder.bind(this));
// add the directional arrows to the modal if (this._config.showArrows && this._$galleryItems.length > 1) {
this._$lightboxContainer.append(' ');this._$modalArrows = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay').first(); this._$lightboxContainer.on('click', 'a:first-child', function (event) { event.preventDefault(); return _this.navigateLeft(); }); this._$lightboxContainer.on('click', 'a:last-child', function (event) { event.preventDefault(); return _this.navigateRight(); }); this.updateNavigation(); } }
this._$modal.on('show.bs.modal', this._config.onShow.bind(this)).on('shown.bs.modal', function () { _this._toggleLoading(true); _this._handle(); return _this._config.onShown.call(_this); }).on('hide.bs.modal', this._config.onHide.bind(this)).on('hidden.bs.modal', function () { if (_this._galleryName) { $(document).off('keydown.ekkoLightbox'); $(window).off('resize.ekkoLightbox'); } _this._$modal.remove(); return _this._config.onHidden.call(_this); }).modal(this._config);
$(window).on('resize.ekkoLightbox', function () { _this._resize(_this._wantedWidth, _this._wantedHeight); }); this._$lightboxContainer.on('touchstart', function () { _this._touchstartX = event.changedTouches[0].screenX; }).on('touchend', function () { _this._touchendX = event.changedTouches[0].screenX; _this._swipeGesure(); }); }
_createClass(Lightbox, [{ key: 'element', value: function element() { return this._$element; } }, { key: 'modal', value: function modal() { return this._$modal; } }, { key: 'navigateTo', value: function navigateTo(index) {
if (index < 0 || index > this._$galleryItems.length - 1) return this;
this._galleryIndex = index;
this.updateNavigation();
this._$element = $(this._$galleryItems.get(this._galleryIndex)); this._handle(); } }, { key: 'navigateLeft', value: function navigateLeft() {
if (!this._$galleryItems) return;
if (this._$galleryItems.length === 1) return;
if (this._galleryIndex === 0) { if (this._config.wrapping) this._galleryIndex = this._$galleryItems.length - 1;else return; } else //circular this._galleryIndex--;
this._config.onNavigate.call(this, 'left', this._galleryIndex); return this.navigateTo(this._galleryIndex); } }, { key: 'navigateRight', value: function navigateRight() {
if (!this._$galleryItems) return;
if (this._$galleryItems.length === 1) return;
if (this._galleryIndex === this._$galleryItems.length - 1) { if (this._config.wrapping) this._galleryIndex = 0;else return; } else //circular this._galleryIndex++;
this._config.onNavigate.call(this, 'right', this._galleryIndex); return this.navigateTo(this._galleryIndex); } }, { key: 'updateNavigation', value: function updateNavigation() { if (!this._config.wrapping) { var $nav = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay'); if (this._galleryIndex === 0) $nav.find('a:first-child').addClass('disabled');else $nav.find('a:first-child').removeClass('disabled');
if (this._galleryIndex === this._$galleryItems.length - 1) $nav.find('a:last-child').addClass('disabled');else $nav.find('a:last-child').removeClass('disabled'); } } }, { key: 'close', value: function close() { return this._$modal.modal('hide'); }
// helper private methods }, { key: '_navigationalBinder', value: function _navigationalBinder(event) { event = event || window.event; if (event.keyCode === 39) return this.navigateRight(); if (event.keyCode === 37) return this.navigateLeft(); }
// type detection private methods }, { key: '_detectRemoteType', value: function _detectRemoteType(src, type) {
type = type || false;
if (!type && this._isImage(src)) type = 'image'; if (!type && this._getYoutubeId(src)) type = 'youtube'; if (!type && this._getVimeoId(src)) type = 'vimeo'; if (!type && this._getInstagramId(src)) type = 'instagram';
if (!type || ['image', 'youtube', 'vimeo', 'instagram', 'video', 'url'].indexOf(type) < 0) type = 'url';
return type; } }, { key: '_isImage', value: function _isImage(string) { return string && string.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i); } }, { key: '_containerToUse', value: function _containerToUse() { var _this2 = this;
// if currently showing an image, fade it out and remove var $toUse = this._$lightboxBodyTwo; var $current = this._$lightboxBodyOne;
if (this._$lightboxBodyTwo.hasClass('in')) { $toUse = this._$lightboxBodyOne; $current = this._$lightboxBodyTwo; }
$current.removeClass('in show'); setTimeout(function () { if (!_this2._$lightboxBodyTwo.hasClass('in')) _this2._$lightboxBodyTwo.empty(); if (!_this2._$lightboxBodyOne.hasClass('in')) _this2._$lightboxBodyOne.empty(); }, 500);
$toUse.addClass('in show'); return $toUse; } }, { key: '_handle', value: function _handle() {
var $toUse = this._containerToUse(); this._updateTitleAndFooter();
var currentRemote = this._$element.attr('data-remote') || this._$element.attr('href'); var currentType = this._detectRemoteType(currentRemote, this._$element.attr('data-type') || false);
if (['image', 'youtube', 'vimeo', 'instagram', 'video', 'url'].indexOf(currentType) < 0) return this._error(this._config.strings.type);
switch (currentType) { case 'image': this._preloadImage(currentRemote, $toUse); this._preloadImageByIndex(this._galleryIndex, 3); break; case 'youtube': this._showYoutubeVideo(currentRemote, $toUse); break; case 'vimeo': this._showVimeoVideo(this._getVimeoId(currentRemote), $toUse); break; case 'instagram': this._showInstagramVideo(this._getInstagramId(currentRemote), $toUse); break; case 'video': this._showHtml5Video(currentRemote, $toUse); break; default: // url this._loadRemoteContent(currentRemote, $toUse); break; }
return this; } }, { key: '_getYoutubeId', value: function _getYoutubeId(string) { if (!string) return false; var matches = string.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/); return matches && matches[2].length === 11 ? matches[2] : false; } }, { key: '_getVimeoId', value: function _getVimeoId(string) { return string && string.indexOf('vimeo') > 0 ? string : false; } }, { key: '_getInstagramId', value: function _getInstagramId(string) { return string && string.indexOf('instagram') > 0 ? string : false; }
// layout private methods }, { key: '_toggleLoading', value: function _toggleLoading(show) { show = show || false; if (show) { this._$modalDialog.css('display', 'none'); this._$modal.removeClass('in show'); $('.modal-backdrop').append(this._config.loadingMessage); } else { this._$modalDialog.css('display', 'block'); this._$modal.addClass('in show'); $('.modal-backdrop').find('.ekko-lightbox-loader').remove(); } return this; } }, { key: '_calculateBorders', value: function _calculateBorders() { return { top: this._totalCssByAttribute('border-top-width'), right: this._totalCssByAttribute('border-right-width'), bottom: this._totalCssByAttribute('border-bottom-width'), left: this._totalCssByAttribute('border-left-width') }; } }, { key: '_calculatePadding', value: function _calculatePadding() { return { top: this._totalCssByAttribute('padding-top'), right: this._totalCssByAttribute('padding-right'), bottom: this._totalCssByAttribute('padding-bottom'), left: this._totalCssByAttribute('padding-left') }; } }, { key: '_totalCssByAttribute', value: function _totalCssByAttribute(attribute) { return parseInt(this._$modalDialog.css(attribute), 10) + parseInt(this._$modalContent.css(attribute), 10) + parseInt(this._$modalBody.css(attribute), 10); } }, { key: '_updateTitleAndFooter', value: function _updateTitleAndFooter() { var title = this._$element.data('title') || ""; var caption = this._$element.data('footer') || "";
this._titleIsShown = false; if (title || this._config.alwaysShowClose) { this._titleIsShown = true; this._$modalHeader.css('display', ).find('.modal-title').html(title || " "); } else this._$modalHeader.css('display', 'none');
this._footerIsShown = false; if (caption) { this._footerIsShown = true; this._$modalFooter.css('display', ).html(caption); } else this._$modalFooter.css('display', 'none');
return this; } }, { key: '_showYoutubeVideo', value: function _showYoutubeVideo(remote, $containerForElement) { var id = this._getYoutubeId(remote); var query = remote.indexOf('&') > 0 ? remote.substr(remote.indexOf('&')) : ; var width = this._$element.data('width') || 560; var height = this._$element.data('height') || width / (560 / 315); return this._showVideoIframe('//www.youtube.com/embed/' + id + '?badge=0&autoplay=1&html5=1' + query, width, height, $containerForElement); } }, { key: '_showVimeoVideo', value: function _showVimeoVideo(id, $containerForElement) { var width = this._$element.data('width') || 500; var height = this._$element.data('height') || width / (560 / 315); return this._showVideoIframe(id + '?autoplay=1', width, height, $containerForElement); } }, { key: '_showInstagramVideo', value: function _showInstagramVideo(id, $containerForElement) { // instagram load their content into iframe's so this can be put straight into the element var width = this._$element.data('width') || 612; var height = width + 80; id = id.substr(-1) !== '/' ? id + '/' : id; // ensure id has trailing slash $containerForElement.html('<iframe width="' + width + '" height="' + height + '" src="' + id + 'embed/" frameborder="0" allowfullscreen></iframe>'); this._resize(width, height); this._config.onContentLoaded.call(this); if (this._$modalArrows) //hide the arrows when showing video this._$modalArrows.css('display', 'none'); this._toggleLoading(false); return this; } }, { key: '_showVideoIframe', value: function _showVideoIframe(url, width, height, $containerForElement) { // should be used for videos only. for remote content use loadRemoteContent (data-type=url) height = height || width; // default to square
$containerForElement.html(' ');this._resize(width, height); this._config.onContentLoaded.call(this); if (this._$modalArrows) this._$modalArrows.css('display', 'none'); //hide the arrows when showing video this._toggleLoading(false); return this; } }, { key: '_showHtml5Video', value: function _showHtml5Video(url, $containerForElement) { // should be used for videos only. for remote content use loadRemoteContent (data-type=url) var width = this._$element.data('width') || 560; var height = this._$element.data('height') || width / (560 / 315);
$containerForElement.html(' ');this._resize(width, height); this._config.onContentLoaded.call(this); if (this._$modalArrows) this._$modalArrows.css('display', 'none'); //hide the arrows when showing video this._toggleLoading(false); return this; } }, { key: '_loadRemoteContent', value: function _loadRemoteContent(url, $containerForElement) { var _this3 = this;
var width = this._$element.data('width') || 560; var height = this._$element.data('height') || 560;
var disableExternalCheck = this._$element.data('disableExternalCheck') || false; this._toggleLoading(false);
// external urls are loading into an iframe // local ajax can be loaded into the container itself if (!disableExternalCheck && !this._isExternal(url)) { $containerForElement.load(url, $.proxy(function () { return _this3._$element.trigger('loaded.bs.modal');l; })); } else { $containerForElement.html('<iframe src="' + url + '" frameborder="0" allowfullscreen></iframe>'); this._config.onContentLoaded.call(this); }
if (this._$modalArrows) //hide the arrows when remote content this._$modalArrows.css('display', 'none');
this._resize(width, height); return this; } }, { key: '_isExternal', value: function _isExternal(url) { var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/); if (typeof match[1] === "string" && match[1].length > 0 && match[1].toLowerCase() !== location.protocol) return true;
if (typeof match[2] === "string" && match[2].length > 0 && match[2].replace(new RegExp(':(' + ({ "http:": 80, "https:": 443 })[location.protocol] + ')?$'), "") !== location.host) return true;
return false; } }, { key: '_error', value: function _error(message) { console.error(message); this._containerToUse().html(message); this._resize(300, 300); return this; } }, { key: '_preloadImageByIndex', value: function _preloadImageByIndex(startIndex, numberOfTimes) {
if (!this._$galleryItems) return;
var next = $(this._$galleryItems.get(startIndex), false); if (typeof next == 'undefined') return;
var src = next.attr('data-remote') || next.attr('href'); if (next.attr('data-type') === 'image' || this._isImage(src)) this._preloadImage(src, false);
if (numberOfTimes > 0) return this._preloadImageByIndex(startIndex + 1, numberOfTimes - 1); } }, { key: '_preloadImage', value: function _preloadImage(src, $containerForImage) { var _this4 = this;
$containerForImage = $containerForImage || false;
var img = new Image(); if ($containerForImage) { (function () {
// if loading takes > 200ms show a loader var loadingTimeout = setTimeout(function () { $containerForImage.append(_this4._config.loadingMessage); }, 200);
img.onload = function () { if (loadingTimeout) clearTimeout(loadingTimeout); loadingTimeout = null; var image = $('<img />'); image.attr('src', img.src); image.addClass('img-fluid');
// backward compatibility for bootstrap v3 image.css('width', '100%');
$containerForImage.html(image); if (_this4._$modalArrows) _this4._$modalArrows.css('display', ); // remove display to default to css property
_this4._resize(img.width, img.height); _this4._toggleLoading(false); return _this4._config.onContentLoaded.call(_this4); }; img.onerror = function () { _this4._toggleLoading(false); return _this4._error(_this4._config.strings.fail + (' ' + src)); }; })(); }
img.src = src; return img; } }, { key: '_swipeGesure', value: function _swipeGesure() { if (this._touchendX < this._touchstartX) { return this.navigateRight(); } if (this._touchendX > this._touchstartX) { return this.navigateLeft(); } } }, { key: '_resize', value: function _resize(width, height) {
height = height || width; this._wantedWidth = width; this._wantedHeight = height;
var imageAspecRatio = width / height;
// if width > the available space, scale down the expected width and height var widthBorderAndPadding = this._padding.left + this._padding.right + this._border.left + this._border.right;
// force 10px margin if window size > 575px var addMargin = this._config.doc.body.clientWidth > 575 ? 20 : 0; var discountMargin = this._config.doc.body.clientWidth > 575 ? 0 : 20;
var maxWidth = Math.min(width + widthBorderAndPadding, this._config.doc.body.clientWidth - addMargin, this._config.maxWidth);
if (width + widthBorderAndPadding > maxWidth) { height = (maxWidth - widthBorderAndPadding - discountMargin) / imageAspecRatio; width = maxWidth; } else width = width + widthBorderAndPadding;
var headerHeight = 0, footerHeight = 0;
// as the resize is performed the modal is show, the calculate might fail // if so, default to the default sizes if (this._footerIsShown) footerHeight = this._$modalFooter.outerHeight(true) || 55;
if (this._titleIsShown) headerHeight = this._$modalHeader.outerHeight(true) || 67;
var borderPadding = this._padding.top + this._padding.bottom + this._border.bottom + this._border.top;
//calculated each time as resizing the window can cause them to change due to Bootstraps fluid margins var margins = parseFloat(this._$modalDialog.css('margin-top')) + parseFloat(this._$modalDialog.css('margin-bottom'));
var maxHeight = Math.min(height, $(window).height() - borderPadding - margins - headerHeight - footerHeight, this._config.maxHeight - borderPadding - headerHeight - footerHeight);
if (height > maxHeight) { // if height > the available height, scale down the width width = Math.ceil(maxHeight * imageAspecRatio) + widthBorderAndPadding; }
this._$lightboxContainer.css('height', maxHeight); this._$modalDialog.css('flex', 1).css('maxWidth', width);
var modal = this._$modal.data('bs.modal'); if (modal) { // v4 method is mistakenly protected try { modal._handleUpdate(); } catch (Exception) { modal.handleUpdate(); } } return this; } }], [{ key: '_jQueryInterface', value: function _jQueryInterface(config) { var _this5 = this;
config = config || {}; return this.each(function () { var $this = $(_this5); var _config = $.extend({}, Lightbox.Default, $this.data(), typeof config === 'object' && config);
new Lightbox(_this5, _config); }); } }]);
return Lightbox; })();
$.fn[NAME] = Lightbox._jQueryInterface; $.fn[NAME].Constructor = Lightbox; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Lightbox._jQueryInterface; };
return Lightbox; })(jQuery); //# sourceMappingURL=ekko-lightbox.js.map
}(jQuery);
$(document).ready(function() { var previous = " ";
$("#image_gallery").click(function(event) { var id_name = event.target.id; id_name = id_name.replace(/[0-9]/g, ); //regex for alphabets, no numbers var id_toggle = document.getElementById(id_name); //get ID of names under class "team-bio" if(document.getElementById(id_name)){ //if ID exists
if((previous != id_name) && (previous != " ")){ //if you click a diff image var id_previous = document.getElementById(previous); $(id_previous).toggle("hidden"); console.log(id_previous);
} else if(previous == id_name){ //clicking on the same image $(id_toggle).toggle("unhidden"); } $(id_toggle).toggle("unhidden"); //toggles txtbox to appear
previous = id_name;//checks to see if you clicked different images } else{ alert("This person does not exist. Try again."); } } );
}); (function($) {
$.fn.visible = function() {
var $t = $(this), $w = $(window), windowHeight = window.innerHeight, windowTop = $w.scrollTop(), windowBottom = windowTop + windowHeight, _height = $t.outerHeight(), _top = $t.offset().top, _bottom = _top + _height;
return ((_bottom >= windowTop) && (_top <= windowBottom)); };
})(jQuery);
$(document).ready(function () {
$(window).on("scroll", function () { if ($(window).scrollTop() >= 100 && !$(".navbar").hasClass("fixed")) { $(".navbar").addClass("fixed").addClass("fixed-top").animate({ top: 0, opacity: 1 }, 1000);
} else if ($(window).scrollTop() <= 50) { $(".navbar").css("top", "").removeClass("fixed").removeClass("fixed-top"); } }); //on or scroll, detect elements in view $(window).on('scroll resize', function() { $('.fly-in').each(function (i, val) { if($(val).visible()){ $(val).addClass("come-in"); } }) }); //trigger our scroll event on initial load $(window).trigger('scroll');
});
$(document).ready(function () {
let widthPol = 1920, heightPol = 100;
const headerPoly = [ {"x": 0, "y": 100}, {"x": widthPol, "y": 100}, {"x": widthPol, "y": 0}, {"x": 0, "y": 50}, {"x": 0, "y": 100}, ];
let widthImgOverlay = 1920, heightImgOverlay = 100;
const imagePolyTop = [ {"x": 0, "y": 100}, {"x": widthImgOverlay, "y": 50}, {"x": widthImgOverlay, "y": 0}, {"x": 0, "y": 0}, {"x": 0, "y": 100}, ];
const imagePolyBottom = [ {"x": 0, "y": 100}, {"x": widthImgOverlay, "y": 100}, {"x": widthImgOverlay, "y": 0}, {"x": 0, "y": 50}, {"x": 0, "y": 100}, ];
let imgHeaderHolder = d3.select("body").select("#bottom-landing-overlay").select('#landing-svg') .attr("width", widthPol) .attr("height", heightPol);
console.log(d3.select("body"));
let imgBottomHolder = d3.select("body").selectAll(".svg-image-overlay-bottom") .attr("width", widthImgOverlay) .attr("height", heightImgOverlay);
let imgTopHolder = d3.select("body").selectAll(".svg-image-overlay-top") .attr("width", widthImgOverlay) .attr("height", heightImgOverlay);
createPolygon(headerPoly, widthPol, heightPol, imgHeaderHolder); createPolygon(imagePolyBottom, widthImgOverlay, heightImgOverlay, imgBottomHolder); createPolygon(imagePolyTop, widthImgOverlay, heightImgOverlay, imgTopHolder);
function createPolygon(polygon, width, height, vis) {
let svg = vis.selectAll("path").data([polygon]);
svg.exit().remove();
let lineFunction = d3.line() .x(function (d) { return d.x }) .y(function (d) { return d.y });
svg.enter().append("path") .attr("d", lineFunction(polygon)) .attr("fill", "#fff"); }
$(document).on('click', '[data-toggle="lightbox"]', function(event) { event.preventDefault(); $(this).ekkoLightbox({ leftArrow: true, rightArrow: true }); });
}); var sitemap = {
: 'home', 'Overview_Project': 'quorus', 'Description': 'quorus', 'Design': 'quorus', 'Experiments': 'quorus', 'Notebook': 'quorus', 'InterLab': 'quorus', 'Model': 'quorus', 'Results': 'quorus', 'Demonstrate': 'quorus', 'Improve': 'quorus',
'Parts': 'quorus', 'Basic_Part': 'quorus', 'Composite_Part': 'quorus', 'Part_Collection': 'quorus',
'Safety': 'quorus',
'Overview_HP': 'hp', 'Human_Practices': 'hp', 'Public_Engagement': 'hp',
'Team': 'team', 'Collaborations': 'team', 'Attributions': 'team',
'Applied_Design': 'competition', 'Entrepreneurship': 'competition', 'Hardware': 'competition', 'Measurement': 'competition', 'Model': 'competition', 'Software': 'competition'
} $(document).ready(function() {
var curnavitem = window.location.href; if(curnavitem.match(/igem\.org/i)) { // We know we're live curnavitem = curnavitem.replace(/(http:\/\/)?\d{4}\.igem\.org\.Team:\w+\/?/i, ); } else { curnavitem = curnavitem.replace(/(http:\/\/)?localhost:\d+\/?/, ); curnavitem = curnavitem.replace(/\.html/i, ); } console.log(curnavitem); $('.' + sitemap[curnavitem]).addClass('current');
}) // Code courtesy of Mohamed Hasan // https://codepen.io/Mhmdhasan/pen/mAdaQE
$(document).ready(function () {
'use strict'; var c, currentScrollTop = 0, navbar = $('header');
$(window).scroll(function () { var a = $(window).scrollTop(); var b = navbar.height(); currentScrollTop = a; if (c < currentScrollTop && a > b + b) { navbar.addClass("scrollUp"); } else if (c > currentScrollTop && !(a <= b)) { navbar.removeClass("scrollUp"); } c = currentScrollTop; });
}); //Code courtesy of https://codepen.io/kruxor/pen/CwpFq
$(window).scroll(function() {
if ($(this).scrollTop() > 50 ) { $('.scrolltop:hidden').stop(true, true).fadeIn(); } else { $('.scrolltop').stop(true, true).fadeOut(); }
}); $(function(){$(".scroll").click(function(){$("html,body").animate({scrollTop:$("#top").offset().top},"1000");return false})}) //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvb3RzdHJhcC5taW4uanMiLCJkMy5taW4uanMiLCJla2tvLWxpZ2h0Ym94LmpzIiwiZm9vdGVyLWhlYWRlci10ZW1wbGF0ZS5qcyIsImltYWdlLWdhbGxlcnkuanMiLCJpbmRleC5qcyIsIm5hdmxpbmUuanMiLCJzY3JvbGxzZW5zaXRpdmUuanMiLCJzbW9vdGhzY3JvbGxiYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNOQTtBQUNBO0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDNXBCQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJ3aWtpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gICogQm9vdHN0cmFwIHY0LjEuMCAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDE4IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgKi9cbiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyxyZXF1aXJlKFwianF1ZXJ5XCIpLHJlcXVpcmUoXCJwb3BwZXIuanNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZXhwb3J0c1wiLFwianF1ZXJ5XCIsXCJwb3BwZXIuanNcIl0sZSk6ZSh0LmJvb3RzdHJhcD17fSx0LmpRdWVyeSx0LlBvcHBlcil9KHRoaXMsZnVuY3Rpb24odCxlLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaS5rZXksaSl9fWZ1bmN0aW9uIG8odCxlLG4pe3JldHVybiBlJiZpKHQucHJvdG90eXBlLGUpLG4mJmkodCxuKSx0fWZ1bmN0aW9uIGgocil7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHM9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxlPU9iamVjdC5rZXlzKHMpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihlPWUuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHMsdCkuZW51bWVyYWJsZX0pKSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLG4saTtlPXIsaT1zW249dF0sbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOmksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPWl9KX1yZXR1cm4gcn1lPWUmJmUuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpP2UuZGVmYXVsdDplLGM9YyYmYy5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIik/Yy5kZWZhdWx0OmM7dmFyIHIsbixzLGEsbCx1LGYsZCxfLGcsbSxwLHYsRSx5LFQsQyxJLEEsRCxiLFMsdyxOLE8sayxQLEwsaixSLEgsVyxNLHgsVSxLLEYsVixRLEIsWSxHLHEseixYLEosWiwkLHR0LGV0LG50LGl0LHJ0LHN0LG90LGF0LGx0LGh0LGN0LHV0LGZ0LGR0LF90LGd0LG10LHB0LHZ0LEV0LHl0LFR0LEN0LEl0LEF0LER0LGJ0LFN0LHd0LE50LE90LGt0LFB0LEx0LGp0LFJ0LEh0LFd0LE10LHh0LFV0LEt0LEZ0LFZ0LFF0LEJ0LFl0LEd0LHF0LHp0LFh0LEp0LFp0LCR0LHRlLGVlLG5lLGllLHJlLHNlLG9lLGFlLGxlLGhlLGNlLHVlLGZlLGRlLF9lLGdlLG1lLHBlLHZlLEVlLHllLFRlLENlLEllLEFlLERlLGJlLFNlLHdlLE5lLE9lLGtlLFBlLExlLGplLFJlLEhlLFdlLE1lLHhlLFVlLEtlLEZlLFZlLFFlLEJlLFllLEdlLHFlLHplLFhlLEplLFplLCRlLHRuLGVuLG5uLHJuLHNuLG9uLGFuLGxuLGhuLGNuLHVuLGZuLGRuLF9uLGduLG1uLHBuLHZuLEVuLHluLFRuLENuPWZ1bmN0aW9uKGkpe3ZhciBlPVwidHJhbnNpdGlvbmVuZFwiO2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpcyxuPSExO3JldHVybiBpKHRoaXMpLm9uZShsLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKCl7bj0hMH0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtufHxsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKGUpfSx0KSx0aGlzfXZhciBsPXtUUkFOU0lUSU9OX0VORDpcImJzVHJhbnNpdGlvbkVuZFwiLGdldFVJRDpmdW5jdGlvbih0KXtmb3IoO3QrPX5+KDFlNipNYXRoLnJhbmRvbSgpKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTspO3JldHVybiB0fSxnZXRTZWxlY3RvckZyb21FbGVtZW50OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS10YXJnZXRcIik7ZSYmXCIjXCIhPT1lfHwoZT10LmdldEF0dHJpYnV0ZShcImhyZWZcIil8fFwiXCIpO3RyeXtyZXR1cm4gMDxpKGRvY3VtZW50KS5maW5kKGUpLmxlbmd0aD9lOm51bGx9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMDt2YXIgZT1pKHQpLmNzcyhcInRyYW5zaXRpb24tZHVyYXRpb25cIik7cmV0dXJuIHBhcnNlRmxvYXQoZSk/KGU9ZS5zcGxpdChcIixcIilbMF0sMWUzKnBhcnNlRmxvYXQoZSkpOjB9LHJlZmxvdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRIZWlnaHR9LHRyaWdnZXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe2kodCkudHJpZ2dlcihlKX0sc3VwcG9ydHNUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oZSl9LGlzRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4odFswXXx8dCkubm9kZVR5cGV9LHR5cGVDaGVja0NvbmZpZzpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpIGluIG4paWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkpe3ZhciByPW5baV0scz1lW2ldLG89cyYmbC5pc0VsZW1lbnQocyk/XCJlbGVtZW50XCI6KGE9cyx7fS50b1N0cmluZy5jYWxsKGEpLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpKTtpZighbmV3IFJlZ0V4cChyKS50ZXN0KG8pKXRocm93IG5ldyBFcnJvcih0LnRvVXBwZXJDYXNlKCkrJzogT3B0aW9uIFwiJytpKydcIiBwcm92aWRlZCB0eXBlIFwiJytvKydcIiBidXQgZXhwZWN0ZWQgdHlwZSBcIicrcisnXCIuJyl9dmFyIGF9fTtyZXR1cm4gaS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD10LGkuZXZlbnQuc3BlY2lhbFtsLlRSQU5TSVRJT05fRU5EXT17YmluZFR5cGU6ZSxkZWxlZ2F0ZVR5cGU6ZSxoYW5kbGU6ZnVuY3Rpb24odCl7aWYoaSh0LnRhcmdldCkuaXModGhpcykpcmV0dXJuIHQuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sbH0oZSksSW49KG49XCJhbGVydFwiLGE9XCIuXCIrKHM9XCJicy5hbGVydFwiKSxsPShyPWUpLmZuW25dLHU9e0NMT1NFOlwiY2xvc2VcIithLENMT1NFRDpcImNsb3NlZFwiK2EsQ0xJQ0tfREFUQV9BUEk6XCJjbGlja1wiK2ErXCIuZGF0YS1hcGlcIn0sZj1cImFsZXJ0XCIsZD1cImZhZGVcIixfPVwic2hvd1wiLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQpe3RoaXMuX2VsZW1lbnQ9dH12YXIgdD1pLnByb3RvdHlwZTtyZXR1cm4gdC5jbG9zZT1mdW5jdGlvbih0KXt0PXR8fHRoaXMuX2VsZW1lbnQ7dmFyIGU9dGhpcy5fZ2V0Um9vdEVsZW1lbnQodCk7dGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQoZSkuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuX3JlbW92ZUVsZW1lbnQoZSl9LHQuZGlzcG9zZT1mdW5jdGlvbigpe3IucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHMpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5fZ2V0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9Q24uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KSxuPSExO3JldHVybiBlJiYobj1yKGUpWzBdKSxufHwobj1yKHQpLmNsb3Nlc3QoXCIuXCIrZilbMF0pLG59LHQuX3RyaWdnZXJDbG9zZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXIuRXZlbnQodS5DTE9TRSk7cmV0dXJuIHIodCkudHJpZ2dlcihlKSxlfSx0Ll9yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYocihlKS5yZW1vdmVDbGFzcyhfKSxyKGUpLmhhc0NsYXNzKGQpKXt2YXIgdD1Dbi5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChlKTtyKGUpLm9uZShDbi5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbih0KXtyZXR1cm4gbi5fZGVzdHJveUVsZW1lbnQoZSx0KX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHQpfWVsc2UgdGhpcy5fZGVzdHJveUVsZW1lbnQoZSl9LHQuX2Rlc3Ryb3lFbGVtZW50PWZ1bmN0aW9uKHQpe3IodCkuZGV0YWNoKCkudHJpZ2dlcih1LkNMT1NFRCkucmVtb3ZlKCl9LGkuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9cih0aGlzKSxlPXQuZGF0YShzKTtlfHwoZT1uZXcgaSh0aGlzKSx0LmRhdGEocyxlKSksXCJjbG9zZVwiPT09biYmZVtuXSh0aGlzKX0pfSxpLl9oYW5kbGVEaXNtaXNzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0JiZ0LnByZXZlbnREZWZhdWx0KCksZS5jbG9zZSh0aGlzKX19LG8oaSxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC4xLjBcIn19XSksaX0oKSxyKGRvY3VtZW50KS5vbih1LkNMSUNLX0RBVEFfQVBJLCdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nLGcuX2hhbmRsZURpc21pc3MobmV3IGcpKSxyLmZuW25dPWcuX2pRdWVyeUludGVyZmFjZSxyLmZuW25dLkNvbnN0cnVjdG9yPWcsci5mbltuXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuZm5bbl09bCxnLl9qUXVlcnlJbnRlcmZhY2V9LGcpLEFuPShwPVwiYnV0dG9uXCIsRT1cIi5cIisodj1cImJzLmJ1dHRvblwiKSx5PVwiLmRhdGEtYXBpXCIsVD0obT1lKS5mbltwXSxDPVwiYWN0aXZlXCIsST1cImJ0blwiLEQ9J1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGI9J1tkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0nLFM9XCJpbnB1dFwiLHc9XCIuYWN0aXZlXCIsTj1cIi5idG5cIixPPXtDTElDS19EQVRBX0FQSTpcImNsaWNrXCIrRSt5LEZPQ1VTX0JMVVJfREFUQV9BUEk6KEE9XCJmb2N1c1wiKStFK3krXCIgYmx1clwiK0UreX0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dGhpcy5fZWxlbWVudD10fXZhciB0PW4ucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9ITAsbj1tKHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoYilbMF07aWYobil7dmFyIGk9bSh0aGlzLl9lbGVtZW50KS5maW5kKFMpWzBdO2lmKGkpe2lmKFwicmFkaW9cIj09PWkudHlwZSlpZihpLmNoZWNrZWQmJm0odGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQykpdD0hMTtlbHNle3ZhciByPW0obikuZmluZCh3KVswXTtyJiZtKHIpLnJlbW92ZUNsYXNzKEMpfWlmKHQpe2lmKGkuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIil8fG4uaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIil8fGkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZGlzYWJsZWRcIil8fG4uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZGlzYWJsZWRcIikpcmV0dXJuO2kuY2hlY2tlZD0hbSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDKSxtKGkpLnRyaWdnZXIoXCJjaGFuZ2VcIil9aS5mb2N1cygpLGU9ITF9fWUmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1wcmVzc2VkXCIsIW0odGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQykpLHQmJm0odGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoQyl9LHQuZGlzcG9zZT1mdW5jdGlvbigpe20ucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHYpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sbi5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1tKHRoaXMpLmRhdGEodik7dHx8KHQ9bmV3IG4odGhpcyksbSh0aGlzKS5kYXRhKHYsdCkpLFwidG9nZ2xlXCI9PT1lJiZ0W2VdKCl9KX0sbyhuLG51bGwsW3trZXk6XCJWRVJTSU9OXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCI0LjEuMFwifX1dKSxufSgpLG0oZG9jdW1lbnQpLm9uKE8uQ0xJQ0tfREFUQV9BUEksRCxmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIGU9dC50YXJnZXQ7bShlKS5oYXNDbGFzcyhJKXx8KGU9bShlKS5jbG9zZXN0KE4pKSxrLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChtKGUpLFwidG9nZ2xlXCIpfSkub24oTy5GT0NVU19CTFVSX0RBVEFfQVBJLEQsZnVuY3Rpb24odCl7dmFyIGU9bSh0LnRhcmdldCkuY2xvc2VzdChOKVswXTttKGUpLnRvZ2dsZUNsYXNzKEEsL15mb2N1cyhpbik/JC8udGVzdCh0LnR5cGUpKX0pLG0uZm5bcF09ay5falF1ZXJ5SW50ZXJmYWNlLG0uZm5bcF0uQ29uc3RydWN0b3I9ayxtLmZuW3BdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbS5mbltwXT1ULGsuX2pRdWVyeUludGVyZmFjZX0sayksRG49KEw9XCJjYXJvdXNlbFwiLFI9XCIuXCIrKGo9XCJicy5jYXJvdXNlbFwiKSxIPVwiLmRhdGEtYXBpXCIsVz0oUD1lKS5mbltMXSxNPXtpbnRlcnZhbDo1ZTMsa2V5Ym9hcmQ6ITAsc2xpZGU6ITEscGF1c2U6XCJob3ZlclwiLHdyYXA6ITB9LHg9e2ludGVydmFsOlwiKG51bWJlcnxib29sZWFuKVwiLGtleWJvYXJkOlwiYm9vbGVhblwiLHNsaWRlOlwiKGJvb2xlYW58c3RyaW5nKVwiLHBhdXNlOlwiKHN0cmluZ3xib29sZWFuKVwiLHdyYXA6XCJib29sZWFuXCJ9LFU9XCJuZXh0XCIsSz1cInByZXZcIixGPVwibGVmdFwiLFY9XCJyaWdodFwiLFE9e1NMSURFOlwic2xpZGVcIitSLFNMSUQ6XCJzbGlkXCIrUixLRVlET1dOOlwia2V5ZG93blwiK1IsTU9VU0VFTlRFUjpcIm1vdXNlZW50ZXJcIitSLE1PVVNFTEVBVkU6XCJtb3VzZWxlYXZlXCIrUixUT1VDSEVORDpcInRvdWNoZW5kXCIrUixMT0FEX0RBVEFfQVBJOlwibG9hZFwiK1IrSCxDTElDS19EQVRBX0FQSTpcImNsaWNrXCIrUitIfSxCPVwiY2Fyb3VzZWxcIixZPVwiYWN0aXZlXCIsRz1cInNsaWRlXCIscT1cImNhcm91c2VsLWl0ZW0tcmlnaHRcIix6PVwiY2Fyb3VzZWwtaXRlbS1sZWZ0XCIsWD1cImNhcm91c2VsLWl0ZW0tbmV4dFwiLEo9XCJjYXJvdXNlbC1pdGVtLXByZXZcIixaPXtBQ1RJVkU6XCIuYWN0aXZlXCIsQUNUSVZFX0lURU06XCIuYWN0aXZlLmNhcm91c2VsLWl0ZW1cIixJVEVNOlwiLmNhcm91c2VsLWl0ZW1cIixORVhUX1BSRVY6XCIuY2Fyb3VzZWwtaXRlbS1uZXh0LCAuY2Fyb3VzZWwtaXRlbS1wcmV2XCIsSU5ESUNBVE9SUzpcIi5jYXJvdXNlbC1pbmRpY2F0b3JzXCIsREFUQV9TTElERTpcIltkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dXCIsREFUQV9SSURFOidbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nfSwkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuX2l0ZW1zPW51bGwsdGhpcy5faW50ZXJ2YWw9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5faXNTbGlkaW5nPSExLHRoaXMudG91Y2hUaW1lb3V0PW51bGwsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9lbGVtZW50PVAodClbMF0sdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQ9UCh0aGlzLl9lbGVtZW50KS5maW5kKFouSU5ESUNBVE9SUylbMF0sdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKX12YXIgdD1zLnByb3RvdHlwZTtyZXR1cm4gdC5uZXh0PWZ1bmN0aW9uKCl7dGhpcy5faXNTbGlkaW5nfHx0aGlzLl9zbGlkZShVKX0sdC5uZXh0V2hlblZpc2libGU9ZnVuY3Rpb24oKXshZG9jdW1lbnQuaGlkZGVuJiZQKHRoaXMuX2VsZW1lbnQpLmlzKFwiOnZpc2libGVcIikmJlwiaGlkZGVuXCIhPT1QKHRoaXMuX2VsZW1lbnQpLmNzcyhcInZpc2liaWxpdHlcIikmJnRoaXMubmV4dCgpfSx0LnByZXY9ZnVuY3Rpb24oKXt0aGlzLl9pc1NsaWRpbmd8fHRoaXMuX3NsaWRlKEspfSx0LnBhdXNlPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMCksUCh0aGlzLl9lbGVtZW50KS5maW5kKFouTkVYVF9QUkVWKVswXSYmKENuLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsfSx0LmN5Y2xlPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMSksdGhpcy5faW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwmJiF0aGlzLl9pc1BhdXNlZCYmKHRoaXMuX2ludGVydmFsPXNldEludGVydmFsKChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5uZXh0V2hlblZpc2libGU6dGhpcy5uZXh0KS5iaW5kKHRoaXMpLHRoaXMuX2NvbmZpZy5pbnRlcnZhbCkpfSx0LnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fYWN0aXZlRWxlbWVudD1QKHRoaXMuX2VsZW1lbnQpLmZpbmQoWi5BQ1RJVkVfSVRFTSlbMF07dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO2lmKCEodD50aGlzLl9pdGVtcy5sZW5ndGgtMXx8dDwwKSlpZih0aGlzLl9pc1NsaWRpbmcpUCh0aGlzLl9lbGVtZW50KS5vbmUoUS5TTElELGZ1bmN0aW9uKCl7cmV0dXJuIGUudG8odCl9KTtlbHNle2lmKG49PT10KXJldHVybiB0aGlzLnBhdXNlKCksdm9pZCB0aGlzLmN5Y2xlKCk7dmFyIGk9bjx0P1U6Szt0aGlzLl9zbGlkZShpLHRoaXMuX2l0ZW1zW3RdKX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe1AodGhpcy5fZWxlbWVudCkub2ZmKFIpLFAucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LGopLHRoaXMuX2l0ZW1zPW51bGwsdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2ludGVydmFsPW51bGwsdGhpcy5faXNQYXVzZWQ9bnVsbCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQ9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0PWgoe30sTSx0KSxDbi50eXBlQ2hlY2tDb25maWcoTCx0LHgpLHR9LHQuX2FkZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9jb25maWcua2V5Ym9hcmQmJlAodGhpcy5fZWxlbWVudCkub24oUS5LRVlET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9rZXlkb3duKHQpfSksXCJob3ZlclwiPT09dGhpcy5fY29uZmlnLnBhdXNlJiYoUCh0aGlzLl9lbGVtZW50KS5vbihRLk1PVVNFRU5URVIsZnVuY3Rpb24odCl7cmV0dXJuIGUucGF1c2UodCl9KS5vbihRLk1PVVNFTEVBVkUsZnVuY3Rpb24odCl7cmV0dXJuIGUuY3ljbGUodCl9KSxcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZQKHRoaXMuX2VsZW1lbnQpLm9uKFEuVE9VQ0hFTkQsZnVuY3Rpb24oKXtlLnBhdXNlKCksZS50b3VjaFRpbWVvdXQmJmNsZWFyVGltZW91dChlLnRvdWNoVGltZW91dCksZS50b3VjaFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbih0KXtyZXR1cm4gZS5jeWNsZSh0KX0sNTAwK2UuX2NvbmZpZy5pbnRlcnZhbCl9KSl9LHQuX2tleWRvd249ZnVuY3Rpb24odCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSkpc3dpdGNoKHQud2hpY2gpe2Nhc2UgMzc6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmV4dCgpfX0sdC5fZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pdGVtcz1QLm1ha2VBcnJheShQKHQpLnBhcmVudCgpLmZpbmQoWi5JVEVNKSksdGhpcy5faXRlbXMuaW5kZXhPZih0KX0sdC5fZ2V0SXRlbUJ5RGlyZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49dD09PVUsaT10PT09SyxyPXRoaXMuX2dldEl0ZW1JbmRleChlKSxzPXRoaXMuX2l0ZW1zLmxlbmd0aC0xO2lmKChpJiYwPT09cnx8biYmcj09PXMpJiYhdGhpcy5fY29uZmlnLndyYXApcmV0dXJuIGU7dmFyIG89KHIrKHQ9PT1LPy0xOjEpKSV0aGlzLl9pdGVtcy5sZW5ndGg7cmV0dXJuLTE9PT1vP3RoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aC0xXTp0aGlzLl9pdGVtc1tvXX0sdC5fdHJpZ2dlclNsaWRlRXZlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9nZXRJdGVtSW5kZXgodCksaT10aGlzLl9nZXRJdGVtSW5kZXgoUCh0aGlzLl9lbGVtZW50KS5maW5kKFouQUNUSVZFX0lURU0pWzBdKSxyPVAuRXZlbnQoUS5TTElERSx7cmVsYXRlZFRhcmdldDp0LGRpcmVjdGlvbjplLGZyb206aSx0bzpufSk7cmV0dXJuIFAodGhpcy5fZWxlbWVudCkudHJpZ2dlcihyKSxyfSx0Ll9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2luZGljYXRvcnNFbGVtZW50KXtQKHRoaXMuX2luZGljYXRvcnNFbGVtZW50KS5maW5kKFouQUNUSVZFKS5yZW1vdmVDbGFzcyhZKTt2YXIgZT10aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5jaGlsZHJlblt0aGlzLl9nZXRJdGVtSW5kZXgodCldO2UmJlAoZSkuYWRkQ2xhc3MoWSl9fSx0Ll9zbGlkZT1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixzPXRoaXMsbz1QKHRoaXMuX2VsZW1lbnQpLmZpbmQoWi5BQ1RJVkVfSVRFTSlbMF0sYT10aGlzLl9nZXRJdGVtSW5kZXgobyksbD1lfHxvJiZ0aGlzLl9nZXRJdGVtQnlEaXJlY3Rpb24odCxvKSxoPXRoaXMuX2dldEl0ZW1JbmRleChsKSxjPUJvb2xlYW4odGhpcy5faW50ZXJ2YWwpO2lmKHQ9PT1VPyhuPXosaT1YLHI9Rik6KG49cSxpPUoscj1WKSxsJiZQKGwpLmhhc0NsYXNzKFkpKXRoaXMuX2lzU2xpZGluZz0hMTtlbHNlIGlmKCF0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChsLHIpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZvJiZsKXt0aGlzLl9pc1NsaWRpbmc9ITAsYyYmdGhpcy5wYXVzZSgpLHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobCk7dmFyIHU9UC5FdmVudChRLlNMSUQse3JlbGF0ZWRUYXJnZXQ6bCxkaXJlY3Rpb246cixmcm9tOmEsdG86aH0pO2lmKFAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoRykpe1AobCkuYWRkQ2xhc3MoaSksQ24ucmVmbG93KGwpLFAobykuYWRkQ2xhc3MobiksUChsKS5hZGRDbGFzcyhuKTt2YXIgZj1Dbi5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChvKTtQKG8pLm9uZShDbi5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe1AobCkucmVtb3ZlQ2xhc3MobitcIiBcIitpKS5hZGRDbGFzcyhZKSxQKG8pLnJlbW92ZUNsYXNzKFkrXCIgXCIraStcIiBcIituKSxzLl9pc1NsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBQKHMuX2VsZW1lbnQpLnRyaWdnZXIodSl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZil9ZWxzZSBQKG8pLnJlbW92ZUNsYXNzKFkpLFAobCkuYWRkQ2xhc3MoWSksdGhpcy5faXNTbGlkaW5nPSExLFAodGhpcy5fZWxlbWVudCkudHJpZ2dlcih1KTtjJiZ0aGlzLmN5Y2xlKCl9fSxzLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PVAodGhpcykuZGF0YShqKSxlPWgoe30sTSxQKHRoaXMpLmRhdGEoKSk7XCJvYmplY3RcIj09dHlwZW9mIGkmJihlPWgoe30sZSxpKSk7dmFyIG49XCJzdHJpbmdcIj09dHlwZW9mIGk/aTplLnNsaWRlO2lmKHR8fCh0PW5ldyBzKHRoaXMsZSksUCh0aGlzKS5kYXRhKGosdCkpLFwibnVtYmVyXCI9PXR5cGVvZiBpKXQudG8oaSk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2Ygbil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRbbl0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkIFwiJytuKydcIicpO3Rbbl0oKX1lbHNlIGUuaW50ZXJ2YWwmJih0LnBhdXNlKCksdC5jeWNsZSgpKX0pfSxzLl9kYXRhQXBpQ2xpY2tIYW5kbGVyPWZ1bmN0aW9uKHQpe3ZhciBlPUNuLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7aWYoZSl7dmFyIG49UChlKVswXTtpZihuJiZQKG4pLmhhc0NsYXNzKEIpKXt2YXIgaT1oKHt9LFAobikuZGF0YSgpLFAodGhpcykuZGF0YSgpKSxyPXRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZS10b1wiKTtyJiYoaS5pbnRlcnZhbD0hMSkscy5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoUChuKSxpKSxyJiZQKG4pLmRhdGEoaikudG8ociksdC5wcmV2ZW50RGVmYXVsdCgpfX19LG8ocyxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC4xLjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE19fV0pLHN9KCksUChkb2N1bWVudCkub24oUS5DTElDS19EQVRBX0FQSSxaLkRBVEFfU0xJREUsJC5fZGF0YUFwaUNsaWNrSGFuZGxlciksUCh3aW5kb3cpLm9uKFEuTE9BRF9EQVRBX0FQSSxmdW5jdGlvbigpe1AoWi5EQVRBX1JJREUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1QKHRoaXMpOyQuX2pRdWVyeUludGVyZmFjZS5jYWxsKHQsdC5kYXRhKCkpfSl9KSxQLmZuW0xdPSQuX2pRdWVyeUludGVyZmFjZSxQLmZuW0xdLkNvbnN0cnVjdG9yPSQsUC5mbltMXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIFAuZm5bTF09VywkLl9qUXVlcnlJbnRlcmZhY2V9LCQpLGJuPShldD1cImNvbGxhcHNlXCIsaXQ9XCIuXCIrKG50PVwiYnMuY29sbGFwc2VcIikscnQ9KHR0PWUpLmZuW2V0XSxzdD17dG9nZ2xlOiEwLHBhcmVudDpcIlwifSxvdD17dG9nZ2xlOlwiYm9vbGVhblwiLHBhcmVudDpcIihzdHJpbmd8ZWxlbWVudClcIn0sYXQ9e1NIT1c6XCJzaG93XCIraXQsU0hPV046XCJzaG93blwiK2l0LEhJREU6XCJoaWRlXCIraXQsSElEREVOOlwiaGlkZGVuXCIraXQsQ0xJQ0tfREFUQV9BUEk6XCJjbGlja1wiK2l0K1wiLmRhdGEtYXBpXCJ9LGx0PVwic2hvd1wiLGh0PVwiY29sbGFwc2VcIixjdD1cImNvbGxhcHNpbmdcIix1dD1cImNvbGxhcHNlZFwiLGZ0PVwid2lkdGhcIixkdD1cImhlaWdodFwiLF90PXtBQ1RJVkVTOlwiLnNob3csIC5jb2xsYXBzaW5nXCIsREFUQV9UT0dHTEU6J1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJ30sZ3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHQsZSl7dGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX3RyaWdnZXJBcnJheT10dC5tYWtlQXJyYXkodHQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2hyZWY9XCIjJyt0LmlkKydcIl0sW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS10YXJnZXQ9XCIjJyt0LmlkKydcIl0nKSk7Zm9yKHZhciBuPXR0KF90LkRBVEFfVE9HR0xFKSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPW5baV0scz1Dbi5nZXRTZWxlY3RvckZyb21FbGVtZW50KHIpO251bGwhPT1zJiYwPHR0KHMpLmZpbHRlcih0KS5sZW5ndGgmJih0aGlzLl9zZWxlY3Rvcj1zLHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKHIpKX10aGlzLl9wYXJlbnQ9dGhpcy5fY29uZmlnLnBhcmVudD90aGlzLl9nZXRQYXJlbnQoKTpudWxsLHRoaXMuX2NvbmZpZy5wYXJlbnR8fHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl9lbGVtZW50LHRoaXMuX3RyaWdnZXJBcnJheSksdGhpcy5fY29uZmlnLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX12YXIgdD1hLnByb3RvdHlwZTtyZXR1cm4gdC50b2dnbGU9ZnVuY3Rpb24oKXt0dCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhsdCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9LHQuc2hvdz1mdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzO2lmKCF0aGlzLl9pc1RyYW5zaXRpb25pbmcmJiF0dCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhsdCkmJih0aGlzLl9wYXJlbnQmJjA9PT0odD10dC5tYWtlQXJyYXkodHQodGhpcy5fcGFyZW50KS5maW5kKF90LkFDVElWRVMpLmZpbHRlcignW2RhdGEtcGFyZW50PVwiJyt0aGlzLl9jb25maWcucGFyZW50KydcIl0nKSkpLmxlbmd0aCYmKHQ9bnVsbCksISh0JiYoZT10dCh0KS5ub3QodGhpcy5fc2VsZWN0b3IpLmRhdGEobnQpKSYmZS5faXNUcmFuc2l0aW9uaW5nKSkpe3ZhciBpPXR0LkV2ZW50KGF0LlNIT1cpO2lmKHR0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoaSksIWkuaXNEZWZhdWx0UHJldmVudGVkKCkpe3QmJihhLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCh0dCh0KS5ub3QodGhpcy5fc2VsZWN0b3IpLFwiaGlkZVwiKSxlfHx0dCh0KS5kYXRhKG50LG51bGwpKTt2YXIgcj10aGlzLl9nZXREaW1lbnNpb24oKTt0dCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhodCkuYWRkQ2xhc3MoY3QpLCh0aGlzLl9lbGVtZW50LnN0eWxlW3JdPTApPHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGgmJnR0KHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3ModXQpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLHRoaXMuc2V0VHJhbnNpdGlvbmluZyghMCk7dmFyIHM9XCJzY3JvbGxcIisoclswXS50b1VwcGVyQ2FzZSgpK3Iuc2xpY2UoMSkpLG89Q24uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7dHQodGhpcy5fZWxlbWVudCkub25lKENuLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKCl7dHQobi5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoY3QpLmFkZENsYXNzKGh0KS5hZGRDbGFzcyhsdCksbi5fZWxlbWVudC5zdHlsZVtyXT1cIlwiLG4uc2V0VHJhbnNpdGlvbmluZyghMSksdHQobi5fZWxlbWVudCkudHJpZ2dlcihhdC5TSE9XTil9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChvKSx0aGlzLl9lbGVtZW50LnN0eWxlW3JdPXRoaXMuX2VsZW1lbnRbc10rXCJweFwifX19LHQuaGlkZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX2lzVHJhbnNpdGlvbmluZyYmdHQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MobHQpKXt2YXIgZT10dC5FdmVudChhdC5ISURFKTtpZih0dCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGUpLCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgbj10aGlzLl9nZXREaW1lbnNpb24oKTtpZih0aGlzLl9lbGVtZW50LnN0eWxlW25dPXRoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbbl0rXCJweFwiLENuLnJlZmxvdyh0aGlzLl9lbGVtZW50KSx0dCh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcyhjdCkucmVtb3ZlQ2xhc3MoaHQpLnJlbW92ZUNsYXNzKGx0KSwwPHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGgpZm9yKHZhciBpPTA7aTx0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoO2krKyl7dmFyIHI9dGhpcy5fdHJpZ2dlckFycmF5W2ldLHM9Q24uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChyKTtpZihudWxsIT09cyl0dChzKS5oYXNDbGFzcyhsdCl8fHR0KHIpLmFkZENsYXNzKHV0KS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKX10aGlzLnNldFRyYW5zaXRpb25pbmcoITApO3RoaXMuX2VsZW1lbnQuc3R5bGVbbl09XCJcIjt2YXIgbz1Dbi5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTt0dCh0aGlzLl9lbGVtZW50KS5vbmUoQ24uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24oKXt0LnNldFRyYW5zaXRpb25pbmcoITEpLHR0KHQuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKGN0KS5hZGRDbGFzcyhodCkudHJpZ2dlcihhdC5ISURERU4pfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobyl9fX0sdC5zZXRUcmFuc2l0aW9uaW5nPWZ1bmN0aW9uKHQpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz10fSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0dC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsbnQpLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl90cmlnZ2VyQXJyYXk9bnVsbCx0aGlzLl9pc1RyYW5zaXRpb25pbmc9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybih0PWgoe30sc3QsdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxDbi50eXBlQ2hlY2tDb25maWcoZXQsdCxvdCksdH0sdC5fZ2V0RGltZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHR0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGZ0KT9mdDpkdH0sdC5fZ2V0UGFyZW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpcyx0PW51bGw7Q24uaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5wYXJlbnQpPyh0PXRoaXMuX2NvbmZpZy5wYXJlbnQsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMuX2NvbmZpZy5wYXJlbnQuanF1ZXJ5JiYodD10aGlzLl9jb25maWcucGFyZW50WzBdKSk6dD10dCh0aGlzLl9jb25maWcucGFyZW50KVswXTt2YXIgZT0nW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS1wYXJlbnQ9XCInK3RoaXMuX2NvbmZpZy5wYXJlbnQrJ1wiXSc7cmV0dXJuIHR0KHQpLmZpbmQoZSkuZWFjaChmdW5jdGlvbih0LGUpe24uX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhhLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlKSxbZV0pfSksdH0sdC5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKHQsZSl7aWYodCl7dmFyIG49dHQodCkuaGFzQ2xhc3MobHQpOzA8ZS5sZW5ndGgmJnR0KGUpLnRvZ2dsZUNsYXNzKHV0LCFuKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLG4pfX0sYS5fZ2V0VGFyZ2V0RnJvbUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9Q24uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1cm4gZT90dChlKVswXTpudWxsfSxhLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXR0KHRoaXMpLGU9dC5kYXRhKG50KSxuPWgoe30sc3QsdC5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGkmJmkpO2lmKCFlJiZuLnRvZ2dsZSYmL3Nob3d8aGlkZS8udGVzdChpKSYmKG4udG9nZ2xlPSExKSxlfHwoZT1uZXcgYSh0aGlzLG4pLHQuZGF0YShudCxlKSksXCJzdHJpbmdcIj09dHlwZW9mIGkpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlW2ldKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCBcIicraSsnXCInKTtlW2ldKCl9fSl9LG8oYSxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC4xLjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN0fX1dKSxhfSgpLHR0KGRvY3VtZW50KS5vbihhdC5DTElDS19EQVRBX0FQSSxfdC5EQVRBX1RPR0dMRSxmdW5jdGlvbih0KXtcIkFcIj09PXQuY3VycmVudFRhcmdldC50YWdOYW1lJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dHQodGhpcyksZT1Dbi5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpO3R0KGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10dCh0aGlzKSxlPXQuZGF0YShudCk/XCJ0b2dnbGVcIjpuLmRhdGEoKTtndC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodCxlKX0pfSksdHQuZm5bZXRdPWd0Ll9qUXVlcnlJbnRlcmZhY2UsdHQuZm5bZXRdLkNvbnN0cnVjdG9yPWd0LHR0LmZuW2V0XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHR0LmZuW2V0XT1ydCxndC5falF1ZXJ5SW50ZXJmYWNlfSxndCksU249KHB0PVwiZHJvcGRvd25cIixFdD1cIi5cIisodnQ9XCJicy5kcm9wZG93blwiKSx5dD1cIi5kYXRhLWFwaVwiLFR0PShtdD1lKS5mbltwdF0sQ3Q9bmV3IFJlZ0V4cChcIjM4fDQwfDI3XCIpLEl0PXtISURFOlwiaGlkZVwiK0V0LEhJRERFTjpcImhpZGRlblwiK0V0LFNIT1c6XCJzaG93XCIrRXQsU0hPV046XCJzaG93blwiK0V0LENMSUNLOlwiY2xpY2tcIitFdCxDTElDS19EQVRBX0FQSTpcImNsaWNrXCIrRXQreXQsS0VZRE9XTl9EQVRBX0FQSTpcImtleWRvd25cIitFdCt5dCxLRVlVUF9EQVRBX0FQSTpcImtleXVwXCIrRXQreXR9LEF0PVwiZGlzYWJsZWRcIixEdD1cInNob3dcIixidD1cImRyb3B1cFwiLFN0PVwiZHJvcHJpZ2h0XCIsd3Q9XCJkcm9wbGVmdFwiLE50PVwiZHJvcGRvd24tbWVudS1yaWdodFwiLE90PVwicG9zaXRpb24tc3RhdGljXCIsa3Q9J1tkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJdJyxQdD1cIi5kcm9wZG93biBmb3JtXCIsTHQ9XCIuZHJvcGRvd24tbWVudVwiLGp0PVwiLm5hdmJhci1uYXZcIixSdD1cIi5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpXCIsSHQ9XCJ0b3Atc3RhcnRcIixXdD1cInRvcC1lbmRcIixNdD1cImJvdHRvbS1zdGFydFwiLHh0PVwiYm90dG9tLWVuZFwiLFV0PVwicmlnaHQtc3RhcnRcIixLdD1cImxlZnQtc3RhcnRcIixGdD17b2Zmc2V0OjAsZmxpcDohMCxib3VuZGFyeTpcInNjcm9sbFBhcmVudFwiLHJlZmVyZW5jZTpcInRvZ2dsZVwiLGRpc3BsYXk6XCJkeW5hbWljXCJ9LFZ0PXtvZmZzZXQ6XCIobnVtYmVyfHN0cmluZ3xmdW5jdGlvbilcIixmbGlwOlwiYm9vbGVhblwiLGJvdW5kYXJ5OlwiKHN0cmluZ3xlbGVtZW50KVwiLHJlZmVyZW5jZTpcIihzdHJpbmd8ZWxlbWVudClcIixkaXNwbGF5Olwic3RyaW5nXCJ9LFF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9wb3BwZXI9bnVsbCx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX21lbnU9dGhpcy5fZ2V0TWVudUVsZW1lbnQoKSx0aGlzLl9pbk5hdmJhcj10aGlzLl9kZXRlY3ROYXZiYXIoKSx0aGlzLl9hZGRFdmVudExpc3RlbmVycygpfXZhciB0PWwucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9lbGVtZW50LmRpc2FibGVkJiYhbXQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQXQpKXt2YXIgdD1sLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KSxlPW10KHRoaXMuX21lbnUpLmhhc0NsYXNzKER0KTtpZihsLl9jbGVhck1lbnVzKCksIWUpe3ZhciBuPXtyZWxhdGVkVGFyZ2V0OnRoaXMuX2VsZW1lbnR9LGk9bXQuRXZlbnQoSXQuU0hPVyxuKTtpZihtdCh0KS50cmlnZ2VyKGkpLCFpLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZighdGhpcy5faW5OYXZiYXIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCb290c3RyYXAgZHJvcGRvd24gcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZylcIik7dmFyIHI9dGhpcy5fZWxlbWVudDtcInBhcmVudFwiPT09dGhpcy5fY29uZmlnLnJlZmVyZW5jZT9yPXQ6Q24uaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpJiYocj10aGlzLl9jb25maWcucmVmZXJlbmNlLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlLmpxdWVyeSYmKHI9dGhpcy5fY29uZmlnLnJlZmVyZW5jZVswXSkpLFwic2Nyb2xsUGFyZW50XCIhPT10aGlzLl9jb25maWcuYm91bmRhcnkmJm10KHQpLmFkZENsYXNzKE90KSx0aGlzLl9wb3BwZXI9bmV3IGMocix0aGlzLl9tZW51LHRoaXMuX2dldFBvcHBlckNvbmZpZygpKX1cIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYwPT09bXQodCkuY2xvc2VzdChqdCkubGVuZ3RoJiZtdChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKFwibW91c2VvdmVyXCIsbnVsbCxtdC5ub29wKSx0aGlzLl9lbGVtZW50LmZvY3VzKCksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsITApLG10KHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKER0KSxtdCh0KS50b2dnbGVDbGFzcyhEdCkudHJpZ2dlcihtdC5FdmVudChJdC5TSE9XTixuKSl9fX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe210LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCx2dCksbXQodGhpcy5fZWxlbWVudCkub2ZmKEV0KSx0aGlzLl9lbGVtZW50PW51bGwsKHRoaXMuX21lbnU9bnVsbCkhPT10aGlzLl9wb3BwZXImJih0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsKX0sdC51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9pbk5hdmJhcj10aGlzLl9kZXRlY3ROYXZiYXIoKSxudWxsIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKX0sdC5fYWRkRXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO210KHRoaXMuX2VsZW1lbnQpLm9uKEl0LkNMSUNLLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGUudG9nZ2xlKCl9KX0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0PWgoe30sdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LG10KHRoaXMuX2VsZW1lbnQpLmRhdGEoKSx0KSxDbi50eXBlQ2hlY2tDb25maWcocHQsdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSx0fSx0Ll9nZXRNZW51RWxlbWVudD1mdW5jdGlvbigpe2lmKCF0aGlzLl9tZW51KXt2YXIgdD1sLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTt0aGlzLl9tZW51PW10KHQpLmZpbmQoTHQpWzBdfXJldHVybiB0aGlzLl9tZW51fSx0Ll9nZXRQbGFjZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD1tdCh0aGlzLl9lbGVtZW50KS5wYXJlbnQoKSxlPU10O3JldHVybiB0Lmhhc0NsYXNzKGJ0KT8oZT1IdCxtdCh0aGlzLl9tZW51KS5oYXNDbGFzcyhOdCkmJihlPVd0KSk6dC5oYXNDbGFzcyhTdCk/ZT1VdDp0Lmhhc0NsYXNzKHd0KT9lPUt0Om10KHRoaXMuX21lbnUpLmhhc0NsYXNzKE50KSYmKGU9eHQpLGV9LHQuX2RldGVjdE5hdmJhcj1mdW5jdGlvbigpe3JldHVybiAwPG10KHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoXCIubmF2YmFyXCIpLmxlbmd0aH0sdC5fZ2V0UG9wcGVyQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXt9O1wiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuX2NvbmZpZy5vZmZzZXQ/dC5mbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRzPWgoe30sdC5vZmZzZXRzLGUuX2NvbmZpZy5vZmZzZXQodC5vZmZzZXRzKXx8e30pLHR9OnQub2Zmc2V0PXRoaXMuX2NvbmZpZy5vZmZzZXQ7dmFyIG49e3BsYWNlbWVudDp0aGlzLl9nZXRQbGFjZW1lbnQoKSxtb2RpZmllcnM6e29mZnNldDp0LGZsaXA6e2VuYWJsZWQ6dGhpcy5fY29uZmlnLmZsaXB9LHByZXZlbnRPdmVyZmxvdzp7Ym91bmRhcmllc0VsZW1lbnQ6dGhpcy5fY29uZmlnLmJvdW5kYXJ5fX19O3JldHVyblwic3RhdGljXCI9PT10aGlzLl9jb25maWcuZGlzcGxheSYmKG4ubW9kaWZpZXJzLmFwcGx5U3R5bGU9e2VuYWJsZWQ6ITF9KSxufSxsLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PW10KHRoaXMpLmRhdGEodnQpO2lmKHR8fCh0PW5ldyBsKHRoaXMsXCJvYmplY3RcIj09dHlwZW9mIGU/ZTpudWxsKSxtdCh0aGlzKS5kYXRhKHZ0LHQpKSxcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRbZV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkIFwiJytlKydcIicpO3RbZV0oKX19KX0sbC5fY2xlYXJNZW51cz1mdW5jdGlvbih0KXtpZighdHx8MyE9PXQud2hpY2gmJihcImtleXVwXCIhPT10LnR5cGV8fDk9PT10LndoaWNoKSlmb3IodmFyIGU9bXQubWFrZUFycmF5KG10KGt0KSksbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1sLl9nZXRQYXJlbnRGcm9tRWxlbWVudChlW25dKSxyPW10KGVbbl0pLmRhdGEodnQpLHM9e3JlbGF0ZWRUYXJnZXQ6ZVtuXX07aWYocil7dmFyIG89ci5fbWVudTtpZihtdChpKS5oYXNDbGFzcyhEdCkmJiEodCYmKFwiY2xpY2tcIj09PXQudHlwZSYmL2lucHV0fHRleHRhcmVhL2kudGVzdCh0LnRhcmdldC50YWdOYW1lKXx8XCJrZXl1cFwiPT09dC50eXBlJiY5PT09dC53aGljaCkmJm10LmNvbnRhaW5zKGksdC50YXJnZXQpKSl7dmFyIGE9bXQuRXZlbnQoSXQuSElERSxzKTttdChpKS50cmlnZ2VyKGEpLGEuaXNEZWZhdWx0UHJldmVudGVkKCl8fChcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZtdChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZihcIm1vdXNlb3ZlclwiLG51bGwsbXQubm9vcCksZVtuXS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKSxtdChvKS5yZW1vdmVDbGFzcyhEdCksbXQoaSkucmVtb3ZlQ2xhc3MoRHQpLnRyaWdnZXIobXQuRXZlbnQoSXQuSElEREVOLHMpKSl9fX19LGwuX2dldFBhcmVudEZyb21FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlLG49Q24uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1cm4gbiYmKGU9bXQobilbMF0pLGV8fHQucGFyZW50Tm9kZX0sbC5fZGF0YUFwaUtleWRvd25IYW5kbGVyPWZ1bmN0aW9uKHQpe2lmKCgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KHQudGFyZ2V0LnRhZ05hbWUpPyEoMzI9PT10LndoaWNofHwyNyE9PXQud2hpY2gmJig0MCE9PXQud2hpY2gmJjM4IT09dC53aGljaHx8bXQodC50YXJnZXQpLmNsb3Nlc3QoTHQpLmxlbmd0aCkpOkN0LnRlc3QodC53aGljaCkpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksIXRoaXMuZGlzYWJsZWQmJiFtdCh0aGlzKS5oYXNDbGFzcyhBdCkpKXt2YXIgZT1sLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKSxuPW10KGUpLmhhc0NsYXNzKER0KTtpZigobnx8Mjc9PT10LndoaWNoJiYzMj09PXQud2hpY2gpJiYoIW58fDI3IT09dC53aGljaCYmMzIhPT10LndoaWNoKSl7dmFyIGk9bXQoZSkuZmluZChSdCkuZ2V0KCk7aWYoMCE9PWkubGVuZ3RoKXt2YXIgcj1pLmluZGV4T2YodC50YXJnZXQpOzM4PT09dC53aGljaCYmMDxyJiZyLS0sNDA9PT10LndoaWNoJiZyPGkubGVuZ3RoLTEmJnIrKyxyPDAmJihyPTApLGlbcl0uZm9jdXMoKX19ZWxzZXtpZigyNz09PXQud2hpY2gpe3ZhciBzPW10KGUpLmZpbmQoa3QpWzBdO210KHMpLnRyaWdnZXIoXCJmb2N1c1wiKX1tdCh0aGlzKS50cmlnZ2VyKFwiY2xpY2tcIil9fX0sbyhsLG51bGwsW3trZXk6XCJWRVJTSU9OXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCI0LjEuMFwifX0se2tleTpcIkRlZmF1bHRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRnR9fSx7a2V5OlwiRGVmYXVsdFR5cGVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVnR9fV0pLGx9KCksbXQoZG9jdW1lbnQpLm9uKEl0LktFWURPV05fREFUQV9BUEksa3QsUXQuX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oSXQuS0VZRE9XTl9EQVRBX0FQSSxMdCxRdC5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihJdC5DTElDS19EQVRBX0FQSStcIiBcIitJdC5LRVlVUF9EQVRBX0FQSSxRdC5fY2xlYXJNZW51cykub24oSXQuQ0xJQ0tfREFUQV9BUEksa3QsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksUXQuX2pRdWVyeUludGVyZmFjZS5jYWxsKG10KHRoaXMpLFwidG9nZ2xlXCIpfSkub24oSXQuQ0xJQ0tfREFUQV9BUEksUHQsZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0pLG10LmZuW3B0XT1RdC5falF1ZXJ5SW50ZXJmYWNlLG10LmZuW3B0XS5Db25zdHJ1Y3Rvcj1RdCxtdC5mbltwdF0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBtdC5mbltwdF09VHQsUXQuX2pRdWVyeUludGVyZmFjZX0sUXQpLHduPShZdD1cIm1vZGFsXCIscXQ9XCIuXCIrKEd0PVwiYnMubW9kYWxcIiksenQ9KEJ0PWUpLmZuW1l0XSxYdD17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsZm9jdXM6ITAsc2hvdzohMH0sSnQ9e2JhY2tkcm9wOlwiKGJvb2xlYW58c3RyaW5nKVwiLGtleWJvYXJkOlwiYm9vbGVhblwiLGZvY3VzOlwiYm9vbGVhblwiLHNob3c6XCJib29sZWFuXCJ9LFp0PXtISURFOlwiaGlkZVwiK3F0LEhJRERFTjpcImhpZGRlblwiK3F0LFNIT1c6XCJzaG93XCIrcXQsU0hPV046XCJzaG93blwiK3F0LEZPQ1VTSU46XCJmb2N1c2luXCIrcXQsUkVTSVpFOlwicmVzaXplXCIrcXQsQ0xJQ0tfRElTTUlTUzpcImNsaWNrLmRpc21pc3NcIitxdCxLRVlET1dOX0RJU01JU1M6XCJrZXlkb3duLmRpc21pc3NcIitxdCxNT1VTRVVQX0RJU01JU1M6XCJtb3VzZXVwLmRpc21pc3NcIitxdCxNT1VTRURPV05fRElTTUlTUzpcIm1vdXNlZG93bi5kaXNtaXNzXCIrcXQsQ0xJQ0tfREFUQV9BUEk6XCJjbGlja1wiK3F0K1wiLmRhdGEtYXBpXCJ9LCR0PVwibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmVcIix0ZT1cIm1vZGFsLWJhY2tkcm9wXCIsZWU9XCJtb2RhbC1vcGVuXCIsbmU9XCJmYWRlXCIsaWU9XCJzaG93XCIscmU9e0RJQUxPRzpcIi5tb2RhbC1kaWFsb2dcIixEQVRBX1RPR0dMRTonW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLERBVEFfRElTTUlTUzonW2RhdGEtZGlzbWlzcz1cIm1vZGFsXCJdJyxGSVhFRF9DT05URU5UOlwiLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcFwiLFNUSUNLWV9DT05URU5UOlwiLnN0aWNreS10b3BcIixOQVZCQVJfVE9HR0xFUjpcIi5uYXZiYXItdG9nZ2xlclwifSxzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxlKXt0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9kaWFsb2c9QnQodCkuZmluZChyZS5ESUFMT0cpWzBdLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj0hMSx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz0hMSx0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMuX3Njcm9sbGJhcldpZHRoPTB9dmFyIHQ9ci5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1Nob3duP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyh0KX0sdC5zaG93PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuX2lzVHJhbnNpdGlvbmluZyYmIXRoaXMuX2lzU2hvd24pe0J0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG5lKSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCk7dmFyIG49QnQuRXZlbnQoWnQuU0hPVyx7cmVsYXRlZFRhcmdldDp0fSk7QnQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuKSx0aGlzLl9pc1Nob3dufHxuLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5faXNTaG93bj0hMCx0aGlzLl9jaGVja1Njcm9sbGJhcigpLHRoaXMuX3NldFNjcm9sbGJhcigpLHRoaXMuX2FkanVzdERpYWxvZygpLEJ0KGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKGVlKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCksQnQodGhpcy5fZWxlbWVudCkub24oWnQuQ0xJQ0tfRElTTUlTUyxyZS5EQVRBX0RJU01JU1MsZnVuY3Rpb24odCl7cmV0dXJuIGUuaGlkZSh0KX0pLEJ0KHRoaXMuX2RpYWxvZykub24oWnQuTU9VU0VET1dOX0RJU01JU1MsZnVuY3Rpb24oKXtCdChlLl9lbGVtZW50KS5vbmUoWnQuTU9VU0VVUF9ESVNNSVNTLGZ1bmN0aW9uKHQpe0J0KHQudGFyZ2V0KS5pcyhlLl9lbGVtZW50KSYmKGUuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITApfSl9KSx0aGlzLl9zaG93QmFja2Ryb3AoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2hvd0VsZW1lbnQodCl9KSl9fSx0LmhpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0JiZ0LnByZXZlbnREZWZhdWx0KCksIXRoaXMuX2lzVHJhbnNpdGlvbmluZyYmdGhpcy5faXNTaG93bil7dmFyIG49QnQuRXZlbnQoWnQuSElERSk7aWYoQnQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuKSx0aGlzLl9pc1Nob3duJiYhbi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dGhpcy5faXNTaG93bj0hMTt2YXIgaT1CdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhuZSk7aWYoaSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCksdGhpcy5fc2V0RXNjYXBlRXZlbnQoKSx0aGlzLl9zZXRSZXNpemVFdmVudCgpLEJ0KGRvY3VtZW50KS5vZmYoWnQuRk9DVVNJTiksQnQodGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoaWUpLEJ0KHRoaXMuX2VsZW1lbnQpLm9mZihadC5DTElDS19ESVNNSVNTKSxCdCh0aGlzLl9kaWFsb2cpLm9mZihadC5NT1VTRURPV05fRElTTUlTUyksaSl7dmFyIHI9Q24uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7QnQodGhpcy5fZWxlbWVudCkub25lKENuLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKHQpe3JldHVybiBlLl9oaWRlTW9kYWwodCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChyKX1lbHNlIHRoaXMuX2hpZGVNb2RhbCgpfX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe0J0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxHdCksQnQod2luZG93LGRvY3VtZW50LHRoaXMuX2VsZW1lbnQsdGhpcy5fYmFja2Ryb3ApLm9mZihxdCksdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2RpYWxvZz1udWxsLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj1udWxsLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nPW51bGwsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz1udWxsLHRoaXMuX3Njcm9sbGJhcldpZHRoPW51bGx9LHQuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0RGlhbG9nKCl9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1oKHt9LFh0LHQpLENuLnR5cGVDaGVja0NvbmZpZyhZdCx0LEp0KSx0fSx0Ll9zaG93RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49QnQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MobmUpO3RoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV8fGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIix0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpLHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wPTAsbiYmQ24ucmVmbG93KHRoaXMuX2VsZW1lbnQpLEJ0KHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKGllKSx0aGlzLl9jb25maWcuZm9jdXMmJnRoaXMuX2VuZm9yY2VGb2N1cygpO3ZhciBpPUJ0LkV2ZW50KFp0LlNIT1dOLHtyZWxhdGVkVGFyZ2V0OnR9KSxyPWZ1bmN0aW9uKCl7ZS5fY29uZmlnLmZvY3VzJiZlLl9lbGVtZW50LmZvY3VzKCksZS5faXNUcmFuc2l0aW9uaW5nPSExLEJ0KGUuX2VsZW1lbnQpLnRyaWdnZXIoaSl9O2lmKG4pe3ZhciBzPUNuLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO0J0KHRoaXMuX2RpYWxvZykub25lKENuLlRSQU5TSVRJT05fRU5ELHIpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHMpfWVsc2UgcigpfSx0Ll9lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO0J0KGRvY3VtZW50KS5vZmYoWnQuRk9DVVNJTikub24oWnQuRk9DVVNJTixmdW5jdGlvbih0KXtkb2N1bWVudCE9PXQudGFyZ2V0JiZlLl9lbGVtZW50IT09dC50YXJnZXQmJjA9PT1CdChlLl9lbGVtZW50KS5oYXModC50YXJnZXQpLmxlbmd0aCYmZS5fZWxlbWVudC5mb2N1cygpfSl9LHQuX3NldEVzY2FwZUV2ZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9pc1Nob3duJiZ0aGlzLl9jb25maWcua2V5Ym9hcmQ/QnQodGhpcy5fZWxlbWVudCkub24oWnQuS0VZRE9XTl9ESVNNSVNTLGZ1bmN0aW9uKHQpezI3PT09dC53aGljaCYmKHQucHJldmVudERlZmF1bHQoKSxlLmhpZGUoKSl9KTp0aGlzLl9pc1Nob3dufHxCdCh0aGlzLl9lbGVtZW50KS5vZmYoWnQuS0VZRE9XTl9ESVNNSVNTKX0sdC5fc2V0UmVzaXplRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2lzU2hvd24/QnQod2luZG93KS5vbihadC5SRVNJWkUsZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFuZGxlVXBkYXRlKHQpfSk6QnQod2luZG93KS5vZmYoWnQuUkVTSVpFKX0sdC5faGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCEwKSx0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITEsdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uKCl7QnQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoZWUpLHQuX3Jlc2V0QWRqdXN0bWVudHMoKSx0Ll9yZXNldFNjcm9sbGJhcigpLEJ0KHQuX2VsZW1lbnQpLnRyaWdnZXIoWnQuSElEREVOKX0pfSx0Ll9yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuX2JhY2tkcm9wJiYoQnQodGhpcy5fYmFja2Ryb3ApLnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wPW51bGwpfSx0Ll9zaG93QmFja2Ryb3A9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPUJ0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG5lKT9uZTpcIlwiO2lmKHRoaXMuX2lzU2hvd24mJnRoaXMuX2NvbmZpZy5iYWNrZHJvcCl7aWYodGhpcy5fYmFja2Ryb3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl9iYWNrZHJvcC5jbGFzc05hbWU9dGUsbiYmQnQodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKG4pLEJ0KHRoaXMuX2JhY2tkcm9wKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSxCdCh0aGlzLl9lbGVtZW50KS5vbihadC5DTElDS19ESVNNSVNTLGZ1bmN0aW9uKHQpe2UuX2lnbm9yZUJhY2tkcm9wQ2xpY2s/ZS5faWdub3JlQmFja2Ryb3BDbGljaz0hMTp0LnRhcmdldD09PXQuY3VycmVudFRhcmdldCYmKFwic3RhdGljXCI9PT1lLl9jb25maWcuYmFja2Ryb3A/ZS5fZWxlbWVudC5mb2N1cygpOmUuaGlkZSgpKX0pLG4mJkNuLnJlZmxvdyh0aGlzLl9iYWNrZHJvcCksQnQodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKGllKSwhdClyZXR1cm47aWYoIW4pcmV0dXJuIHZvaWQgdCgpO3ZhciBpPUNuLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtCdCh0aGlzLl9iYWNrZHJvcCkub25lKENuLlRSQU5TSVRJT05fRU5ELHQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkpfWVsc2UgaWYoIXRoaXMuX2lzU2hvd24mJnRoaXMuX2JhY2tkcm9wKXtCdCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlQ2xhc3MoaWUpO3ZhciByPWZ1bmN0aW9uKCl7ZS5fcmVtb3ZlQmFja2Ryb3AoKSx0JiZ0KCl9O2lmKEJ0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG5lKSl7dmFyIHM9Q24uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO0J0KHRoaXMuX2JhY2tkcm9wKS5vbmUoQ24uVFJBTlNJVElPTl9FTkQscikuZW11bGF0ZVRyYW5zaXRpb25FbmQocyl9ZWxzZSByKCl9ZWxzZSB0JiZ0KCl9LHQuX2FkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7IXRoaXMuX2lzQm9keU92ZXJmbG93aW5nJiZ0JiYodGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdD10aGlzLl9zY3JvbGxiYXJXaWR0aCtcInB4XCIpLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nJiYhdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0PXRoaXMuX3Njcm9sbGJhcldpZHRoK1wicHhcIil9LHQuX3Jlc2V0QWRqdXN0bWVudHM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0PVwiXCIsdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ9XCJcIn0sdC5fY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lzQm9keU92ZXJmbG93aW5nPXQubGVmdCt0LnJpZ2h0PHdpbmRvdy5pbm5lcldpZHRoLHRoaXMuX3Njcm9sbGJhcldpZHRoPXRoaXMuX2dldFNjcm9sbGJhcldpZHRoKCl9LHQuX3NldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcpe0J0KHJlLkZJWEVEX0NPTlRFTlQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1CdChlKVswXS5zdHlsZS5wYWRkaW5nUmlnaHQsaT1CdChlKS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIpO0J0KGUpLmRhdGEoXCJwYWRkaW5nLXJpZ2h0XCIsbikuY3NzKFwicGFkZGluZy1yaWdodFwiLHBhcnNlRmxvYXQoaSkrci5fc2Nyb2xsYmFyV2lkdGgrXCJweFwiKX0pLEJ0KHJlLlNUSUNLWV9DT05URU5UKS5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49QnQoZSlbMF0uc3R5bGUubWFyZ2luUmlnaHQsaT1CdChlKS5jc3MoXCJtYXJnaW4tcmlnaHRcIik7QnQoZSkuZGF0YShcIm1hcmdpbi1yaWdodFwiLG4pLmNzcyhcIm1hcmdpbi1yaWdodFwiLHBhcnNlRmxvYXQoaSktci5fc2Nyb2xsYmFyV2lkdGgrXCJweFwiKX0pLEJ0KHJlLk5BVkJBUl9UT0dHTEVSKS5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49QnQoZSlbMF0uc3R5bGUubWFyZ2luUmlnaHQsaT1CdChlKS5jc3MoXCJtYXJnaW4tcmlnaHRcIik7QnQoZSkuZGF0YShcIm1hcmdpbi1yaWdodFwiLG4pLmNzcyhcIm1hcmdpbi1yaWdodFwiLHBhcnNlRmxvYXQoaSkrci5fc2Nyb2xsYmFyV2lkdGgrXCJweFwiKX0pO3ZhciB0PWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LGU9QnQoZG9jdW1lbnQuYm9keSkuY3NzKFwicGFkZGluZy1yaWdodFwiKTtCdChkb2N1bWVudC5ib2R5KS5kYXRhKFwicGFkZGluZy1yaWdodFwiLHQpLmNzcyhcInBhZGRpbmctcmlnaHRcIixwYXJzZUZsb2F0KGUpK3RoaXMuX3Njcm9sbGJhcldpZHRoK1wicHhcIil9fSx0Ll9yZXNldFNjcm9sbGJhcj1mdW5jdGlvbigpe0J0KHJlLkZJWEVEX0NPTlRFTlQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1CdChlKS5kYXRhKFwicGFkZGluZy1yaWdodFwiKTtcInVuZGVmaW5lZFwiIT10eXBlb2YgbiYmQnQoZSkuY3NzKFwicGFkZGluZy1yaWdodFwiLG4pLnJlbW92ZURhdGEoXCJwYWRkaW5nLXJpZ2h0XCIpfSksQnQocmUuU1RJQ0tZX0NPTlRFTlQrXCIsIFwiK3JlLk5BVkJBUl9UT0dHTEVSKS5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49QnQoZSkuZGF0YShcIm1hcmdpbi1yaWdodFwiKTtcInVuZGVmaW5lZFwiIT10eXBlb2YgbiYmQnQoZSkuY3NzKFwibWFyZ2luLXJpZ2h0XCIsbikucmVtb3ZlRGF0YShcIm1hcmdpbi1yaWdodFwiKX0pO3ZhciB0PUJ0KGRvY3VtZW50LmJvZHkpLmRhdGEoXCJwYWRkaW5nLXJpZ2h0XCIpO1widW5kZWZpbmVkXCIhPXR5cGVvZiB0JiZCdChkb2N1bWVudC5ib2R5KS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsdCkucmVtb3ZlRGF0YShcInBhZGRpbmctcmlnaHRcIil9LHQuX2dldFNjcm9sbGJhcldpZHRoPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmNsYXNzTmFtZT0kdCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgtdC5jbGllbnRXaWR0aDtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxlfSxyLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9QnQodGhpcykuZGF0YShHdCksZT1oKHt9LHIuRGVmYXVsdCxCdCh0aGlzKS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIG4mJm4pO2lmKHR8fCh0PW5ldyByKHRoaXMsZSksQnQodGhpcykuZGF0YShHdCx0KSksXCJzdHJpbmdcIj09dHlwZW9mIG4pe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCBcIicrbisnXCInKTt0W25dKGkpfWVsc2UgZS5zaG93JiZ0LnNob3coaSl9KX0sbyhyLG51bGwsW3trZXk6XCJWRVJTSU9OXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCI0LjEuMFwifX0se2tleTpcIkRlZmF1bHRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHR9fV0pLHJ9KCksQnQoZG9jdW1lbnQpLm9uKFp0LkNMSUNLX0RBVEFfQVBJLHJlLkRBVEFfVE9HR0xFLGZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPUNuLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7aSYmKGU9QnQoaSlbMF0pO3ZhciByPUJ0KGUpLmRhdGEoR3QpP1widG9nZ2xlXCI6aCh7fSxCdChlKS5kYXRhKCksQnQodGhpcykuZGF0YSgpKTtcIkFcIiE9PXRoaXMudGFnTmFtZSYmXCJBUkVBXCIhPT10aGlzLnRhZ05hbWV8fHQucHJldmVudERlZmF1bHQoKTt2YXIgcz1CdChlKS5vbmUoWnQuU0hPVyxmdW5jdGlvbih0KXt0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxzLm9uZShadC5ISURERU4sZnVuY3Rpb24oKXtCdChuKS5pcyhcIjp2aXNpYmxlXCIpJiZuLmZvY3VzKCl9KX0pO3NlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChCdChlKSxyLHRoaXMpfSksQnQuZm5bWXRdPXNlLl9qUXVlcnlJbnRlcmZhY2UsQnQuZm5bWXRdLkNvbnN0cnVjdG9yPXNlLEJ0LmZuW1l0XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIEJ0LmZuW1l0XT16dCxzZS5falF1ZXJ5SW50ZXJmYWNlfSxzZSksTm49KGFlPVwidG9vbHRpcFwiLGhlPVwiLlwiKyhsZT1cImJzLnRvb2x0aXBcIiksY2U9KG9lPWUpLmZuW2FlXSx1ZT1cImJzLXRvb2x0aXBcIixmZT1uZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIrdWUrXCJcXFxcUytcIixcImdcIiksZ2U9e2FuaW1hdGlvbjohMCx0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOlwiaG92ZXIgZm9jdXNcIix0aXRsZTpcIlwiLGRlbGF5OjAsaHRtbDohKF9lPXtBVVRPOlwiYXV0b1wiLFRPUDpcInRvcFwiLFJJR0hUOlwicmlnaHRcIixCT1RUT006XCJib3R0b21cIixMRUZUOlwibGVmdFwifSksc2VsZWN0b3I6IShkZT17YW5pbWF0aW9uOlwiYm9vbGVhblwiLHRlbXBsYXRlOlwic3RyaW5nXCIsdGl0bGU6XCIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pXCIsdHJpZ2dlcjpcInN0cmluZ1wiLGRlbGF5OlwiKG51bWJlcnxvYmplY3QpXCIsaHRtbDpcImJvb2xlYW5cIixzZWxlY3RvcjpcIihzdHJpbmd8Ym9vbGVhbilcIixwbGFjZW1lbnQ6XCIoc3RyaW5nfGZ1bmN0aW9uKVwiLG9mZnNldDpcIihudW1iZXJ8c3RyaW5nKVwiLGNvbnRhaW5lcjpcIihzdHJpbmd8ZWxlbWVudHxib29sZWFuKVwiLGZhbGxiYWNrUGxhY2VtZW50OlwiKHN0cmluZ3xhcnJheSlcIixib3VuZGFyeTpcIihzdHJpbmd8ZWxlbWVudClcIn0pLHBsYWNlbWVudDpcInRvcFwiLG9mZnNldDowLGNvbnRhaW5lcjohMSxmYWxsYmFja1BsYWNlbWVudDpcImZsaXBcIixib3VuZGFyeTpcInNjcm9sbFBhcmVudFwifSxwZT1cIm91dFwiLHZlPXtISURFOlwiaGlkZVwiK2hlLEhJRERFTjpcImhpZGRlblwiK2hlLFNIT1c6KG1lPVwic2hvd1wiKStoZSxTSE9XTjpcInNob3duXCIraGUsSU5TRVJURUQ6XCJpbnNlcnRlZFwiK2hlLENMSUNLOlwiY2xpY2tcIitoZSxGT0NVU0lOOlwiZm9jdXNpblwiK2hlLEZPQ1VTT1VUOlwiZm9jdXNvdXRcIitoZSxNT1VTRUVOVEVSOlwibW91c2VlbnRlclwiK2hlLE1PVVNFTEVBVkU6XCJtb3VzZWxlYXZlXCIraGV9LEVlPVwiZmFkZVwiLHllPVwic2hvd1wiLFRlPVwiLnRvb2x0aXAtaW5uZXJcIixDZT1cIi5hcnJvd1wiLEllPVwiaG92ZXJcIixBZT1cImZvY3VzXCIsRGU9XCJjbGlja1wiLGJlPVwibWFudWFsXCIsU2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQsZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJvb3RzdHJhcCB0b29sdGlwcyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKVwiKTt0aGlzLl9pc0VuYWJsZWQ9ITAsdGhpcy5fdGltZW91dD0wLHRoaXMuX2hvdmVyU3RhdGU9XCJcIix0aGlzLl9hY3RpdmVUcmlnZ2VyPXt9LHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD10LHRoaXMuY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLnRpcD1udWxsLHRoaXMuX3NldExpc3RlbmVycygpfXZhciB0PWkucHJvdG90eXBlO3JldHVybiB0LmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2lzRW5hYmxlZD0hMH0sdC5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSExfSx0LnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9IXRoaXMuX2lzRW5hYmxlZH0sdC50b2dnbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5faXNFbmFibGVkKWlmKHQpe3ZhciBlPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksbj1vZSh0LmN1cnJlbnRUYXJnZXQpLmRhdGEoZSk7bnx8KG49bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLG9lKHQuY3VycmVudFRhcmdldCkuZGF0YShlLG4pKSxuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrPSFuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrLG4uX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKT9uLl9lbnRlcihudWxsLG4pOm4uX2xlYXZlKG51bGwsbil9ZWxzZXtpZihvZSh0aGlzLmdldFRpcEVsZW1lbnQoKSkuaGFzQ2xhc3MoeWUpKXJldHVybiB2b2lkIHRoaXMuX2xlYXZlKG51bGwsdGhpcyk7dGhpcy5fZW50ZXIobnVsbCx0aGlzKX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSxvZS5yZW1vdmVEYXRhKHRoaXMuZWxlbWVudCx0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKSxvZSh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSksb2UodGhpcy5lbGVtZW50KS5jbG9zZXN0KFwiLm1vZGFsXCIpLm9mZihcImhpZGUuYnMubW9kYWxcIiksdGhpcy50aXAmJm9lKHRoaXMudGlwKS5yZW1vdmUoKSx0aGlzLl9pc0VuYWJsZWQ9bnVsbCx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5faG92ZXJTdGF0ZT1udWxsLCh0aGlzLl9hY3RpdmVUcmlnZ2VyPW51bGwpIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD1udWxsLHRoaXMuY29uZmlnPW51bGwsdGhpcy50aXA9bnVsbH0sdC5zaG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZihcIm5vbmVcIj09PW9lKHRoaXMuZWxlbWVudCkuY3NzKFwiZGlzcGxheVwiKSl0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50c1wiKTt2YXIgdD1vZS5FdmVudCh0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1cpO2lmKHRoaXMuaXNXaXRoQ29udGVudCgpJiZ0aGlzLl9pc0VuYWJsZWQpe29lKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0KTt2YXIgbj1vZS5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy5lbGVtZW50KTtpZih0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhbilyZXR1cm47dmFyIGk9dGhpcy5nZXRUaXBFbGVtZW50KCkscj1Dbi5nZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKTtpLnNldEF0dHJpYnV0ZShcImlkXCIsciksdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtZGVzY3JpYmVkYnlcIixyKSx0aGlzLnNldENvbnRlbnQoKSx0aGlzLmNvbmZpZy5hbmltYXRpb24mJm9lKGkpLmFkZENsYXNzKEVlKTt2YXIgcz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ/dGhpcy5jb25maWcucGxhY2VtZW50LmNhbGwodGhpcyxpLHRoaXMuZWxlbWVudCk6dGhpcy5jb25maWcucGxhY2VtZW50LG89dGhpcy5fZ2V0QXR0YWNobWVudChzKTt0aGlzLmFkZEF0dGFjaG1lbnRDbGFzcyhvKTt2YXIgYT0hMT09PXRoaXMuY29uZmlnLmNvbnRhaW5lcj9kb2N1bWVudC5ib2R5Om9lKHRoaXMuY29uZmlnLmNvbnRhaW5lcik7b2UoaSkuZGF0YSh0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLHRoaXMpLG9lLmNvbnRhaW5zKHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLnRpcCl8fG9lKGkpLmFwcGVuZFRvKGEpLG9lKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKSx0aGlzLl9wb3BwZXI9bmV3IGModGhpcy5lbGVtZW50LGkse3BsYWNlbWVudDpvLG1vZGlmaWVyczp7b2Zmc2V0OntvZmZzZXQ6dGhpcy5jb25maWcub2Zmc2V0fSxmbGlwOntiZWhhdmlvcjp0aGlzLmNvbmZpZy5mYWxsYmFja1BsYWNlbWVudH0sYXJyb3c6e2VsZW1lbnQ6Q2V9LHByZXZlbnRPdmVyZmxvdzp7Ym91bmRhcmllc0VsZW1lbnQ6dGhpcy5jb25maWcuYm91bmRhcnl9fSxvbkNyZWF0ZTpmdW5jdGlvbih0KXt0Lm9yaWdpbmFsUGxhY2VtZW50IT09dC5wbGFjZW1lbnQmJmUuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSh0KX0sb25VcGRhdGU6ZnVuY3Rpb24odCl7ZS5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKHQpfX0pLG9lKGkpLmFkZENsYXNzKHllKSxcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZvZShkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKFwibW91c2VvdmVyXCIsbnVsbCxvZS5ub29wKTt2YXIgbD1mdW5jdGlvbigpe2UuY29uZmlnLmFuaW1hdGlvbiYmZS5fZml4VHJhbnNpdGlvbigpO3ZhciB0PWUuX2hvdmVyU3RhdGU7ZS5faG92ZXJTdGF0ZT1udWxsLG9lKGUuZWxlbWVudCkudHJpZ2dlcihlLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1dOKSx0PT09cGUmJmUuX2xlYXZlKG51bGwsZSl9O2lmKG9lKHRoaXMudGlwKS5oYXNDbGFzcyhFZSkpe3ZhciBoPUNuLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMudGlwKTtvZSh0aGlzLnRpcCkub25lKENuLlRSQU5TSVRJT05fRU5ELGwpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGgpfWVsc2UgbCgpfX0sdC5oaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLmdldFRpcEVsZW1lbnQoKSxpPW9lLkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSkscj1mdW5jdGlvbigpe2UuX2hvdmVyU3RhdGUhPT1tZSYmbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksZS5fY2xlYW5UaXBDbGFzcygpLGUuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpLG9lKGUuZWxlbWVudCkudHJpZ2dlcihlLmNvbnN0cnVjdG9yLkV2ZW50LkhJRERFTiksbnVsbCE9PWUuX3BvcHBlciYmZS5fcG9wcGVyLmRlc3Ryb3koKSx0JiZ0KCl9O2lmKG9lKHRoaXMuZWxlbWVudCkudHJpZ2dlcihpKSwhaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aWYob2UobikucmVtb3ZlQ2xhc3MoeWUpLFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJm9lKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub2ZmKFwibW91c2VvdmVyXCIsbnVsbCxvZS5ub29wKSx0aGlzLl9hY3RpdmVUcmlnZ2VyW0RlXT0hMSx0aGlzLl9hY3RpdmVUcmlnZ2VyW0FlXT0hMSx0aGlzLl9hY3RpdmVUcmlnZ2VyW0llXT0hMSxvZSh0aGlzLnRpcCkuaGFzQ2xhc3MoRWUpKXt2YXIgcz1Dbi5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChuKTtvZShuKS5vbmUoQ24uVFJBTlNJVElPTl9FTkQscikuZW11bGF0ZVRyYW5zaXRpb25FbmQocyl9ZWxzZSByKCk7dGhpcy5faG92ZXJTdGF0ZT1cIlwifX0sdC51cGRhdGU9ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKX0sdC5pc1dpdGhDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKX0sdC5hZGRBdHRhY2htZW50Q2xhc3M9ZnVuY3Rpb24odCl7b2UodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKHVlK1wiLVwiK3QpfSx0LmdldFRpcEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aXA9dGhpcy50aXB8fG9lKHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXSx0aGlzLnRpcH0sdC5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9b2UodGhpcy5nZXRUaXBFbGVtZW50KCkpO3RoaXMuc2V0RWxlbWVudENvbnRlbnQodC5maW5kKFRlKSx0aGlzLmdldFRpdGxlKCkpLHQucmVtb3ZlQ2xhc3MoRWUrXCIgXCIreWUpfSx0LnNldEVsZW1lbnRDb250ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25maWcuaHRtbDtcIm9iamVjdFwiPT10eXBlb2YgZSYmKGUubm9kZVR5cGV8fGUuanF1ZXJ5KT9uP29lKGUpLnBhcmVudCgpLmlzKHQpfHx0LmVtcHR5KCkuYXBwZW5kKGUpOnQudGV4dChvZShlKS50ZXh0KCkpOnRbbj9cImh0bWxcIjpcInRleHRcIl0oZSl9LHQuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiKTtyZXR1cm4gdHx8KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5jb25maWcudGl0bGU/dGhpcy5jb25maWcudGl0bGUuY2FsbCh0aGlzLmVsZW1lbnQpOnRoaXMuY29uZmlnLnRpdGxlKSx0fSx0Ll9nZXRBdHRhY2htZW50PWZ1bmN0aW9uKHQpe3JldHVybiBfZVt0LnRvVXBwZXJDYXNlKCldfSx0Ll9zZXRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3RoaXMuY29uZmlnLnRyaWdnZXIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24odCl7aWYoXCJjbGlja1wiPT09dClvZShpLmVsZW1lbnQpLm9uKGkuY29uc3RydWN0b3IuRXZlbnQuQ0xJQ0ssaS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkudG9nZ2xlKHQpfSk7ZWxzZSBpZih0IT09YmUpe3ZhciBlPXQ9PT1JZT9pLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVI6aS5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOLG49dD09PUllP2kuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRTppLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTT1VUO29lKGkuZWxlbWVudCkub24oZSxpLmNvbmZpZy5zZWxlY3RvcixmdW5jdGlvbih0KXtyZXR1cm4gaS5fZW50ZXIodCl9KS5vbihuLGkuY29uZmlnLnNlbGVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBpLl9sZWF2ZSh0KX0pfW9lKGkuZWxlbWVudCkuY2xvc2VzdChcIi5tb2RhbFwiKS5vbihcImhpZGUuYnMubW9kYWxcIixmdW5jdGlvbigpe3JldHVybiBpLmhpZGUoKX0pfSksdGhpcy5jb25maWcuc2VsZWN0b3I/dGhpcy5jb25maWc9aCh7fSx0aGlzLmNvbmZpZyx7dHJpZ2dlcjpcIm1hbnVhbFwiLHNlbGVjdG9yOlwiXCJ9KTp0aGlzLl9maXhUaXRsZSgpfSx0Ll9maXhUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXR5cGVvZiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiKTsodGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShcInRpdGxlXCIpfHxcInN0cmluZ1wiIT09dCkmJih0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiLHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKXx8XCJcIiksdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcInRpdGxlXCIsXCJcIikpfSx0Ll9lbnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KGU9ZXx8b2UodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4pKXx8KGU9bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLG9lKHQuY3VycmVudFRhcmdldCkuZGF0YShuLGUpKSx0JiYoZS5fYWN0aXZlVHJpZ2dlcltcImZvY3VzaW5cIj09PXQudHlwZT9BZTpJZV09ITApLG9lKGUuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyh5ZSl8fGUuX2hvdmVyU3RhdGU9PT1tZT9lLl9ob3ZlclN0YXRlPW1lOihjbGVhclRpbWVvdXQoZS5fdGltZW91dCksZS5faG92ZXJTdGF0ZT1tZSxlLmNvbmZpZy5kZWxheSYmZS5jb25maWcuZGVsYXkuc2hvdz9lLl90aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9ob3ZlclN0YXRlPT09bWUmJmUuc2hvdygpfSxlLmNvbmZpZy5kZWxheS5zaG93KTplLnNob3coKSl9LHQuX2xlYXZlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTsoZT1lfHxvZSh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobikpfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSksb2UodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4sZSkpLHQmJihlLl9hY3RpdmVUcmlnZ2VyW1wiZm9jdXNvdXRcIj09PXQudHlwZT9BZTpJZV09ITEpLGUuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKXx8KGNsZWFyVGltZW91dChlLl90aW1lb3V0KSxlLl9ob3ZlclN0YXRlPXBlLGUuY29uZmlnLmRlbGF5JiZlLmNvbmZpZy5kZWxheS5oaWRlP2UuX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX2hvdmVyU3RhdGU9PT1wZSYmZS5oaWRlKCl9LGUuY29uZmlnLmRlbGF5LmhpZGUpOmUuaGlkZSgpKX0sdC5faXNXaXRoQWN0aXZlVHJpZ2dlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9hY3RpdmVUcmlnZ2VyKWlmKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdF0pcmV0dXJuITA7cmV0dXJuITF9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YodD1oKHt9LHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxvZSh0aGlzLmVsZW1lbnQpLmRhdGEoKSx0KSkuZGVsYXkmJih0LmRlbGF5PXtzaG93OnQuZGVsYXksaGlkZTp0LmRlbGF5fSksXCJudW1iZXJcIj09dHlwZW9mIHQudGl0bGUmJih0LnRpdGxlPXQudGl0bGUudG9TdHJpbmcoKSksXCJudW1iZXJcIj09dHlwZW9mIHQuY29udGVudCYmKHQuY29udGVudD10LmNvbnRlbnQudG9TdHJpbmcoKSksQ24udHlwZUNoZWNrQ29uZmlnKGFlLHQsdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSksdH0sdC5fZ2V0RGVsZWdhdGVDb25maWc9ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmNvbmZpZylmb3IodmFyIGUgaW4gdGhpcy5jb25maWcpdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VdIT09dGhpcy5jb25maWdbZV0mJih0W2VdPXRoaXMuY29uZmlnW2VdKTtyZXR1cm4gdH0sdC5fY2xlYW5UaXBDbGFzcz1mdW5jdGlvbigpe3ZhciB0PW9lKHRoaXMuZ2V0VGlwRWxlbWVudCgpKSxlPXQuYXR0cihcImNsYXNzXCIpLm1hdGNoKGZlKTtudWxsIT09ZSYmMDxlLmxlbmd0aCYmdC5yZW1vdmVDbGFzcyhlLmpvaW4oXCJcIikpfSx0Ll9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fY2xlYW5UaXBDbGFzcygpLHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQodC5wbGFjZW1lbnQpKX0sdC5fZml4VHJhbnNpdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0VGlwRWxlbWVudCgpLGU9dGhpcy5jb25maWcuYW5pbWF0aW9uO251bGw9PT10LmdldEF0dHJpYnV0ZShcIngtcGxhY2VtZW50XCIpJiYob2UodCkucmVtb3ZlQ2xhc3MoRWUpLHRoaXMuY29uZmlnLmFuaW1hdGlvbj0hMSx0aGlzLmhpZGUoKSx0aGlzLnNob3coKSx0aGlzLmNvbmZpZy5hbmltYXRpb249ZSl9LGkuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9b2UodGhpcykuZGF0YShsZSksZT1cIm9iamVjdFwiPT10eXBlb2YgbiYmbjtpZigodHx8IS9kaXNwb3NlfGhpZGUvLnRlc3QobikpJiYodHx8KHQ9bmV3IGkodGhpcyxlKSxvZSh0aGlzKS5kYXRhKGxlLHQpKSxcInN0cmluZ1wiPT10eXBlb2Ygbikpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCBcIicrbisnXCInKTt0W25dKCl9fSl9LG8oaSxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC4xLjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGdlfX0se2tleTpcIk5BTUVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWV9fSx7a2V5OlwiREFUQV9LRVlcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbGV9fSx7a2V5OlwiRXZlbnRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdmV9fSx7a2V5OlwiRVZFTlRfS0VZXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGhlfX0se2tleTpcIkRlZmF1bHRUeXBlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGRlfX1dKSxpfSgpLG9lLmZuW2FlXT1TZS5falF1ZXJ5SW50ZXJmYWNlLG9lLmZuW2FlXS5Db25zdHJ1Y3Rvcj1TZSxvZS5mblthZV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvZS5mblthZV09Y2UsU2UuX2pRdWVyeUludGVyZmFjZX0sU2UpLE9uPShOZT1cInBvcG92ZXJcIixrZT1cIi5cIisoT2U9XCJicy5wb3BvdmVyXCIpLFBlPSh3ZT1lKS5mbltOZV0sTGU9XCJicy1wb3BvdmVyXCIsamU9bmV3IFJlZ0V4cChcIihefFxcXFxzKVwiK0xlK1wiXFxcXFMrXCIsXCJnXCIpLFJlPWgoe30sTm4uRGVmYXVsdCx7cGxhY2VtZW50OlwicmlnaHRcIix0cmlnZ2VyOlwiY2xpY2tcIixjb250ZW50OlwiXCIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj48aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+PGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PjwvZGl2Pid9KSxIZT1oKHt9LE5uLkRlZmF1bHRUeXBlLHtjb250ZW50OlwiKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKVwifSksV2U9XCJmYWRlXCIseGU9XCIucG9wb3Zlci1oZWFkZXJcIixVZT1cIi5wb3BvdmVyLWJvZHlcIixLZT17SElERTpcImhpZGVcIitrZSxISURERU46XCJoaWRkZW5cIitrZSxTSE9XOihNZT1cInNob3dcIikra2UsU0hPV046XCJzaG93blwiK2tlLElOU0VSVEVEOlwiaW5zZXJ0ZWRcIitrZSxDTElDSzpcImNsaWNrXCIra2UsRk9DVVNJTjpcImZvY3VzaW5cIitrZSxGT0NVU09VVDpcImZvY3Vzb3V0XCIra2UsTU9VU0VFTlRFUjpcIm1vdXNlZW50ZXJcIitrZSxNT1VTRUxFQVZFOlwibW91c2VsZWF2ZVwiK2tlfSxGZT1mdW5jdGlvbih0KXt2YXIgZSxuO2Z1bmN0aW9uIGkoKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9bj10LChlPWkpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSwoZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSkuX19wcm90b19fPW47dmFyIHI9aS5wcm90b3R5cGU7cmV0dXJuIHIuaXNXaXRoQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuX2dldENvbnRlbnQoKX0sci5hZGRBdHRhY2htZW50Q2xhc3M9ZnVuY3Rpb24odCl7d2UodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKExlK1wiLVwiK3QpfSxyLmdldFRpcEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aXA9dGhpcy50aXB8fHdlKHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXSx0aGlzLnRpcH0sci5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9d2UodGhpcy5nZXRUaXBFbGVtZW50KCkpO3RoaXMuc2V0RWxlbWVudENvbnRlbnQodC5maW5kKHhlKSx0aGlzLmdldFRpdGxlKCkpO3ZhciBlPXRoaXMuX2dldENvbnRlbnQoKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lLmNhbGwodGhpcy5lbGVtZW50KSksdGhpcy5zZXRFbGVtZW50Q29udGVudCh0LmZpbmQoVWUpLGUpLHQucmVtb3ZlQ2xhc3MoV2UrXCIgXCIrTWUpfSxyLl9nZXRDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNvbnRlbnRcIil8fHRoaXMuY29uZmlnLmNvbnRlbnR9LHIuX2NsZWFuVGlwQ2xhc3M9ZnVuY3Rpb24oKXt2YXIgdD13ZSh0aGlzLmdldFRpcEVsZW1lbnQoKSksZT10LmF0dHIoXCJjbGFzc1wiKS5tYXRjaChqZSk7bnVsbCE9PWUmJjA8ZS5sZW5ndGgmJnQucmVtb3ZlQ2xhc3MoZS5qb2luKFwiXCIpKX0saS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD13ZSh0aGlzKS5kYXRhKE9lKSxlPVwib2JqZWN0XCI9PXR5cGVvZiBuP246bnVsbDtpZigodHx8IS9kZXN0cm95fGhpZGUvLnRlc3QobikpJiYodHx8KHQ9bmV3IGkodGhpcyxlKSx3ZSh0aGlzKS5kYXRhKE9lLHQpKSxcInN0cmluZ1wiPT10eXBlb2Ygbikpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCBcIicrbisnXCInKTt0W25dKCl9fSl9LG8oaSxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC4xLjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFJlfX0se2tleTpcIk5BTUVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTmV9fSx7a2V5OlwiREFUQV9LRVlcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2V9fSx7a2V5OlwiRXZlbnRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS2V9fSx7a2V5OlwiRVZFTlRfS0VZXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtlfX0se2tleTpcIkRlZmF1bHRUeXBlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEhlfX1dKSxpfShObiksd2UuZm5bTmVdPUZlLl9qUXVlcnlJbnRlcmZhY2Usd2UuZm5bTmVdLkNvbnN0cnVjdG9yPUZlLHdlLmZuW05lXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdlLmZuW05lXT1QZSxGZS5falF1ZXJ5SW50ZXJmYWNlfSxGZSksa249KFFlPVwic2Nyb2xsc3B5XCIsWWU9XCIuXCIrKEJlPVwiYnMuc2Nyb2xsc3B5XCIpLEdlPShWZT1lKS5mbltRZV0scWU9e29mZnNldDoxMCxtZXRob2Q6XCJhdXRvXCIsdGFyZ2V0OlwiXCJ9LHplPXtvZmZzZXQ6XCJudW1iZXJcIixtZXRob2Q6XCJzdHJpbmdcIix0YXJnZXQ6XCIoc3RyaW5nfGVsZW1lbnQpXCJ9LFhlPXtBQ1RJVkFURTpcImFjdGl2YXRlXCIrWWUsU0NST0xMOlwic2Nyb2xsXCIrWWUsTE9BRF9EQVRBX0FQSTpcImxvYWRcIitZZStcIi5kYXRhLWFwaVwifSxKZT1cImRyb3Bkb3duLWl0ZW1cIixaZT1cImFjdGl2ZVwiLCRlPXtEQVRBX1NQWTonW2RhdGEtc3B5PVwic2Nyb2xsXCJdJyxBQ1RJVkU6XCIuYWN0aXZlXCIsTkFWX0xJU1RfR1JPVVA6XCIubmF2LCAubGlzdC1ncm91cFwiLE5BVl9MSU5LUzpcIi5uYXYtbGlua1wiLE5BVl9JVEVNUzpcIi5uYXYtaXRlbVwiLExJU1RfSVRFTVM6XCIubGlzdC1ncm91cC1pdGVtXCIsRFJPUERPV046XCIuZHJvcGRvd25cIixEUk9QRE9XTl9JVEVNUzpcIi5kcm9wZG93bi1pdGVtXCIsRFJPUERPV05fVE9HR0xFOlwiLmRyb3Bkb3duLXRvZ2dsZVwifSx0bj1cIm9mZnNldFwiLGVuPVwicG9zaXRpb25cIixubj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxlKXt2YXIgbj10aGlzO3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9zY3JvbGxFbGVtZW50PVwiQk9EWVwiPT09dC50YWdOYW1lP3dpbmRvdzp0LHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fc2VsZWN0b3I9dGhpcy5fY29uZmlnLnRhcmdldCtcIiBcIiskZS5OQVZfTElOS1MrXCIsXCIrdGhpcy5fY29uZmlnLnRhcmdldCtcIiBcIiskZS5MSVNUX0lURU1TK1wiLFwiK3RoaXMuX2NvbmZpZy50YXJnZXQrXCIgXCIrJGUuRFJPUERPV05fSVRFTVMsdGhpcy5fb2Zmc2V0cz1bXSx0aGlzLl90YXJnZXRzPVtdLHRoaXMuX2FjdGl2ZVRhcmdldD1udWxsLHRoaXMuX3Njcm9sbEhlaWdodD0wLFZlKHRoaXMuX3Njcm9sbEVsZW1lbnQpLm9uKFhlLlNDUk9MTCxmdW5jdGlvbih0KXtyZXR1cm4gbi5fcHJvY2Vzcyh0KX0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX3Byb2Nlc3MoKX12YXIgdD1uLnByb3RvdHlwZTtyZXR1cm4gdC5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuX3Njcm9sbEVsZW1lbnQ9PT10aGlzLl9zY3JvbGxFbGVtZW50LndpbmRvdz90bjplbixyPVwiYXV0b1wiPT09dGhpcy5fY29uZmlnLm1ldGhvZD90OnRoaXMuX2NvbmZpZy5tZXRob2Qscz1yPT09ZW4/dGhpcy5fZ2V0U2Nyb2xsVG9wKCk6MDt0aGlzLl9vZmZzZXRzPVtdLHRoaXMuX3RhcmdldHM9W10sdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2dldFNjcm9sbEhlaWdodCgpLFZlLm1ha2VBcnJheShWZSh0aGlzLl9zZWxlY3RvcikpLm1hcChmdW5jdGlvbih0KXt2YXIgZSxuPUNuLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodCk7aWYobiYmKGU9VmUobilbMF0pLGUpe3ZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoaS53aWR0aHx8aS5oZWlnaHQpcmV0dXJuW1ZlKGUpW3JdKCkudG9wK3Msbl19cmV0dXJuIG51bGx9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fb2Zmc2V0cy5wdXNoKHRbMF0pLGUuX3RhcmdldHMucHVzaCh0WzFdKX0pfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXtWZS5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsQmUpLFZlKHRoaXMuX3Njcm9sbEVsZW1lbnQpLm9mZihZZSksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX3Njcm9sbEVsZW1lbnQ9bnVsbCx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9zZWxlY3Rvcj1udWxsLHRoaXMuX29mZnNldHM9bnVsbCx0aGlzLl90YXJnZXRzPW51bGwsdGhpcy5fYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5fc2Nyb2xsSGVpZ2h0PW51bGx9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiIT10eXBlb2YodD1oKHt9LHFlLHQpKS50YXJnZXQpe3ZhciBlPVZlKHQudGFyZ2V0KS5hdHRyKFwiaWRcIik7ZXx8KGU9Q24uZ2V0VUlEKFFlKSxWZSh0LnRhcmdldCkuYXR0cihcImlkXCIsZSkpLHQudGFyZ2V0PVwiI1wiK2V9cmV0dXJuIENuLnR5cGVDaGVja0NvbmZpZyhRZSx0LHplKSx0fSx0Ll9nZXRTY3JvbGxUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudD09PXdpbmRvdz90aGlzLl9zY3JvbGxFbGVtZW50LnBhZ2VZT2Zmc2V0OnRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wfSx0Ll9nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSx0Ll9nZXRPZmZzZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudD09PXdpbmRvdz93aW5kb3cuaW5uZXJIZWlnaHQ6dGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9LHQuX3Byb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRTY3JvbGxUb3AoKSt0aGlzLl9jb25maWcub2Zmc2V0LGU9dGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KCksbj10aGlzLl9jb25maWcub2Zmc2V0K2UtdGhpcy5fZ2V0T2Zmc2V0SGVpZ2h0KCk7aWYodGhpcy5fc2Nyb2xsSGVpZ2h0IT09ZSYmdGhpcy5yZWZyZXNoKCksbjw9dCl7dmFyIGk9dGhpcy5fdGFyZ2V0c1t0aGlzLl90YXJnZXRzLmxlbmd0aC0xXTt0aGlzLl9hY3RpdmVUYXJnZXQhPT1pJiZ0aGlzLl9hY3RpdmF0ZShpKX1lbHNle2lmKHRoaXMuX2FjdGl2ZVRhcmdldCYmdDx0aGlzLl9vZmZzZXRzWzBdJiYwPHRoaXMuX29mZnNldHNbMF0pcmV0dXJuIHRoaXMuX2FjdGl2ZVRhcmdldD1udWxsLHZvaWQgdGhpcy5fY2xlYXIoKTtmb3IodmFyIHI9dGhpcy5fb2Zmc2V0cy5sZW5ndGg7ci0tOyl7dGhpcy5fYWN0aXZlVGFyZ2V0IT09dGhpcy5fdGFyZ2V0c1tyXSYmdD49dGhpcy5fb2Zmc2V0c1tyXSYmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLl9vZmZzZXRzW3IrMV18fHQ8dGhpcy5fb2Zmc2V0c1tyKzFdKSYmdGhpcy5fYWN0aXZhdGUodGhpcy5fdGFyZ2V0c1tyXSl9fX0sdC5fYWN0aXZhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fYWN0aXZlVGFyZ2V0PWUsdGhpcy5fY2xlYXIoKTt2YXIgdD10aGlzLl9zZWxlY3Rvci5zcGxpdChcIixcIik7dD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCsnW2RhdGEtdGFyZ2V0PVwiJytlKydcIl0sJyt0KydbaHJlZj1cIicrZSsnXCJdJ30pO3ZhciBuPVZlKHQuam9pbihcIixcIikpO24uaGFzQ2xhc3MoSmUpPyhuLmNsb3Nlc3QoJGUuRFJPUERPV04pLmZpbmQoJGUuRFJPUERPV05fVE9HR0xFKS5hZGRDbGFzcyhaZSksbi5hZGRDbGFzcyhaZSkpOihuLmFkZENsYXNzKFplKSxuLnBhcmVudHMoJGUuTkFWX0xJU1RfR1JPVVApLnByZXYoJGUuTkFWX0xJTktTK1wiLCBcIiskZS5MSVNUX0lURU1TKS5hZGRDbGFzcyhaZSksbi5wYXJlbnRzKCRlLk5BVl9MSVNUX0dST1VQKS5wcmV2KCRlLk5BVl9JVEVNUykuY2hpbGRyZW4oJGUuTkFWX0xJTktTKS5hZGRDbGFzcyhaZSkpLFZlKHRoaXMuX3Njcm9sbEVsZW1lbnQpLnRyaWdnZXIoWGUuQUNUSVZBVEUse3JlbGF0ZWRUYXJnZXQ6ZX0pfSx0Ll9jbGVhcj1mdW5jdGlvbigpe1ZlKHRoaXMuX3NlbGVjdG9yKS5maWx0ZXIoJGUuQUNUSVZFKS5yZW1vdmVDbGFzcyhaZSl9LG4uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9VmUodGhpcykuZGF0YShCZSk7aWYodHx8KHQ9bmV3IG4odGhpcyxcIm9iamVjdFwiPT10eXBlb2YgZSYmZSksVmUodGhpcykuZGF0YShCZSx0KSksXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W2VdKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCBcIicrZSsnXCInKTt0W2VdKCl9fSl9LG8obixudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC4xLjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHFlfX1dKSxufSgpLFZlKHdpbmRvdykub24oWGUuTE9BRF9EQVRBX0FQSSxmdW5jdGlvbigpe2Zvcih2YXIgdD1WZS5tYWtlQXJyYXkoVmUoJGUuREFUQV9TUFkpKSxlPXQubGVuZ3RoO2UtLTspe3ZhciBuPVZlKHRbZV0pO25uLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLG4uZGF0YSgpKX19KSxWZS5mbltRZV09bm4uX2pRdWVyeUludGVyZmFjZSxWZS5mbltRZV0uQ29uc3RydWN0b3I9bm4sVmUuZm5bUWVdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gVmUuZm5bUWVdPUdlLG5uLl9qUXVlcnlJbnRlcmZhY2V9LG5uKSxQbj0ob249XCIuXCIrKHNuPVwiYnMudGFiXCIpLGFuPShybj1lKS5mbi50YWIsbG49e0hJREU6XCJoaWRlXCIrb24sSElEREVOOlwiaGlkZGVuXCIrb24sU0hPVzpcInNob3dcIitvbixTSE9XTjpcInNob3duXCIrb24sQ0xJQ0tfREFUQV9BUEk6XCJjbGlja1wiK29uK1wiLmRhdGEtYXBpXCJ9LGhuPVwiZHJvcGRvd24tbWVudVwiLGNuPVwiYWN0aXZlXCIsdW49XCJkaXNhYmxlZFwiLGZuPVwiZmFkZVwiLGRuPVwic2hvd1wiLF9uPVwiLmRyb3Bkb3duXCIsZ249XCIubmF2LCAubGlzdC1ncm91cFwiLG1uPVwiLmFjdGl2ZVwiLHBuPVwiPiBsaSA+IC5hY3RpdmVcIix2bj0nW2RhdGEtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS10b2dnbGU9XCJsaXN0XCJdJyxFbj1cIi5kcm9wZG93bi10b2dnbGVcIix5bj1cIj4gLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZVwiLFRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0KXt0aGlzLl9lbGVtZW50PXR9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuc2hvdz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7aWYoISh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZybih0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhjbil8fHJuKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKHVuKSkpe3ZhciB0LGksZT1ybih0aGlzLl9lbGVtZW50KS5jbG9zZXN0KGduKVswXSxyPUNuLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7aWYoZSl7dmFyIHM9XCJVTFwiPT09ZS5ub2RlTmFtZT9wbjptbjtpPShpPXJuLm1ha2VBcnJheShybihlKS5maW5kKHMpKSlbaS5sZW5ndGgtMV19dmFyIG89cm4uRXZlbnQobG4uSElERSx7cmVsYXRlZFRhcmdldDp0aGlzLl9lbGVtZW50fSksYT1ybi5FdmVudChsbi5TSE9XLHtyZWxhdGVkVGFyZ2V0Oml9KTtpZihpJiZybihpKS50cmlnZ2VyKG8pLHJuKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoYSksIWEuaXNEZWZhdWx0UHJldmVudGVkKCkmJiFvLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyJiYodD1ybihyKVswXSksdGhpcy5fYWN0aXZhdGUodGhpcy5fZWxlbWVudCxlKTt2YXIgbD1mdW5jdGlvbigpe3ZhciB0PXJuLkV2ZW50KGxuLkhJRERFTix7cmVsYXRlZFRhcmdldDpuLl9lbGVtZW50fSksZT1ybi5FdmVudChsbi5TSE9XTix7cmVsYXRlZFRhcmdldDppfSk7cm4oaSkudHJpZ2dlcih0KSxybihuLl9lbGVtZW50KS50cmlnZ2VyKGUpfTt0P3RoaXMuX2FjdGl2YXRlKHQsdC5wYXJlbnROb2RlLGwpOmwoKX19fSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXtybi5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsc24pLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5fYWN0aXZhdGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj0oXCJVTFwiPT09ZS5ub2RlTmFtZT9ybihlKS5maW5kKHBuKTpybihlKS5jaGlsZHJlbihtbikpWzBdLHM9biYmciYmcm4ocikuaGFzQ2xhc3MoZm4pLG89ZnVuY3Rpb24oKXtyZXR1cm4gaS5fdHJhbnNpdGlvbkNvbXBsZXRlKHQscixuKX07aWYociYmcyl7dmFyIGE9Q24uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQocik7cm4ocikub25lKENuLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGEpfWVsc2UgbygpfSx0Ll90cmFuc2l0aW9uQ29tcGxldGU9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe3JuKGUpLnJlbW92ZUNsYXNzKGRuK1wiIFwiK2NuKTt2YXIgaT1ybihlLnBhcmVudE5vZGUpLmZpbmQoeW4pWzBdO2kmJnJuKGkpLnJlbW92ZUNsYXNzKGNuKSxcInRhYlwiPT09ZS5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpJiZlLnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIiwhMSl9aWYocm4odCkuYWRkQ2xhc3MoY24pLFwidGFiXCI9PT10LmdldEF0dHJpYnV0ZShcInJvbGVcIikmJnQuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCEwKSxDbi5yZWZsb3codCkscm4odCkuYWRkQ2xhc3MoZG4pLHQucGFyZW50Tm9kZSYmcm4odC5wYXJlbnROb2RlKS5oYXNDbGFzcyhobikpe3ZhciByPXJuKHQpLmNsb3Nlc3QoX24pWzBdO3ImJnJuKHIpLmZpbmQoRW4pLmFkZENsYXNzKGNuKSx0LnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwhMCl9biYmbigpfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXJuKHRoaXMpLGU9dC5kYXRhKHNuKTtpZihlfHwoZT1uZXcgaSh0aGlzKSx0LmRhdGEoc24sZSkpLFwic3RyaW5nXCI9PXR5cGVvZiBuKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZVtuXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgXCInK24rJ1wiJyk7ZVtuXSgpfX0pfSxvKGksbnVsbCxbe2tleTpcIlZFUlNJT05cIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIjQuMS4wXCJ9fV0pLGl9KCkscm4oZG9jdW1lbnQpLm9uKGxuLkNMSUNLX0RBVEFfQVBJLHZuLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxUbi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwocm4odGhpcyksXCJzaG93XCIpfSkscm4uZm4udGFiPVRuLl9qUXVlcnlJbnRlcmZhY2Uscm4uZm4udGFiLkNvbnN0cnVjdG9yPVRuLHJuLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHJuLmZuLnRhYj1hbixUbi5falF1ZXJ5SW50ZXJmYWNlfSxUbik7IWZ1bmN0aW9uKHQpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeS4galF1ZXJ5IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIEJvb3RzdHJhcCdzIEphdmFTY3JpcHQuXCIpO3ZhciBlPXQuZm4uanF1ZXJ5LnNwbGl0KFwiIFwiKVswXS5zcGxpdChcIi5cIik7aWYoZVswXTwyJiZlWzFdPDl8fDE9PT1lWzBdJiY5PT09ZVsxXSYmZVsyXTwxfHw0PD1lWzBdKXRocm93IG5ldyBFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgYXQgbGVhc3QgalF1ZXJ5IHYxLjkuMSBidXQgbGVzcyB0aGFuIHY0LjAuMFwiKX0oZSksdC5VdGlsPUNuLHQuQWxlcnQ9SW4sdC5CdXR0b249QW4sdC5DYXJvdXNlbD1Ebix0LkNvbGxhcHNlPWJuLHQuRHJvcGRvd249U24sdC5Nb2RhbD13bix0LlBvcG92ZXI9T24sdC5TY3JvbGxzcHk9a24sdC5UYWI9UG4sdC5Ub29sdGlwPU5uLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAubWluLmpzLm1hcCIsIi8vIGh0dHBzOi8vZDNqcy5vcmcgVmVyc2lvbiA1LjUuMC4gQ29weXJpZ2h0IDIwMTggTWlrZSBCb3N0b2NrLlxuKGZ1bmN0aW9uKHQsbil7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bihleHBvcnRzKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImV4cG9ydHNcIl0sbik6bih0LmQzPXQuZDN8fHt9KX0pKHRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBlKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBuKHQoZSkscil9fSh0KSkse2xlZnQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKTwwP3I9bysxOmk9b31yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKT4wP2k9bzpyPW8rMX1yZXR1cm4gcn19fWZ1bmN0aW9uIHIodCxuKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiBpKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gbyh0LG4pe3ZhciBlLHIsbz10Lmxlbmd0aCxhPTAsdT0tMSxmPTAsYz0wO2lmKG51bGw9PW4pZm9yKDsrK3U8bzspaXNOYU4oZT1pKHRbdV0pKXx8KGMrPShyPWUtZikqKGUtKGYrPXIvKythKSkpO2Vsc2UgZm9yKDsrK3U8bzspaXNOYU4oZT1pKG4odFt1XSx1LHQpKSl8fChjKz0ocj1lLWYpKihlLShmKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9ZnVuY3Rpb24gYSh0LG4pe3ZhciBlPW8odCxuKTtyZXR1cm4gZT9NYXRoLnNxcnQoZSk6ZX1mdW5jdGlvbiB1KHQsbil7dmFyIGUscixpLG89dC5sZW5ndGgsYT0tMTtpZihudWxsPT1uKXtmb3IoOysrYTxvOylpZihudWxsIT0oZT10W2FdKSYmZT49ZSlmb3Iocj1pPWU7KythPG87KW51bGwhPShlPXRbYV0pJiYocj5lJiYocj1lKSxpPGUmJihpPWUpKX1lbHNlIGZvcig7KythPG87KWlmKG51bGwhPShlPW4odFthXSxhLHQpKSYmZT49ZSlmb3Iocj1pPWU7KythPG87KW51bGwhPShlPW4odFthXSxhLHQpKSYmKHI+ZSYmKHI9ZSksaTxlJiYoaT1lKSk7cmV0dXJuW3IsaV19ZnVuY3Rpb24gZih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdH1mdW5jdGlvbiBzKHQsbixlKXt0PSt0LG49K24sZT0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhuPXQsdD0wLDEpOmk8Mz8xOitlO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKG4tdCkvZSkpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrciplO3JldHVybiBvfWZ1bmN0aW9uIGwodCxuLGUpe3ZhciByLGksbyxhLHU9LTE7aWYobj0rbix0PSt0LGU9K2UsdD09PW4mJmU+MClyZXR1cm5bdF07aWYoKHI9bjx0KSYmKGk9dCx0PW4sbj1pKSwwPT09KGE9aCh0LG4sZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLG49TWF0aC5mbG9vcihuL2EpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKG4tdCsxKSk7Kyt1PGk7KW9bdV09KHQrdSkqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxuPU1hdGguY2VpbChuKmEpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtbisxKSk7Kyt1PGk7KW9bdV09KHQtdSkvYTtyZXR1cm4gciYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBoKHQsbixlKXt2YXIgcj0obi10KS9NYXRoLm1heCgwLGUpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLG89ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49aXM/MTA6bz49b3M/NTpvPj1hcz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PWlzPzEwOm8+PW9zPzU6bz49YXM/MjoxKX1mdW5jdGlvbiBkKHQsbixlKXt2YXIgcj1NYXRoLmFicyhuLXQpL01hdGgubWF4KDAsZSksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLG89ci9pO3JldHVybiBvPj1pcz9pKj0xMDpvPj1vcz9pKj01Om8+PWFzJiYoaSo9Miksbjx0Py1pOml9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiB2KHQsbixlKXtpZihudWxsPT1lJiYoZT1pKSxyPXQubGVuZ3RoKXtpZigobj0rbik8PTB8fHI8MilyZXR1cm4rZSh0WzBdLDAsdCk7aWYobj49MSlyZXR1cm4rZSh0W3ItMV0sci0xLHQpO3ZhciByLG89KHItMSkqbixhPU1hdGguZmxvb3IobyksdT0rZSh0W2FdLGEsdCk7cmV0dXJuIHUrKCtlKHRbYSsxXSxhKzEsdCktdSkqKG8tYSl9fWZ1bmN0aW9uIGcodCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmZT5yJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJmU+ciYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24geSh0KXtmb3IodmFyIG4sZSxyLGk9dC5sZW5ndGgsbz0tMSxhPTA7KytvPGk7KWErPXRbb10ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKTstLWk+PTA7KWZvcihuPShyPXRbaV0pLmxlbmd0aDstLW4+PTA7KWVbLS1hXT1yW25dO3JldHVybiBlfWZ1bmN0aW9uIF8odCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmcj5lJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJnI+ZSYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgbj0tMSxlPV8odCxtKSxyPW5ldyBBcnJheShlKTsrK248ZTspZm9yKHZhciBpLG89LTEsYT1yW25dPW5ldyBBcnJheShpKTsrK288aTspYVtvXT10W29dW25dO3JldHVybiByfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQubGVuZ3RofWZ1bmN0aW9uIHgodCl7cmV0dXJuIHR9ZnVuY3Rpb24gdyh0KXtyZXR1cm5cInRyYW5zbGF0ZShcIisodCsuNSkrXCIsMClcIn1mdW5jdGlvbiBNKHQpe3JldHVyblwidHJhbnNsYXRlKDAsXCIrKHQrLjUpK1wiKVwifWZ1bmN0aW9uIEEoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gVCh0LG4pe2Z1bmN0aW9uIGUoZSl7dmFyIGg9bnVsbD09aT9uLnRpY2tzP24udGlja3MuYXBwbHkobixyKTpuLmRvbWFpbigpOmksZD1udWxsPT1vP24udGlja0Zvcm1hdD9uLnRpY2tGb3JtYXQuYXBwbHkobixyKTp4Om8scD1NYXRoLm1heChhLDApK2Ysdj1uLnJhbmdlKCksZz0rdlswXSsuNSx5PSt2W3YubGVuZ3RoLTFdKy41LF89KG4uYmFuZHdpZHRoP2Z1bmN0aW9uKHQpe3ZhciBuPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihuPU1hdGgucm91bmQobikpLGZ1bmN0aW9uKGUpe3JldHVybit0KGUpK259fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuK3Qobil9fSkobi5jb3B5KCkpLGI9ZS5zZWxlY3Rpb24/ZS5zZWxlY3Rpb24oKTplLG09Yi5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoW251bGxdKSx3PWIuc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YShoLG4pLm9yZGVyKCksTT13LmV4aXQoKSxUPXcuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwidGlja1wiKSxOPXcuc2VsZWN0KFwibGluZVwiKSxTPXcuc2VsZWN0KFwidGV4dFwiKTttPW0ubWVyZ2UobS5lbnRlcigpLmluc2VydChcInBhdGhcIixcIi50aWNrXCIpLmF0dHIoXCJjbGFzc1wiLFwiZG9tYWluXCIpLmF0dHIoXCJzdHJva2VcIixcIiMwMDBcIikpLHc9dy5tZXJnZShUKSxOPU4ubWVyZ2UoVC5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJzdHJva2VcIixcIiMwMDBcIikuYXR0cihzK1wiMlwiLGMqYSkpLFM9Uy5tZXJnZShULmFwcGVuZChcInRleHRcIikuYXR0cihcImZpbGxcIixcIiMwMDBcIikuYXR0cihzLGMqcCkuYXR0cihcImR5XCIsdD09PWZzP1wiMGVtXCI6dD09PXNzP1wiMC43MWVtXCI6XCIwLjMyZW1cIikpLGUhPT1iJiYobT1tLnRyYW5zaXRpb24oZSksdz13LnRyYW5zaXRpb24oZSksTj1OLnRyYW5zaXRpb24oZSksUz1TLnRyYW5zaXRpb24oZSksTT1NLnRyYW5zaXRpb24oZSkuYXR0cihcIm9wYWNpdHlcIixocykuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PV8odCkpP2wodCk6dGhpcy5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIil9KSxULmF0dHIoXCJvcGFjaXR5XCIsaHMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgbj10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBsKG4mJmlzRmluaXRlKG49bih0KSk/bjpfKHQpKX0pKSxNLnJlbW92ZSgpLG0uYXR0cihcImRcIix0PT09bHN8fHQ9PWNzP1wiTVwiK2MqdStcIixcIitnK1wiSDAuNVZcIit5K1wiSFwiK2MqdTpcIk1cIitnK1wiLFwiK2MqdStcIlYwLjVIXCIreStcIlZcIitjKnUpLHcuYXR0cihcIm9wYWNpdHlcIiwxKS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuIGwoXyh0KSl9KSxOLmF0dHIocytcIjJcIixjKmEpLFMuYXR0cihzLGMqcCkudGV4dChkKSxiLmZpbHRlcihBKS5hdHRyKFwiZmlsbFwiLFwibm9uZVwiKS5hdHRyKFwiZm9udC1zaXplXCIsMTApLmF0dHIoXCJmb250LWZhbWlseVwiLFwic2Fucy1zZXJpZlwiKS5hdHRyKFwidGV4dC1hbmNob3JcIix0PT09Y3M/XCJzdGFydFwiOnQ9PT1scz9cImVuZFwiOlwibWlkZGxlXCIpLGIuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPV99KX12YXIgcj1bXSxpPW51bGwsbz1udWxsLGE9Nix1PTYsZj0zLGM9dD09PWZzfHx0PT09bHM/LTE6MSxzPXQ9PT1sc3x8dD09PWNzP1wieFwiOlwieVwiLGw9dD09PWZzfHx0PT09c3M/dzpNO3JldHVybiBlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiByPXVzLmNhbGwoYXJndW1lbnRzKSxlfSxlLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9bXTp1cy5jYWxsKHQpLGUpOnIuc2xpY2UoKX0sZS50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp1cy5jYWxsKHQpLGUpOmkmJmkuc2xpY2UoKX0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZSk6b30sZS50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT11PSt0LGUpOmF9LGUudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSxlLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsZSk6dX0sZS50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxlKTpmfSxlfWZ1bmN0aW9uIE4oKXtmb3IodmFyIHQsbj0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPXt9O248ZTsrK24pe2lmKCEodD1hcmd1bWVudHNbbl0rXCJcIil8fHQgaW4gcil0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiK3QpO3JbdF09W119cmV0dXJuIG5ldyBTKHIpfWZ1bmN0aW9uIFModCl7dGhpcy5fPXR9ZnVuY3Rpb24gRSh0LG4sZSl7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PW4pe3Rbcl09ZHMsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJnQucHVzaCh7bmFtZTpuLHZhbHVlOmV9KSx0fWZ1bmN0aW9uIGsodCl7dmFyIG49dCs9XCJcIixlPW4uaW5kZXhPZihcIjpcIik7cmV0dXJuIGU+PTAmJlwieG1sbnNcIiE9PShuPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksdnMuaGFzT3duUHJvcGVydHkobik/e3NwYWNlOnZzW25dLGxvY2FsOnR9OnR9ZnVuY3Rpb24gQyh0KXt2YXIgbj1rKHQpO3JldHVybihuLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PXBzJiZuLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1wcz9uLmNyZWF0ZUVsZW1lbnQodCk6bi5jcmVhdGVFbGVtZW50TlMoZSx0KX19KShuKX1mdW5jdGlvbiBQKCl7fWZ1bmN0aW9uIHoodCl7cmV0dXJuIG51bGw9PXQ/UDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIFIoKXtyZXR1cm5bXX1mdW5jdGlvbiBMKHQpe3JldHVybiBudWxsPT10P1I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiBEKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIFUodCxuKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPW59ZnVuY3Rpb24gcSh0LG4sZSxyLGksbyl7Zm9yKHZhciBhLHU9MCxmPW4ubGVuZ3RoLGM9by5sZW5ndGg7dTxjOysrdSkoYT1uW3VdKT8oYS5fX2RhdGFfXz1vW3VdLHJbdV09YSk6ZVt1XT1uZXcgVSh0LG9bdV0pO2Zvcig7dTxmOysrdSkoYT1uW3VdKSYmKGlbdV09YSl9ZnVuY3Rpb24gTyh0LG4sZSxyLGksbyxhKXt2YXIgdSxmLGMscz17fSxsPW4ubGVuZ3RoLGg9by5sZW5ndGgsZD1uZXcgQXJyYXkobCk7Zm9yKHU9MDt1PGw7Kyt1KShmPW5bdV0pJiYoZFt1XT1jPW1zK2EuY2FsbChmLGYuX19kYXRhX18sdSxuKSxjIGluIHM/aVt1XT1mOnNbY109Zik7Zm9yKHU9MDt1PGg7Kyt1KShmPXNbYz1tcythLmNhbGwodCxvW3VdLHUsbyldKT8oclt1XT1mLGYuX19kYXRhX189b1t1XSxzW2NdPW51bGwpOmVbdV09bmV3IFUodCxvW3VdKTtmb3IodT0wO3U8bDsrK3UpKGY9blt1XSkmJnNbZFt1XV09PT1mJiYoaVt1XT1mKX1mdW5jdGlvbiBZKHQsbil7cmV0dXJuIHQ8bj8tMTp0Pm4/MTp0Pj1uPzA6TmFOfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIEYodCxuKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG4pfHxCKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxccysvKX1mdW5jdGlvbiBqKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEgodCl9ZnVuY3Rpb24gSCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9SSh0LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiKX1mdW5jdGlvbiBYKHQsbil7Zm9yKHZhciBlPWoodCkscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyllLmFkZChuW3JdKX1mdW5jdGlvbiBHKHQsbil7Zm9yKHZhciBlPWoodCkscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyllLnJlbW92ZShuW3JdKX1mdW5jdGlvbiBWKCl7dGhpcy50ZXh0Q29udGVudD1cIlwifWZ1bmN0aW9uICQoKXt0aGlzLmlubmVySFRNTD1cIlwifWZ1bmN0aW9uIFcoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWigpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSygpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCExKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiB0dCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCEwKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBudCh0LG4sZSl7cmV0dXJuIHQ9ZXQodCxuLGUpLGZ1bmN0aW9uKG4pe3ZhciBlPW4ucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBldChuLGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQuZXZlbnQ7dC5ldmVudD1pO3RyeXtuLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUscil9ZmluYWxseXt0LmV2ZW50PW99fX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fb247aWYobil7Zm9yKHZhciBlLHI9MCxpPS0xLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sdC50eXBlJiZlLnR5cGUhPT10LnR5cGV8fGUubmFtZSE9PXQubmFtZT9uWysraV09ZTp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZS50eXBlLGUubGlzdGVuZXIsZS5jYXB0dXJlKTsrK2k/bi5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gaXQodCxuLGUpe3ZhciByPXhzLmhhc093blByb3BlcnR5KHQudHlwZSk/bnQ6ZXQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgdSxmPXRoaXMuX19vbixjPXIobixvLGEpO2lmKGYpZm9yKHZhciBzPTAsbD1mLmxlbmd0aDtzPGw7KytzKWlmKCh1PWZbc10pLnR5cGU9PT10LnR5cGUmJnUubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHUudHlwZSx1Lmxpc3RlbmVyLHUuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHUudHlwZSx1Lmxpc3RlbmVyPWMsdS5jYXB0dXJlPWUpLHZvaWQodS52YWx1ZT1uKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsZSksdT17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6bixsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sZj9mLnB1c2godSk6dGhpcy5fX29uPVt1XX19ZnVuY3Rpb24gb3QobixlLHIsaSl7dmFyIG89dC5ldmVudDtuLnNvdXJjZUV2ZW50PXQuZXZlbnQsdC5ldmVudD1uO3RyeXtyZXR1cm4gZS5hcHBseShyLGkpfWZpbmFsbHl7dC5ldmVudD1vfX1mdW5jdGlvbiBhdCh0LG4sZSl7dmFyIHI9Qih0KSxpPXIuQ3VzdG9tRXZlbnQ7XCJmdW5jdGlvblwiPT10eXBlb2YgaT9pPW5ldyBpKG4sZSk6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpLGU/KGkuaW5pdEV2ZW50KG4sZS5idWJibGVzLGUuY2FuY2VsYWJsZSksaS5kZXRhaWw9ZS5kZXRhaWwpOmkuaW5pdEV2ZW50KG4sITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gdXQodCxuKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPW59ZnVuY3Rpb24gZnQoKXtyZXR1cm4gbmV3IHV0KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sd3MpfWZ1bmN0aW9uIGN0KHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P25ldyB1dChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHV0KFtbdF1dLHdzKX1mdW5jdGlvbiBzdCgpe3JldHVybiBuZXcgbHR9ZnVuY3Rpb24gbHQoKXt0aGlzLl89XCJAXCIrKCsrTXMpLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBodCgpe2Zvcih2YXIgbixlPXQuZXZlbnQ7bj1lLnNvdXJjZUV2ZW50OyllPW47cmV0dXJuIGV9ZnVuY3Rpb24gZHQodCxuKXt2YXIgZT10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihlLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1lLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIHIueD1uLmNsaWVudFgsci55PW4uY2xpZW50WSxyPXIubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSxbci54LHIueV19dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bbi5jbGllbnRYLWkubGVmdC10LmNsaWVudExlZnQsbi5jbGllbnRZLWkudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiBwdCh0KXt2YXIgbj1odCgpO3JldHVybiBuLmNoYW5nZWRUb3VjaGVzJiYobj1uLmNoYW5nZWRUb3VjaGVzWzBdKSxkdCh0LG4pfWZ1bmN0aW9uIHZ0KHQsbixlKXthcmd1bWVudHMubGVuZ3RoPDMmJihlPW4sbj1odCgpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIHIsaT0wLG89bj9uLmxlbmd0aDowO2k8bzsrK2kpaWYoKHI9bltpXSkuaWRlbnRpZmllcj09PWUpcmV0dXJuIGR0KHQscik7cmV0dXJuIG51bGx9ZnVuY3Rpb24gZ3QoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHl0KCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gX3QodCl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1jdCh0KS5vbihcImRyYWdzdGFydC5kcmFnXCIseXQsITApO1wib25zZWxlY3RzdGFydFwiaW4gbj9lLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLHl0LCEwKToobi5fX25vc2VsZWN0PW4uc3R5bGUuTW96VXNlclNlbGVjdCxuLnN0eWxlLk1velVzZXJTZWxlY3Q9XCJub25lXCIpfWZ1bmN0aW9uIGJ0KHQsbil7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1jdCh0KS5vbihcImRyYWdzdGFydC5kcmFnXCIsbnVsbCk7biYmKHIub24oXCJjbGljay5kcmFnXCIseXQsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9uKFwiY2xpY2suZHJhZ1wiLG51bGwpfSwwKSksXCJvbnNlbGVjdHN0YXJ0XCJpbiBlP3Iub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9ZnVuY3Rpb24gbXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHh0KHQsbixlLHIsaSxvLGEsdSxmLGMpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy5zdWJqZWN0PWUsdGhpcy5pZGVudGlmaWVyPXIsdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXUsdGhpcy5keT1mLHRoaXMuXz1jfWZ1bmN0aW9uIHd0KCl7cmV0dXJuIXQuZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIE10KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBBdChuKXtyZXR1cm4gbnVsbD09bj97eDp0LmV2ZW50LngseTp0LmV2ZW50Lnl9Om59ZnVuY3Rpb24gVHQoKXtyZXR1cm5cIm9udG91Y2hzdGFydFwiaW4gdGhpc31mdW5jdGlvbiBOdCh0LG4sZSl7dC5wcm90b3R5cGU9bi5wcm90b3R5cGU9ZSxlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gU3QodCxuKXt2YXIgZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gbillW3JdPW5bcl07cmV0dXJuIGV9ZnVuY3Rpb24gRXQoKXt9ZnVuY3Rpb24ga3QodCl7dmFyIG47cmV0dXJuIHQ9KHQrXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKG49U3MuZXhlYyh0KSk/KG49cGFyc2VJbnQoblsxXSwxNiksbmV3IEx0KG4+PjgmMTV8bj4+NCYyNDAsbj4+NCYxNXwyNDAmbiwoMTUmbik8PDR8MTUmbiwxKSk6KG49RXMuZXhlYyh0KSk/Q3QocGFyc2VJbnQoblsxXSwxNikpOihuPWtzLmV4ZWModCkpP25ldyBMdChuWzFdLG5bMl0sblszXSwxKToobj1Dcy5leGVjKHQpKT9uZXcgTHQoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsMSk6KG49UHMuZXhlYyh0KSk/UHQoblsxXSxuWzJdLG5bM10sbls0XSk6KG49enMuZXhlYyh0KSk/UHQoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsbls0XSk6KG49UnMuZXhlYyh0KSk/VXQoblsxXSxuWzJdLzEwMCxuWzNdLzEwMCwxKToobj1Mcy5leGVjKHQpKT9VdChuWzFdLG5bMl0vMTAwLG5bM10vMTAwLG5bNF0pOkRzLmhhc093blByb3BlcnR5KHQpP0N0KERzW3RdKTpcInRyYW5zcGFyZW50XCI9PT10P25ldyBMdChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEN0KHQpe3JldHVybiBuZXcgTHQodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFB0KHQsbixlLHIpe3JldHVybiByPD0wJiYodD1uPWU9TmFOKSxuZXcgTHQodCxuLGUscil9ZnVuY3Rpb24genQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFdHx8KHQ9a3QodCkpLHQ/KHQ9dC5yZ2IoKSxuZXcgTHQodC5yLHQuZyx0LmIsdC5vcGFjaXR5KSk6bmV3IEx0fWZ1bmN0aW9uIFJ0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD96dCh0KTpuZXcgTHQodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEx0KHQsbixlLHIpe3RoaXMucj0rdCx0aGlzLmc9K24sdGhpcy5iPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBEdCh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj9cIjBcIjpcIlwiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBVdCh0LG4sZSxyKXtyZXR1cm4gcjw9MD90PW49ZT1OYU46ZTw9MHx8ZT49MT90PW49TmFOOm48PTAmJih0PU5hTiksbmV3IE90KHQsbixlLHIpfWZ1bmN0aW9uIHF0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgT3QpcmV0dXJuIG5ldyBPdCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBFdHx8KHQ9a3QodCkpLCF0KXJldHVybiBuZXcgT3Q7aWYodCBpbnN0YW5jZW9mIE90KXJldHVybiB0O3ZhciBuPSh0PXQucmdiKCkpLnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihuLGUsciksbz1NYXRoLm1heChuLGUsciksYT1OYU4sdT1vLWksZj0obytpKS8yO3JldHVybiB1PyhhPW49PT1vPyhlLXIpL3UrNiooZTxyKTplPT09bz8oci1uKS91KzI6KG4tZSkvdSs0LHUvPWY8LjU/bytpOjItby1pLGEqPTYwKTp1PWY+MCYmZjwxPzA6YSxuZXcgT3QoYSx1LGYsdC5vcGFjaXR5KX0odCk6bmV3IE90KHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBPdCh0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5zPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gWXQodCxuLGUpe3JldHVybiAyNTUqKHQ8NjA/bisoZS1uKSp0LzYwOnQ8MTgwP2U6dDwyNDA/bisoZS1uKSooMjQwLXQpLzYwOm4pfWZ1bmN0aW9uIEJ0KHQpe2lmKHQgaW5zdGFuY2VvZiBJdClyZXR1cm4gbmV3IEl0KHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIFd0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgSXQodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBuPXQuaCpVcztyZXR1cm4gbmV3IEl0KHQubCxNYXRoLmNvcyhuKSp0LmMsTWF0aC5zaW4obikqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIEx0fHwodD16dCh0KSk7dmFyIGUscixpPUd0KHQuciksbz1HdCh0LmcpLGE9R3QodC5iKSx1PWp0KCguMjIyNTA0NSppKy43MTY4Nzg2Km8rLjA2MDYxNjkqYSkvWXMpO3JldHVybiBpPT09byYmbz09PWE/ZT1yPXU6KGU9anQoKC40MzYwNzQ3KmkrLjM4NTA2NDkqbysuMTQzMDgwNCphKS9Pcykscj1qdCgoLjAxMzkzMjIqaSsuMDk3MTA0NSpvKy43MTQxNzMzKmEpL0JzKSksbmV3IEl0KDExNip1LTE2LDUwMCooZS11KSwyMDAqKHUtciksdC5vcGFjaXR5KX1mdW5jdGlvbiBGdCh0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/QnQodCk6bmV3IEl0KHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBJdCh0LG4sZSxyKXt0aGlzLmw9K3QsdGhpcy5hPStuLHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24ganQodCl7cmV0dXJuIHQ+SHM/TWF0aC5wb3codCwxLzMpOnQvanMrRnN9ZnVuY3Rpb24gSHQodCl7cmV0dXJuIHQ+SXM/dCp0KnQ6anMqKHQtRnMpfWZ1bmN0aW9uIFh0KHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gR3QodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gVnQodCl7aWYodCBpbnN0YW5jZW9mIFd0KXJldHVybiBuZXcgV3QodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgSXR8fCh0PUJ0KHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgV3QoTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIG49TWF0aC5hdGFuMih0LmIsdC5hKSpxcztyZXR1cm4gbmV3IFd0KG48MD9uKzM2MDpuLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uICR0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9WdCh0KTpuZXcgV3QodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFd0KHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLmM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBadCh0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFF0KXJldHVybiBuZXcgUXQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgTHR8fCh0PXp0KHQpKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT0oWnMqciskcypuLVdzKmUpLyhacyskcy1Xcyksbz1yLWksYT0oVnMqKGUtaSktWHMqbykvR3MsdT1NYXRoLnNxcnQoYSphK28qbykvKFZzKmkqKDEtaSkpLGY9dT9NYXRoLmF0YW4yKGEsbykqcXMtMTIwOk5hTjtyZXR1cm4gbmV3IFF0KGY8MD9mKzM2MDpmLHUsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgUXQodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFF0KHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBKdCh0LG4sZSxyLGkpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSpuKyg0LTYqbyszKmEpKmUrKDErMyp0KzMqby0zKmEpKnIrYSppKS82fWZ1bmN0aW9uIEt0KHQpe3ZhciBuPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWU8PTA/ZT0wOmU+PTE/KGU9MSxuLTEpOk1hdGguZmxvb3IoZSpuKSxpPXRbcl0sbz10W3IrMV0sYT1yPjA/dFtyLTFdOjIqaS1vLHU9cjxuLTE/dFtyKzJdOjIqby1pO3JldHVybiBKdCgoZS1yL24pKm4sYSxpLG8sdSl9fWZ1bmN0aW9uIHRuKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqbiksaT10WyhyK24tMSklbl0sbz10W3Ilbl0sYT10WyhyKzEpJW5dLHU9dFsocisyKSVuXTtyZXR1cm4gSnQoKGUtci9uKSpuLGksbyxhLHUpfX1mdW5jdGlvbiBubih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZW4odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQrZSpufX1mdW5jdGlvbiBybih0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9lbih0LGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6bm4oaXNOYU4odCk/bjp0KX1mdW5jdGlvbiBvbih0KXtyZXR1cm4gMT09KHQ9K3QpP2FuOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGUtbj9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9TWF0aC5wb3codCxlKSxuPU1hdGgucG93KG4sZSktdCxlPTEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKm4sZSl9fShuLGUsdCk6bm4oaXNOYU4obik/ZTpuKX19ZnVuY3Rpb24gYW4odCxuKXt2YXIgZT1uLXQ7cmV0dXJuIGU/ZW4odCxlKTpubihpc05hTih0KT9uOnQpfWZ1bmN0aW9uIHVuKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZSxyLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSksdT1uZXcgQXJyYXkoaSk7Zm9yKGU9MDtlPGk7KytlKXI9UnQobltlXSksb1tlXT1yLnJ8fDAsYVtlXT1yLmd8fDAsdVtlXT1yLmJ8fDA7cmV0dXJuIG89dChvKSxhPXQoYSksdT10KHUpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9byh0KSxyLmc9YSh0KSxyLmI9dSh0KSxyK1wiXCJ9fX1mdW5jdGlvbiBmbih0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPWRuKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKWFbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKWFbZV09b1tlXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gY24odCxuKXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxuLT10LGZ1bmN0aW9uKHIpe3JldHVybiBlLnNldFRpbWUodCtuKnIpLGV9fWZ1bmN0aW9uIHNuKHQsbil7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihlKXtyZXR1cm4gdCtuKmV9fWZ1bmN0aW9uIGxuKHQsbil7dmFyIGUscj17fSxpPXt9O251bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1uJiZcIm9iamVjdFwiPT10eXBlb2Ygbnx8KG49e30pO2ZvcihlIGluIG4pZSBpbiB0P3JbZV09ZG4odFtlXSxuW2VdKTppW2VdPW5bZV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihlIGluIHIpaVtlXT1yW2VdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBobih0LG4pe3ZhciBlLHIsaSxvPWFsLmxhc3RJbmRleD11bC5sYXN0SW5kZXg9MCxhPS0xLHU9W10sZj1bXTtmb3IodCs9XCJcIixuKz1cIlwiOyhlPWFsLmV4ZWModCkpJiYocj11bC5leGVjKG4pKTspKGk9ci5pbmRleCk+byYmKGk9bi5zbGljZShvLGkpLHVbYV0/dVthXSs9aTp1WysrYV09aSksKGU9ZVswXSk9PT0ocj1yWzBdKT91W2FdP3VbYV0rPXI6dVsrK2FdPXI6KHVbKythXT1udWxsLGYucHVzaCh7aTphLHg6c24oZSxyKX0pKSxvPXVsLmxhc3RJbmRleDtyZXR1cm4gbzxuLmxlbmd0aCYmKGk9bi5zbGljZShvKSx1W2FdP3VbYV0rPWk6dVsrK2FdPWkpLHUubGVuZ3RoPDI/ZlswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobikrXCJcIn19KGZbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShuKToobj1mLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wO3I8bjsrK3IpdVsoZT1mW3JdKS5pXT1lLngodCk7cmV0dXJuIHUuam9pbihcIlwiKX0pfWZ1bmN0aW9uIGRuKHQsbil7dmFyIGUscj10eXBlb2YgbjtyZXR1cm4gbnVsbD09bnx8XCJib29sZWFuXCI9PT1yP25uKG4pOihcIm51bWJlclwiPT09cj9zbjpcInN0cmluZ1wiPT09cj8oZT1rdChuKSk/KG49ZSxybCk6aG46biBpbnN0YW5jZW9mIGt0P3JsOm4gaW5zdGFuY2VvZiBEYXRlP2NuOkFycmF5LmlzQXJyYXkobik/Zm46XCJmdW5jdGlvblwiIT10eXBlb2Ygbi52YWx1ZU9mJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBuLnRvU3RyaW5nfHxpc05hTihuKT9sbjpzbikodCxuKX1mdW5jdGlvbiBwbih0LG4pe3JldHVybiB0PSt0LG4tPXQsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQodCtuKmUpfX1mdW5jdGlvbiB2bih0LG4sZSxyLGksbyl7dmFyIGEsdSxmO3JldHVybihhPU1hdGguc3FydCh0KnQrbipuKSkmJih0Lz1hLG4vPWEpLChmPXQqZStuKnIpJiYoZS09dCpmLHItPW4qZiksKHU9TWF0aC5zcXJ0KGUqZStyKnIpKSYmKGUvPXUsci89dSxmLz11KSx0KnI8biplJiYodD0tdCxuPS1uLGY9LWYsYT0tYSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIobix0KSpmbCxza2V3WDpNYXRoLmF0YW4oZikqZmwsc2NhbGVYOmEsc2NhbGVZOnV9fWZ1bmN0aW9uIGduKHQsbixlLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrXCIgXCI6XCJcIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgdT1bXSxmPVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQscixpLG8sYSx1KXtpZih0IT09aXx8ciE9PW8pe3ZhciBmPWEucHVzaChcInRyYW5zbGF0ZShcIixudWxsLG4sbnVsbCxlKTt1LnB1c2goe2k6Zi00LHg6c24odCxpKX0se2k6Zi0yLHg6c24ocixvKX0pfWVsc2UoaXx8bykmJmEucHVzaChcInRyYW5zbGF0ZShcIitpK24rbytlKX0oby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHUsZiksZnVuY3Rpb24odCxuLGUsbyl7dCE9PW4/KHQtbj4xODA/bis9MzYwOm4tdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTplLnB1c2goaShlKStcInJvdGF0ZShcIixudWxsLHIpLTIseDpzbih0LG4pfSkpOm4mJmUucHVzaChpKGUpK1wicm90YXRlKFwiK24rcil9KG8ucm90YXRlLGEucm90YXRlLHUsZiksZnVuY3Rpb24odCxuLGUsbyl7dCE9PW4/by5wdXNoKHtpOmUucHVzaChpKGUpK1wic2tld1goXCIsbnVsbCxyKS0yLHg6c24odCxuKX0pOm4mJmUucHVzaChpKGUpK1wic2tld1goXCIrbityKX0oby5za2V3WCxhLnNrZXdYLHUsZiksZnVuY3Rpb24odCxuLGUscixvLGEpe2lmKHQhPT1lfHxuIT09cil7dmFyIHU9by5wdXNoKGkobykrXCJzY2FsZShcIixudWxsLFwiLFwiLG51bGwsXCIpXCIpO2EucHVzaCh7aTp1LTQseDpzbih0LGUpfSx7aTp1LTIseDpzbihuLHIpfSl9ZWxzZSAxPT09ZSYmMT09PXJ8fG8ucHVzaChpKG8pK1wic2NhbGUoXCIrZStcIixcIityK1wiKVwiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVksdSxmKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxyPWYubGVuZ3RoOysrZTxyOyl1WyhuPWZbZV0pLmldPW4ueCh0KTtyZXR1cm4gdS5qb2luKFwiXCIpfX19ZnVuY3Rpb24geW4odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gX24odCxuKXt2YXIgZSxyLGk9dFswXSxvPXRbMV0sYT10WzJdLHU9blswXSxmPW5bMV0sYz1uWzJdLHM9dS1pLGw9Zi1vLGg9cypzK2wqbDtpZihoPHZsKXI9TWF0aC5sb2coYy9hKS9obCxlPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqcyxvK3QqbCxhKk1hdGguZXhwKGhsKnQqcildfTtlbHNle3ZhciBkPU1hdGguc3FydChoKSxwPShjKmMtYSphK3BsKmgpLygyKmEqZGwqZCksdj0oYypjLWEqYS1wbCpoKS8oMipjKmRsKmQpLGc9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSx5PU1hdGgubG9nKE1hdGguc3FydCh2KnYrMSktdik7cj0oeS1nKS9obCxlPWZ1bmN0aW9uKHQpe3ZhciBuPXQqcixlPXluKGcpLHU9YS8oZGwqZCkqKGUqZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfShobCpuK2cpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krdSpzLG8rdSpsLGEqZS95bihobCpuK2cpXX19cmV0dXJuIGUuZHVyYXRpb249MWUzKnIsZX1mdW5jdGlvbiBibih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPXF0KG4pKS5oLChlPXF0KGUpKS5oKSxpPWFuKG4ucyxlLnMpLG89YW4obi5sLGUubCksYT1hbihuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4ucz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rXCJcIn19fWZ1bmN0aW9uIG1uKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49JHQobikpLmgsKGU9JHQoZSkpLmgpLGk9YW4obi5jLGUuYyksbz1hbihuLmwsZS5sKSxhPWFuKG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5jPWkodCksbi5sPW8odCksbi5vcGFjaXR5PWEodCksbitcIlwifX19ZnVuY3Rpb24geG4odCl7cmV0dXJuIGZ1bmN0aW9uIG4oZSl7ZnVuY3Rpb24gcihuLHIpe3ZhciBpPXQoKG49WnQobikpLmgsKHI9WnQocikpLmgpLG89YW4obi5zLHIucyksYT1hbihuLmwsci5sKSx1PWFuKG4ub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPWkodCksbi5zPW8odCksbi5sPWEoTWF0aC5wb3codCxlKSksbi5vcGFjaXR5PXUodCksbitcIlwifX1yZXR1cm4gZT0rZSxyLmdhbW1hPW4scn0oMSl9ZnVuY3Rpb24gd24oKXtyZXR1cm4gU2x8fChDbChNbiksU2w9a2wubm93KCkrRWwpfWZ1bmN0aW9uIE1uKCl7U2w9MH1mdW5jdGlvbiBBbigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gVG4odCxuLGUpe3ZhciByPW5ldyBBbjtyZXR1cm4gci5yZXN0YXJ0KHQsbixlKSxyfWZ1bmN0aW9uIE5uKCl7d24oKSwrK3dsO2Zvcih2YXIgdCxuPW5sO247KSh0PVNsLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS13bH1mdW5jdGlvbiBTbigpe1NsPShObD1rbC5ub3coKSkrRWwsd2w9TWw9MDt0cnl7Tm4oKX1maW5hbGx5e3dsPTAsZnVuY3Rpb24oKXt2YXIgdCxuLGU9bmwscj0xLzA7Zm9yKDtlOyllLl9jYWxsPyhyPmUuX3RpbWUmJihyPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihuPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PW46bmw9bik7ZWw9dCxrbihyKX0oKSxTbD0wfX1mdW5jdGlvbiBFbigpe3ZhciB0PWtsLm5vdygpLG49dC1ObDtuPlRsJiYoRWwtPW4sTmw9dCl9ZnVuY3Rpb24ga24odCl7aWYoIXdsKXtNbCYmKE1sPWNsZWFyVGltZW91dChNbCkpO3QtU2w+MjQ/KHQ8MS8wJiYoTWw9c2V0VGltZW91dChTbix0LWtsLm5vdygpLUVsKSksQWwmJihBbD1jbGVhckludGVydmFsKEFsKSkpOihBbHx8KE5sPWtsLm5vdygpLEFsPXNldEludGVydmFsKEVuLFRsKSksd2w9MSxDbChTbikpfX1mdW5jdGlvbiBDbih0LG4sZSl7dmFyIHI9bmV3IEFuO3JldHVybiBuPW51bGw9PW4/MDorbixyLnJlc3RhcnQoZnVuY3Rpb24oZSl7ci5zdG9wKCksdChlK24pfSxuLGUpLHJ9ZnVuY3Rpb24gUG4odCxuLGUscixpLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKGUgaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTsoZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIoZil7dmFyIGMscyxsLGg7aWYoZS5zdGF0ZSE9PUxsKXJldHVybiBvKCk7Zm9yKGMgaW4gdSlpZigoaD11W2NdKS5uYW1lPT09ZS5uYW1lKXtpZihoLnN0YXRlPT09VWwpcmV0dXJuIENuKHIpO2guc3RhdGU9PT1xbD8oaC5zdGF0ZT1ZbCxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoXCJpbnRlcnJ1cHRcIix0LHQuX19kYXRhX18saC5pbmRleCxoLmdyb3VwKSxkZWxldGUgdVtjXSk6K2M8biYmKGguc3RhdGU9WWwsaC50aW1lci5zdG9wKCksZGVsZXRlIHVbY10pfWlmKENuKGZ1bmN0aW9uKCl7ZS5zdGF0ZT09PVVsJiYoZS5zdGF0ZT1xbCxlLnRpbWVyLnJlc3RhcnQoaSxlLmRlbGF5LGUudGltZSksaShmKSl9KSxlLnN0YXRlPURsLGUub24uY2FsbChcInN0YXJ0XCIsdCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksZS5zdGF0ZT09PURsKXtmb3IoZS5zdGF0ZT1VbCxhPW5ldyBBcnJheShsPWUudHdlZW4ubGVuZ3RoKSxjPTAscz0tMTtjPGw7KytjKShoPWUudHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihhWysrc109aCk7YS5sZW5ndGg9cysxfX1mdW5jdGlvbiBpKG4pe2Zvcih2YXIgcj1uPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxuL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobyksZS5zdGF0ZT1PbCwxKSxpPS0xLHU9YS5sZW5ndGg7KytpPHU7KWFbaV0uY2FsbChudWxsLHIpO2Uuc3RhdGU9PT1PbCYmKGUub24uY2FsbChcImVuZFwiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLG8oKSl9ZnVuY3Rpb24gbygpe2Uuc3RhdGU9WWwsZS50aW1lci5zdG9wKCksZGVsZXRlIHVbbl07Zm9yKHZhciByIGluIHUpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn12YXIgYSx1PXQuX190cmFuc2l0aW9uO3Vbbl09ZSxlLnRpbWVyPVRuKGZ1bmN0aW9uKHQpe2Uuc3RhdGU9TGwsZS50aW1lci5yZXN0YXJ0KHIsZS5kZWxheSxlLnRpbWUpLGUuZGVsYXk8PXQmJnIodC1lLmRlbGF5KX0sMCxlLnRpbWUpfSkodCxlLHtuYW1lOm4saW5kZXg6cixncm91cDppLG9uOlBsLHR3ZWVuOnpsLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOlJsfSl9ZnVuY3Rpb24gem4odCxuKXt2YXIgZT1Mbih0LG4pO2lmKGUuc3RhdGU+UmwpdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIFJuKHQsbil7dmFyIGU9TG4odCxuKTtpZihlLnN0YXRlPkRsKXRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gTG4odCxuKXt2YXIgZT10Ll9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbbl0pKXRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO3JldHVybiBlfWZ1bmN0aW9uIERuKHQsbil7dmFyIGUscixpLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtuPW51bGw9PW4/bnVsbDpuK1wiXCI7Zm9yKGkgaW4gbykoZT1vW2ldKS5uYW1lPT09bj8ocj1lLnN0YXRlPkRsJiZlLnN0YXRlPE9sLGUuc3RhdGU9WWwsZS50aW1lci5zdG9wKCksciYmZS5vbi5jYWxsKFwiaW50ZXJydXB0XCIsdCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksZGVsZXRlIG9baV0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBVbih0LG4sZSl7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PVJuKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbbl09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih0KXtyZXR1cm4gTG4odCxyKS52YWx1ZVtuXX19ZnVuY3Rpb24gcW4odCxuKXt2YXIgZTtyZXR1cm4oXCJudW1iZXJcIj09dHlwZW9mIG4/c246biBpbnN0YW5jZW9mIGt0P3JsOihlPWt0KG4pKT8obj1lLHJsKTpobikodCxuKX1mdW5jdGlvbiBPbih0LG4sZSxyKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPW4sdGhpcy5fbmFtZT1lLHRoaXMuX2lkPXJ9ZnVuY3Rpb24gWW4odCl7cmV0dXJuIGZ0KCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiBCbigpe3JldHVybisrRmx9ZnVuY3Rpb24gRm4odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gSW4odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9ZnVuY3Rpb24gam4odCl7cmV0dXJuKDEtTWF0aC5jb3MoR2wqdCkpLzJ9ZnVuY3Rpb24gSG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiBYbih0KXtyZXR1cm4oKHQqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtdCp0KTpNYXRoLnNxcnQoMS0odC09MikqdCkrMSkvMn1mdW5jdGlvbiBHbih0KXtyZXR1cm4odD0rdCk8JGw/cmgqdCp0OnQ8Wmw/cmgqKHQtPVdsKSp0K1FsOnQ8S2w/cmgqKHQtPUpsKSp0K3RoOnJoKih0LT1uaCkqdCtlaH1mdW5jdGlvbiBWbih0LG4pe2Zvcih2YXIgZTshKGU9dC5fX3RyYW5zaXRpb24pfHwhKGU9ZVtuXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBsaC50aW1lPXduKCksbGg7cmV0dXJuIGV9ZnVuY3Rpb24gJG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFduKCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBabigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFFuKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIEpuKCl7cmV0dXJuIXQuZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIEtuKCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuW1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIHRlKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gbmUodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBlZShuKXtmdW5jdGlvbiBlKHQpe3ZhciBlPXQucHJvcGVydHkoXCJfX2JydXNoXCIsdSkuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIikuZGF0YShbUW4oXCJvdmVybGF5XCIpXSk7ZS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsXCJvdmVybGF5XCIpLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLmF0dHIoXCJjdXJzb3JcIixtaC5vdmVybGF5KS5tZXJnZShlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGUodGhpcykuZXh0ZW50O2N0KHRoaXMpLmF0dHIoXCJ4XCIsdFswXVswXSkuYXR0cihcInlcIix0WzBdWzFdKS5hdHRyKFwid2lkdGhcIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoXCJoZWlnaHRcIix0WzFdWzFdLXRbMF1bMV0pfSksdC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpLmRhdGEoW1FuKFwic2VsZWN0aW9uXCIpXSkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwic2VsZWN0aW9uXCIpLmF0dHIoXCJjdXJzb3JcIixtaC5zZWxlY3Rpb24pLmF0dHIoXCJmaWxsXCIsXCIjNzc3XCIpLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwuMykuYXR0cihcInN0cm9rZVwiLFwiI2ZmZlwiKS5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJjcmlzcEVkZ2VzXCIpO3ZhciBpPXQuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJoYW5kbGUgaGFuZGxlLS1cIit0LnR5cGV9KS5hdHRyKFwiY3Vyc29yXCIsZnVuY3Rpb24odCl7cmV0dXJuIG1oW3QudHlwZV19KSx0LmVhY2gocikuYXR0cihcImZpbGxcIixcIm5vbmVcIikuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIikuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIixcInJnYmEoMCwwLDAsMClcIikub24oXCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaFwiLGEpfWZ1bmN0aW9uIHIoKXt2YXIgdD1jdCh0aGlzKSxuPXRlKHRoaXMpLnNlbGVjdGlvbjtuPyh0LnNlbGVjdEFsbChcIi5zZWxlY3Rpb25cIikuc3R5bGUoXCJkaXNwbGF5XCIsbnVsbCkuYXR0cihcInhcIixuWzBdWzBdKS5hdHRyKFwieVwiLG5bMF1bMV0pLmF0dHIoXCJ3aWR0aFwiLG5bMV1bMF0tblswXVswXSkuYXR0cihcImhlaWdodFwiLG5bMV1bMV0tblswXVsxXSksdC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpLnN0eWxlKFwiZGlzcGxheVwiLG51bGwpLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuXCJlXCI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9uWzFdWzBdLWgvMjpuWzBdWzBdLWgvMn0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuXCJzXCI9PT10LnR5cGVbMF0/blsxXVsxXS1oLzI6blswXVsxXS1oLzJ9KS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm5cIm5cIj09PXQudHlwZXx8XCJzXCI9PT10LnR5cGU/blsxXVswXS1uWzBdWzBdK2g6aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm5cImVcIj09PXQudHlwZXx8XCJ3XCI9PT10LnR5cGU/blsxXVsxXS1uWzBdWzFdK2g6aH0pKTp0LnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKS5zdHlsZShcImRpc3BsYXlcIixcIm5vbmVcIikuYXR0cihcInhcIixudWxsKS5hdHRyKFwieVwiLG51bGwpLmF0dHIoXCJ3aWR0aFwiLG51bGwpLmF0dHIoXCJoZWlnaHRcIixudWxsKX1mdW5jdGlvbiBpKHQsbil7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgbyh0LG4pfWZ1bmN0aW9uIG8odCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiBlKCl7dmFyIHQ9cHQodyk7IUx8fG18fHh8fChNYXRoLmFicyh0WzBdLVVbMF0pPk1hdGguYWJzKHRbMV0tVVsxXSk/eD0hMDptPSEwKSxVPXQsYj0hMCxabigpLG8oKX1mdW5jdGlvbiBvKCl7dmFyIHQ7c3dpdGNoKHk9VVswXS1EWzBdLF89VVsxXS1EWzFdLEEpe2Nhc2UgcGg6Y2FzZSBkaDpUJiYoeT1NYXRoLm1heChDLXUsTWF0aC5taW4oei1kLHkpKSxjPXUreSxwPWQreSksTiYmKF89TWF0aC5tYXgoUC1sLE1hdGgubWluKFItdixfKSksaD1sK18sZz12K18pO2JyZWFrO2Nhc2Ugdmg6VDwwPyh5PU1hdGgubWF4KEMtdSxNYXRoLm1pbih6LXUseSkpLGM9dSt5LHA9ZCk6VD4wJiYoeT1NYXRoLm1heChDLWQsTWF0aC5taW4oei1kLHkpKSxjPXUscD1kK3kpLE48MD8oXz1NYXRoLm1heChQLWwsTWF0aC5taW4oUi1sLF8pKSxoPWwrXyxnPXYpOk4+MCYmKF89TWF0aC5tYXgoUC12LE1hdGgubWluKFItdixfKSksaD1sLGc9ditfKTticmVhaztjYXNlIGdoOlQmJihjPU1hdGgubWF4KEMsTWF0aC5taW4oeix1LXkqVCkpLHA9TWF0aC5tYXgoQyxNYXRoLm1pbih6LGQreSpUKSkpLE4mJihoPU1hdGgubWF4KFAsTWF0aC5taW4oUixsLV8qTikpLGc9TWF0aC5tYXgoUCxNYXRoLm1pbihSLHYrXypOKSkpfXA8YyYmKFQqPS0xLHQ9dSx1PWQsZD10LHQ9YyxjPXAscD10LE0gaW4geGgmJlkuYXR0cihcImN1cnNvclwiLG1oW009eGhbTV1dKSksZzxoJiYoTio9LTEsdD1sLGw9dix2PXQsdD1oLGg9ZyxnPXQsTSBpbiB3aCYmWS5hdHRyKFwiY3Vyc29yXCIsbWhbTT13aFtNXV0pKSxTLnNlbGVjdGlvbiYmKGs9Uy5zZWxlY3Rpb24pLG0mJihjPWtbMF1bMF0scD1rWzFdWzBdKSx4JiYoaD1rWzBdWzFdLGc9a1sxXVsxXSksa1swXVswXT09PWMmJmtbMF1bMV09PT1oJiZrWzFdWzBdPT09cCYma1sxXVsxXT09PWd8fChTLnNlbGVjdGlvbj1bW2MsaF0sW3AsZ11dLHIuY2FsbCh3KSxxLmJydXNoKCkpfWZ1bmN0aW9uIGEoKXtpZihXbigpLHQuZXZlbnQudG91Y2hlcyl7aWYodC5ldmVudC50b3VjaGVzLmxlbmd0aClyZXR1cm47ZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0sNTAwKSxPLm9uKFwidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsbnVsbCl9ZWxzZSBidCh0LmV2ZW50LnZpZXcsYiksQi5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIixudWxsKTtPLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLFkuYXR0cihcImN1cnNvclwiLG1oLm92ZXJsYXkpLFMuc2VsZWN0aW9uJiYoaz1TLnNlbGVjdGlvbiksbmUoaykmJihTLnNlbGVjdGlvbj1udWxsLHIuY2FsbCh3KSkscS5lbmQoKX1pZih0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIFpuKCl9ZWxzZSBpZihmKXJldHVybjtpZihzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHUsYyxsLGgsZCxwLHYsZyx5LF8sYixtLHgsdz10aGlzLE09dC5ldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxBPVwic2VsZWN0aW9uXCI9PT0odC5ldmVudC5tZXRhS2V5P009XCJvdmVybGF5XCI6TSk/ZGg6dC5ldmVudC5hbHRLZXk/Z2g6dmgsVD1uPT09X2g/bnVsbDpNaFtNXSxOPW49PT15aD9udWxsOkFoW01dLFM9dGUodyksRT1TLmV4dGVudCxrPVMuc2VsZWN0aW9uLEM9RVswXVswXSxQPUVbMF1bMV0sej1FWzFdWzBdLFI9RVsxXVsxXSxMPVQmJk4mJnQuZXZlbnQuc2hpZnRLZXksRD1wdCh3KSxVPUQscT1pKHcsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO1wib3ZlcmxheVwiPT09TT9TLnNlbGVjdGlvbj1rPVtbdT1uPT09X2g/QzpEWzBdLGw9bj09PXloP1A6RFsxXV0sW2Q9bj09PV9oP3o6dSx2PW49PT15aD9SOmxdXToodT1rWzBdWzBdLGw9a1swXVsxXSxkPWtbMV1bMF0sdj1rWzFdWzFdKSxjPXUsaD1sLHA9ZCxnPXY7dmFyIE89Y3QodykuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLFk9Ty5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKS5hdHRyKFwiY3Vyc29yXCIsbWhbTV0pO2lmKHQuZXZlbnQudG91Y2hlcylPLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsZSwhMCkub24oXCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLGEsITApO2Vsc2V7dmFyIEI9Y3QodC5ldmVudC52aWV3KS5vbihcImtleWRvd24uYnJ1c2hcIixmdW5jdGlvbigpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6TD1UJiZOO2JyZWFrO2Nhc2UgMTg6QT09PXZoJiYoVCYmKGQ9cC15KlQsdT1jK3kqVCksTiYmKHY9Zy1fKk4sbD1oK18qTiksQT1naCxvKCkpO2JyZWFrO2Nhc2UgMzI6QSE9PXZoJiZBIT09Z2h8fChUPDA/ZD1wLXk6VD4wJiYodT1jLXkpLE48MD92PWctXzpOPjAmJihsPWgtXyksQT1waCxZLmF0dHIoXCJjdXJzb3JcIixtaC5zZWxlY3Rpb24pLG8oKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59Wm4oKX0sITApLm9uKFwia2V5dXAuYnJ1c2hcIixmdW5jdGlvbigpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6TCYmKG09eD1MPSExLG8oKSk7YnJlYWs7Y2FzZSAxODpBPT09Z2gmJihUPDA/ZD1wOlQ+MCYmKHU9YyksTjwwP3Y9ZzpOPjAmJihsPWgpLEE9dmgsbygpKTticmVhaztjYXNlIDMyOkE9PT1waCYmKHQuZXZlbnQuYWx0S2V5PyhUJiYoZD1wLXkqVCx1PWMreSpUKSxOJiYodj1nLV8qTixsPWgrXypOKSxBPWdoKTooVDwwP2Q9cDpUPjAmJih1PWMpLE48MD92PWc6Tj4wJiYobD1oKSxBPXZoKSxZLmF0dHIoXCJjdXJzb3JcIixtaFtNXSksbygpKTticmVhaztkZWZhdWx0OnJldHVybn1abigpfSwhMCkub24oXCJtb3VzZW1vdmUuYnJ1c2hcIixlLCEwKS5vbihcIm1vdXNldXAuYnJ1c2hcIixhLCEwKTtfdCh0LmV2ZW50LnZpZXcpfVduKCksRG4odyksci5jYWxsKHcpLHEuc3RhcnQoKX19ZnVuY3Rpb24gdSgpe3ZhciB0PXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gdC5leHRlbnQ9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5kaW09bix0fXZhciBmLGM9S24scz1KbixsPU4oZSxcInN0YXJ0XCIsXCJicnVzaFwiLFwiZW5kXCIpLGg9NjtyZXR1cm4gZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7dC5zZWxlY3Rpb24/dC5vbihcInN0YXJ0LmJydXNoXCIsZnVuY3Rpb24oKXtpKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbihcImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2hcIixmdW5jdGlvbigpe2kodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oXCJicnVzaFwiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXthLnNlbGVjdGlvbj0xPT09dCYmbmUoYyk/bnVsbDpzKHQpLHIuY2FsbChvKSx1LmJydXNoKCl9dmFyIG89dGhpcyxhPW8uX19icnVzaCx1PWkobyxhcmd1bWVudHMpLGY9YS5zZWxlY3Rpb24sYz1uLmlucHV0KFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSxhLmV4dGVudCkscz1kbihmLGMpO3JldHVybiBmJiZjP3Q6dCgxKX0pOnQuZWFjaChmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxvPXRoaXMuX19icnVzaCxhPW4uaW5wdXQoXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsdCk6ZSxvLmV4dGVudCksdT1pKHRoaXMsdCkuYmVmb3Jlc3RhcnQoKTtEbih0aGlzKSxvLnNlbGVjdGlvbj1udWxsPT1hfHxuZShhKT9udWxsOmEsci5jYWxsKHRoaXMpLHUuc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9LG8ucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZyYmKHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KFwic3RhcnRcIikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdChcImJydXNoXCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoXCJlbmRcIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7b3QobmV3IGZ1bmN0aW9uKHQsbixlKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMuc2VsZWN0aW9uPWV9KGUsdCxuLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLGwuYXBwbHksbCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxlLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6JG4oW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGUpOmN9LGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDokbighIXQpLGUpOnN9LGUuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxlKTpofSxlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9bC5vbi5hcHBseShsLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1sP2U6dH0sZX1mdW5jdGlvbiByZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gaWUoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz1cIlwifWZ1bmN0aW9uIG9lKCl7cmV0dXJuIG5ldyBpZX1mdW5jdGlvbiBhZSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gdWUodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGZlKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBjZSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHNlKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIGxlKCl7fWZ1bmN0aW9uIGhlKHQsbil7dmFyIGU9bmV3IGxlO2lmKHQgaW5zdGFuY2VvZiBsZSl0LmVhY2goZnVuY3Rpb24odCxuKXtlLnNldChuLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLG89dC5sZW5ndGg7aWYobnVsbD09bilmb3IoOysraTxvOyllLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8bzspZS5zZXQobihyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpZS5zZXQoYSx0W2FdKTtyZXR1cm4gZX1mdW5jdGlvbiBkZSgpe3JldHVybnt9fWZ1bmN0aW9uIHBlKHQsbixlKXt0W25dPWV9ZnVuY3Rpb24gdmUoKXtyZXR1cm4gaGUoKX1mdW5jdGlvbiBnZSh0LG4sZSl7dC5zZXQobixlKX1mdW5jdGlvbiB5ZSgpe31mdW5jdGlvbiBfZSh0LG4pe3ZhciBlPW5ldyB5ZTtpZih0IGluc3RhbmNlb2YgeWUpdC5lYWNoKGZ1bmN0aW9uKHQpe2UuYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgcj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PW4pZm9yKDsrK3I8aTspZS5hZGQodFtyXSk7ZWxzZSBmb3IoOysrcjxpOyllLmFkZChuKHRbcl0scix0KSl9cmV0dXJuIGV9ZnVuY3Rpb24gYmUodCxuKXtyZXR1cm4gdC1ufWZ1bmN0aW9uIG1lKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiB4ZSh0LG4pe2Zvcih2YXIgZSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKGU9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9blswXSxyPW5bMV0saT0tMSxvPTAsYT10Lmxlbmd0aCx1PWEtMTtvPGE7dT1vKyspe3ZhciBmPXRbb10sYz1mWzBdLHM9ZlsxXSxsPXRbdV0saD1sWzBdLGQ9bFsxXTtpZihmdW5jdGlvbih0LG4sZSl7dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oblswXS10WzBdKSooZVsxXS10WzFdKT09KGVbMF0tdFswXSkqKG5bMV0tdFsxXSl9KHQsbixlKSYmZnVuY3Rpb24odCxuLGUpe3JldHVybiB0PD1uJiZuPD1lfHxlPD1uJiZuPD10fSh0W3I9Kyh0WzBdPT09blswXSldLGVbcl0sbltyXSl9KGYsbCxuKSlyZXR1cm4gMDtzPnIhPWQ+ciYmZTwoaC1jKSooci1zKS8oZC1zKStjJiYoaT0taSl9cmV0dXJuIGl9KHQsbltyXSkpcmV0dXJuIGU7cmV0dXJuIDB9ZnVuY3Rpb24gd2UoKXt9ZnVuY3Rpb24gTWUoKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWEodCk7aWYoQXJyYXkuaXNBcnJheShlKSllPWUuc2xpY2UoKS5zb3J0KGJlKTtlbHNle3ZhciByPXUodCksaT1yWzBdLG89clsxXTtlPWQoaSxvLGUpLGU9cyhNYXRoLmZsb29yKGkvZSkqZSxNYXRoLmZsb29yKG8vZSkqZSxlKX1yZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4odCxlKX0pfWZ1bmN0aW9uIG4odCxuKXt2YXIgcj1bXSxhPVtdO3JldHVybiBmdW5jdGlvbih0LG4scil7ZnVuY3Rpb24gYSh0KXt2YXIgbixpLG89W3RbMF1bMF0rdSx0WzBdWzFdK2ZdLGE9W3RbMV1bMF0rdSx0WzFdWzFdK2ZdLGM9ZShvKSxzPWUoYSk7KG49cFtjXSk/KGk9ZFtzXSk/KGRlbGV0ZSBwW24uZW5kXSxkZWxldGUgZFtpLnN0YXJ0XSxuPT09aT8obi5yaW5nLnB1c2goYSkscihuLnJpbmcpKTpkW24uc3RhcnRdPXBbaS5lbmRdPXtzdGFydDpuLnN0YXJ0LGVuZDppLmVuZCxyaW5nOm4ucmluZy5jb25jYXQoaS5yaW5nKX0pOihkZWxldGUgcFtuLmVuZF0sbi5yaW5nLnB1c2goYSkscFtuLmVuZD1zXT1uKToobj1kW3NdKT8oaT1wW2NdKT8oZGVsZXRlIGRbbi5zdGFydF0sZGVsZXRlIHBbaS5lbmRdLG49PT1pPyhuLnJpbmcucHVzaChhKSxyKG4ucmluZykpOmRbaS5zdGFydF09cFtuLmVuZF09e3N0YXJ0Omkuc3RhcnQsZW5kOm4uZW5kLHJpbmc6aS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBkW24uc3RhcnRdLG4ucmluZy51bnNoaWZ0KG8pLGRbbi5zdGFydD1jXT1uKTpkW2NdPXBbc109e3N0YXJ0OmMsZW5kOnMscmluZzpbbyxhXX19dmFyIHUsZixjLHMsbCxoLGQ9bmV3IEFycmF5LHA9bmV3IEFycmF5O3U9Zj0tMSxzPXRbMF0+PW4scWhbczw8MV0uZm9yRWFjaChhKTtmb3IoOysrdTxpLTE7KWM9cyxzPXRbdSsxXT49bixxaFtjfHM8PDFdLmZvckVhY2goYSk7cWhbczw8MF0uZm9yRWFjaChhKTtmb3IoOysrZjxvLTE7KXtmb3IodT0tMSxzPXRbZippK2ldPj1uLGw9dFtmKmldPj1uLHFoW3M8PDF8bDw8Ml0uZm9yRWFjaChhKTsrK3U8aS0xOyljPXMscz10W2YqaStpK3UrMV0+PW4saD1sLGw9dFtmKmkrdSsxXT49bixxaFtjfHM8PDF8bDw8MnxoPDwzXS5mb3JFYWNoKGEpO3FoW3N8bDw8M10uZm9yRWFjaChhKX11PS0xLGw9dFtmKmldPj1uLHFoW2w8PDJdLmZvckVhY2goYSk7Zm9yKDsrK3U8aS0xOyloPWwsbD10W2YqaSt1KzFdPj1uLHFoW2w8PDJ8aDw8M10uZm9yRWFjaChhKTtxaFtsPDwzXS5mb3JFYWNoKGEpfSh0LG4sZnVuY3Rpb24oZSl7ZihlLHQsbiksZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aCxyPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrbjxlOylyKz10W24tMV1bMV0qdFtuXVswXS10W24tMV1bMF0qdFtuXVsxXTtyZXR1cm4gcn0oZSk+MD9yLnB1c2goW2VdKTphLnB1c2goZSl9KSxhLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9MCxpPXIubGVuZ3RoO2U8aTsrK2UpaWYoLTEhPT14ZSgobj1yW2VdKVswXSx0KSlyZXR1cm4gdm9pZCBuLnB1c2godCl9KSx7dHlwZTpcIk11bHRpUG9seWdvblwiLHZhbHVlOm4sY29vcmRpbmF0ZXM6cn19ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMip0WzBdK3RbMV0qKGkrMSkqNH1mdW5jdGlvbiByKHQsbixlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsYT10WzBdLHU9dFsxXSxmPTB8YSxjPTB8dSxzPW5bYyppK2ZdO2E+MCYmYTxpJiZmPT09YSYmKHI9bltjKmkrZi0xXSx0WzBdPWErKGUtcikvKHMtciktLjUpLHU+MCYmdTxvJiZjPT09dSYmKHI9blsoYy0xKSppK2ZdLHRbMV09dSsoZS1yKS8ocy1yKS0uNSl9KX12YXIgaT0xLG89MSxhPXAsZj1yO3JldHVybiB0LmNvbnRvdXI9bix0LnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2ksb107dmFyIGU9TWF0aC5jZWlsKG5bMF0pLHI9TWF0aC5jZWlsKG5bMV0pO2lmKCEoZT4wJiZyPjApKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2l6ZVwiKTtyZXR1cm4gaT1lLG89cix0fSx0LnRocmVzaG9sZHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOkFycmF5LmlzQXJyYXkobik/bWUoVWguY2FsbChuKSk6bWUobiksdCk6YX0sdC5zbW9vdGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9bj9yOndlLHQpOmY9PT1yfSx0fWZ1bmN0aW9uIEFlKHQsbixlKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LG89MSsoZTw8MSksYT0wO2E8aTsrK2EpZm9yKHZhciB1PTAsZj0wO3U8citlOysrdSl1PHImJihmKz10LmRhdGFbdSthKnJdKSx1Pj1lJiYodT49byYmKGYtPXQuZGF0YVt1LW8rYSpyXSksbi5kYXRhW3UtZSthKnJdPWYvTWF0aC5taW4odSsxLHItMStvLXUsbykpfWZ1bmN0aW9uIFRlKHQsbixlKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LG89MSsoZTw8MSksYT0wO2E8cjsrK2EpZm9yKHZhciB1PTAsZj0wO3U8aStlOysrdSl1PGkmJihmKz10LmRhdGFbYSt1KnJdKSx1Pj1lJiYodT49byYmKGYtPXQuZGF0YVthKyh1LW8pKnJdKSxuLmRhdGFbYSsodS1lKSpyXT1mL01hdGgubWluKHUrMSxpLTErby11LG8pKX1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBFZSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwiZFwiLFwicmV0dXJuIHtcIit0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KStcIjogZFtcIituK1wiXVwifSkuam9pbihcIixcIikrXCJ9XCIpfWZ1bmN0aW9uIGtlKHQpe2Z1bmN0aW9uIG4odCxuKXtmdW5jdGlvbiBlKCl7aWYoYylyZXR1cm4gWWg7aWYocylyZXR1cm4gcz0hMSxPaDt2YXIgbixlLHI9dTtpZih0LmNoYXJDb2RlQXQocik9PT1CaCl7Zm9yKDt1Kys8YSYmdC5jaGFyQ29kZUF0KHUpIT09Qmh8fHQuY2hhckNvZGVBdCgrK3UpPT09Qmg7KTtyZXR1cm4obj11KT49YT9jPSEwOihlPXQuY2hhckNvZGVBdCh1KyspKT09PUZoP3M9ITA6ZT09PUloJiYocz0hMCx0LmNoYXJDb2RlQXQodSk9PT1GaCYmKyt1KSx0LnNsaWNlKHIrMSxuLTEpLnJlcGxhY2UoL1wiXCIvZywnXCInKX1mb3IoO3U8YTspe2lmKChlPXQuY2hhckNvZGVBdChuPXUrKykpPT09Rmgpcz0hMDtlbHNlIGlmKGU9PT1JaClzPSEwLHQuY2hhckNvZGVBdCh1KT09PUZoJiYrK3U7ZWxzZSBpZihlIT09byljb250aW51ZTtyZXR1cm4gdC5zbGljZShyLG4pfXJldHVybiBjPSEwLHQuc2xpY2UocixhKX12YXIgcixpPVtdLGE9dC5sZW5ndGgsdT0wLGY9MCxjPWE8PTAscz0hMTtmb3IodC5jaGFyQ29kZUF0KGEtMSk9PT1GaCYmLS1hLHQuY2hhckNvZGVBdChhLTEpPT09SWgmJi0tYTsocj1lKCkpIT09WWg7KXtmb3IodmFyIGw9W107ciE9PU9oJiZyIT09WWg7KWwucHVzaChyKSxyPWUoKTtuJiZudWxsPT0obD1uKGwsZisrKSl8fGkucHVzaChsKX1yZXR1cm4gaX1mdW5jdGlvbiBlKG4pe3JldHVybiBuLm1hcChyKS5qb2luKHQpfWZ1bmN0aW9uIHIodCl7cmV0dXJuIG51bGw9PXQ/XCJcIjppLnRlc3QodCs9XCJcIik/J1wiJyt0LnJlcGxhY2UoL1wiL2csJ1wiXCInKSsnXCInOnR9dmFyIGk9bmV3IFJlZ0V4cCgnW1wiJyt0K1wiXFxuXFxyXVwiKSxvPXQuY2hhckNvZGVBdCgwKTtyZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgcixpLG89bih0LGZ1bmN0aW9uKHQsbil7aWYocilyZXR1cm4gcih0LG4tMSk7aT10LHI9ZT9mdW5jdGlvbih0LG4pe3ZhciBlPUVlKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBuKGUociksaSx0KX19KHQsZSk6RWUodCl9KTtyZXR1cm4gby5jb2x1bW5zPWl8fFtdLG99LHBhcnNlUm93czpuLGZvcm1hdDpmdW5jdGlvbihuLGUpe3JldHVybiBudWxsPT1lJiYoZT1mdW5jdGlvbih0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGU9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIHIgaW4gdClyIGluIG58fGUucHVzaChuW3JdPXIpfSksZX0obikpLFtlLm1hcChyKS5qb2luKHQpXS5jb25jYXQobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByKG5bdF0pfSkuam9pbih0KX0pKS5qb2luKFwiXFxuXCIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChlKS5qb2luKFwiXFxuXCIpfX19ZnVuY3Rpb24gQ2UodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzK1wiIFwiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYmxvYigpfWZ1bmN0aW9uIFBlKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cytcIiBcIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gemUodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzK1wiIFwiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfWZ1bmN0aW9uIFJlKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbih6ZSl9ZnVuY3Rpb24gTGUodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUsZT12b2lkIDApLFJlKG4sZSkudGhlbihmdW5jdGlvbihuKXtyZXR1cm4gdChuLHIpfSl9fWZ1bmN0aW9uIERlKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cytcIiBcIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gUmUobixlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcobix0KX0pfX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gT2UoKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gWWUodCxuLGUscil7aWYoaXNOYU4obil8fGlzTmFOKGUpKXJldHVybiB0O3ZhciBpLG8sYSx1LGYsYyxzLGwsaCxkPXQuX3Jvb3QscD17ZGF0YTpyfSx2PXQuX3gwLGc9dC5feTAseT10Ll94MSxfPXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigoYz1uPj0obz0odit5KS8yKSk/dj1vOnk9bywocz1lPj0oYT0oZytfKS8yKSk/Zz1hOl89YSxpPWQsIShkPWRbbD1zPDwxfGNdKSlyZXR1cm4gaVtsXT1wLHQ7aWYodT0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxmPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLG49PT11JiZlPT09ZilyZXR1cm4gcC5uZXh0PWQsaT9pW2xdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbbF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPW4+PShvPSh2K3kpLzIpKT92PW86eT1vLChzPWU+PShhPShnK18pLzIpKT9nPWE6Xz1hfXdoaWxlKChsPXM8PDF8Yyk9PShoPShmPj1hKTw8MXx1Pj1vKSk7cmV0dXJuIGlbaF09ZCxpW2xdPXAsdH1mdW5jdGlvbiBCZSh0LG4sZSxyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9bix0aGlzLnkwPWUsdGhpcy54MT1yLHRoaXMueTE9aX1mdW5jdGlvbiBGZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBJZSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBqZSh0LG4sZSl7dmFyIHI9bmV3IEhlKG51bGw9PW4/RmU6bixudWxsPT1lP0llOmUsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIEhlKHQsbixlLHIsaSxvKXt0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gwPWUsdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gWGUodCl7Zm9yKHZhciBuPXtkYXRhOnQuZGF0YX0sZT1uO3Q9dC5uZXh0OyllPWUubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBufWZ1bmN0aW9uIEdlKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBWZSh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gJGUodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gV2UodCxuKXt2YXIgZT10LmdldChuKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIituKTtyZXR1cm4gZX1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFFlKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gSmUodCxuKXtpZigoZT0odD1uP3QudG9FeHBvbmVudGlhbChuLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxyPXQuc2xpY2UoMCxlKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShlKzEpXX1mdW5jdGlvbiBLZSh0KXtyZXR1cm4odD1KZShNYXRoLmFicyh0KSkpP3RbMV06TmFOfWZ1bmN0aW9uIHRyKHQpe3JldHVybiBuZXcgbnIodCl9ZnVuY3Rpb24gbnIodCl7aWYoIShuPXVkLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIit0KTt2YXIgbjt0aGlzLmZpbGw9blsxXXx8XCIgXCIsdGhpcy5hbGlnbj1uWzJdfHxcIj5cIix0aGlzLnNpZ249blszXXx8XCItXCIsdGhpcy5zeW1ib2w9bls0XXx8XCJcIix0aGlzLnplcm89ISFuWzVdLHRoaXMud2lkdGg9bls2XSYmK25bNl0sdGhpcy5jb21tYT0hIW5bN10sdGhpcy5wcmVjaXNpb249bls4XSYmK25bOF0uc2xpY2UoMSksdGhpcy50cmltPSEhbls5XSx0aGlzLnR5cGU9blsxMF18fFwiXCJ9ZnVuY3Rpb24gZXIodCxuKXt2YXIgZT1KZSh0LG4pO2lmKCFlKXJldHVybiB0K1wiXCI7dmFyIHI9ZVswXSxpPWVbMV07cmV0dXJuIGk8MD9cIjAuXCIrbmV3IEFycmF5KC1pKS5qb2luKFwiMFwiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKStcIi5cIityLnNsaWNlKGkrMSk6cituZXcgQXJyYXkoaS1yLmxlbmd0aCsyKS5qb2luKFwiMFwiKX1mdW5jdGlvbiBycih0KXtyZXR1cm4gdH1mdW5jdGlvbiBpcih0KXtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIG4odCl7dmFyIG4scixhLHM9eSx4PV87aWYoXCJjXCI9PT1nKXg9Yih0KSt4LHQ9XCJcIjtlbHNle3ZhciB3PSh0PSt0KTwwO2lmKHQ9YihNYXRoLmFicyh0KSxwKSx2JiYodD1mdW5jdGlvbih0KXt0OmZvcih2YXIgbixlPXQubGVuZ3RoLHI9MSxpPS0xO3I8ZTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2VcIi5cIjppPW49cjticmVhaztjYXNlXCIwXCI6MD09PWkmJihpPXIpLG49cjticmVhaztkZWZhdWx0OmlmKGk+MCl7aWYoISt0W3JdKWJyZWFrIHQ7aT0wfX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKG4rMSk6dH0odCkpLHcmJjA9PSt0JiYodz0hMSkscz0odz9cIihcIj09PWM/YzpcIi1cIjpcIi1cIj09PWN8fFwiKFwiPT09Yz9cIlwiOmMpK3MseD0oXCJzXCI9PT1nP2xkWzgrZmQvM106XCJcIikreCsodyYmXCIoXCI9PT1jP1wiKVwiOlwiXCIpLG0pZm9yKG49LTEscj10Lmxlbmd0aDsrK248cjspaWYoNDg+KGE9dC5jaGFyQ29kZUF0KG4pKXx8YT41Nyl7eD0oNDY9PT1hP2krdC5zbGljZShuKzEpOnQuc2xpY2UobikpK3gsdD10LnNsaWNlKDAsbik7YnJlYWt9fWQmJiFsJiYodD1lKHQsMS8wKSk7dmFyIE09cy5sZW5ndGgrdC5sZW5ndGgreC5sZW5ndGgsQT1NPGg/bmV3IEFycmF5KGgtTSsxKS5qb2luKHUpOlwiXCI7c3dpdGNoKGQmJmwmJih0PWUoQSt0LEEubGVuZ3RoP2gteC5sZW5ndGg6MS8wKSxBPVwiXCIpLGYpe2Nhc2VcIjxcIjp0PXMrdCt4K0E7YnJlYWs7Y2FzZVwiPVwiOnQ9cytBK3QreDticmVhaztjYXNlXCJeXCI6dD1BLnNsaWNlKDAsTT1BLmxlbmd0aD4+MSkrcyt0K3grQS5zbGljZShNKTticmVhaztkZWZhdWx0OnQ9QStzK3QreH1yZXR1cm4gbyh0KX12YXIgdT0odD10cih0KSkuZmlsbCxmPXQuYWxpZ24sYz10LnNpZ24scz10LnN5bWJvbCxsPXQuemVybyxoPXQud2lkdGgsZD10LmNvbW1hLHA9dC5wcmVjaXNpb24sdj10LnRyaW0sZz10LnR5cGU7XCJuXCI9PT1nPyhkPSEwLGc9XCJnXCIpOnNkW2ddfHwobnVsbD09cCYmKHA9MTIpLHY9ITAsZz1cImdcIiksKGx8fFwiMFwiPT09dSYmXCI9XCI9PT1mKSYmKGw9ITAsdT1cIjBcIixmPVwiPVwiKTt2YXIgeT1cIiRcIj09PXM/clswXTpcIiNcIj09PXMmJi9bYm94WF0vLnRlc3QoZyk/XCIwXCIrZy50b0xvd2VyQ2FzZSgpOlwiXCIsXz1cIiRcIj09PXM/clsxXTovWyVwXS8udGVzdChnKT9hOlwiXCIsYj1zZFtnXSxtPS9bZGVmZ3BycyVdLy50ZXN0KGcpO3JldHVybiBwPW51bGw9PXA/NjovW2dwcnNdLy50ZXN0KGcpP01hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCtcIlwifSxufXZhciBlPXQuZ3JvdXBpbmcmJnQudGhvdXNhbmRzP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7Zm9yKHZhciBpPWUubGVuZ3RoLG89W10sYT0wLHU9dFswXSxmPTA7aT4wJiZ1PjAmJihmK3UrMT5yJiYodT1NYXRoLm1heCgxLHItZikpLG8ucHVzaChlLnN1YnN0cmluZyhpLT11LGkrdSkpLCEoKGYrPXUrMSk+cikpOyl1PXRbYT0oYSsxKSV0Lmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4obil9fSh0Lmdyb3VwaW5nLHQudGhvdXNhbmRzKTpycixyPXQuY3VycmVuY3ksaT10LmRlY2ltYWwsbz10Lm51bWVyYWxzP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0WytuXX0pfX0odC5udW1lcmFscyk6cnIsYT10LnBlcmNlbnR8fFwiJVwiO3JldHVybntmb3JtYXQ6bixmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxlKXt2YXIgcj1uKCh0PXRyKHQpLHQudHlwZT1cImZcIix0KSksaT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihLZShlKS8zKSkpLG89TWF0aC5wb3coMTAsLWkpLGE9bGRbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcihvKnQpK2F9fX19ZnVuY3Rpb24gb3Iobil7cmV0dXJuIGNkPWlyKG4pLHQuZm9ybWF0PWNkLmZvcm1hdCx0LmZvcm1hdFByZWZpeD1jZC5mb3JtYXRQcmVmaXgsY2R9ZnVuY3Rpb24gYXIodCl7cmV0dXJuIE1hdGgubWF4KDAsLUtlKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24gdXIodCxuKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihLZShuKS8zKSkpLUtlKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24gZnIodCxuKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxuPU1hdGguYWJzKG4pLXQsTWF0aC5tYXgoMCxLZShuKS1LZSh0KSkrMX1mdW5jdGlvbiBjcigpe3JldHVybiBuZXcgc3J9ZnVuY3Rpb24gc3IoKXt0aGlzLnJlc2V0KCl9ZnVuY3Rpb24gbHIodCxuLGUpe3ZhciByPXQucz1uK2UsaT1yLW4sbz1yLWk7dC50PW4tbysoZS1pKX1mdW5jdGlvbiBocih0KXtyZXR1cm4gdD4xPzA6dDwtMT9HZDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gZHIodCl7cmV0dXJuIHQ+MT9WZDp0PC0xPy1WZDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gcHIodCl7cmV0dXJuKHQ9YXAodC8yKSkqdH1mdW5jdGlvbiB2cigpe31mdW5jdGlvbiBncih0LG4pe3QmJmxwLmhhc093blByb3BlcnR5KHQudHlwZSkmJmxwW3QudHlwZV0odCxuKX1mdW5jdGlvbiB5cih0LG4sZSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoLWU7Zm9yKG4ubGluZVN0YXJ0KCk7KytpPG87KXI9dFtpXSxuLnBvaW50KHJbMF0sclsxXSxyWzJdKTtuLmxpbmVFbmQoKX1mdW5jdGlvbiBfcih0LG4pe3ZhciBlPS0xLHI9dC5sZW5ndGg7Zm9yKG4ucG9seWdvblN0YXJ0KCk7KytlPHI7KXlyKHRbZV0sbiwxKTtuLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBicih0LG4pe3QmJnNwLmhhc093blByb3BlcnR5KHQudHlwZSk/c3BbdC50eXBlXSh0LG4pOmdyKHQsbil9ZnVuY3Rpb24gbXIoKXtwcC5wb2ludD13cn1mdW5jdGlvbiB4cigpe01yKGhkLGRkKX1mdW5jdGlvbiB3cih0LG4pe3BwLnBvaW50PU1yLGhkPXQsZGQ9bixwZD10Kj1RZCx2ZD1ucChuPShuKj1RZCkvMiskZCksZ2Q9YXAobil9ZnVuY3Rpb24gTXIodCxuKXtuPShuKj1RZCkvMiskZDt2YXIgZT0odCo9UWQpLXBkLHI9ZT49MD8xOi0xLGk9ciplLG89bnAobiksYT1hcChuKSx1PWdkKmEsZj12ZCpvK3UqbnAoaSksYz11KnIqYXAoaSk7aHAuYWRkKHRwKGMsZikpLHBkPXQsdmQ9byxnZD1hfWZ1bmN0aW9uIEFyKHQpe3JldHVyblt0cCh0WzFdLHRbMF0pLGRyKHRbMl0pXX1mdW5jdGlvbiBUcih0KXt2YXIgbj10WzBdLGU9dFsxXSxyPW5wKGUpO3JldHVybltyKm5wKG4pLHIqYXAobiksYXAoZSldfWZ1bmN0aW9uIE5yKHQsbil7cmV0dXJuIHRbMF0qblswXSt0WzFdKm5bMV0rdFsyXSpuWzJdfWZ1bmN0aW9uIFNyKHQsbil7cmV0dXJuW3RbMV0qblsyXS10WzJdKm5bMV0sdFsyXSpuWzBdLXRbMF0qblsyXSx0WzBdKm5bMV0tdFsxXSpuWzBdXX1mdW5jdGlvbiBFcih0LG4pe3RbMF0rPW5bMF0sdFsxXSs9blsxXSx0WzJdKz1uWzJdfWZ1bmN0aW9uIGtyKHQsbil7cmV0dXJuW3RbMF0qbix0WzFdKm4sdFsyXSpuXX1mdW5jdGlvbiBDcih0KXt2YXIgbj1mcCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89bix0WzFdLz1uLHRbMl0vPW59ZnVuY3Rpb24gUHIodCxuKXtUZC5wdXNoKE5kPVt5ZD10LGJkPXRdKSxuPF9kJiYoX2Q9biksbj5tZCYmKG1kPW4pfWZ1bmN0aW9uIHpyKHQsbil7dmFyIGU9VHIoW3QqUWQsbipRZF0pO2lmKEFkKXt2YXIgcj1TcihBZCxlKSxpPVNyKFtyWzFdLC1yWzBdLDBdLHIpO0NyKGkpLGk9QXIoaSk7dmFyIG8sYT10LXhkLHU9YT4wPzE6LTEsZj1pWzBdKlpkKnUsYz1KZChhKT4xODA7Y14odSp4ZDxmJiZmPHUqdCk/KG89aVsxXSpaZCk+bWQmJihtZD1vKTooZj0oZiszNjApJTM2MC0xODAsY14odSp4ZDxmJiZmPHUqdCk/KG89LWlbMV0qWmQpPF9kJiYoX2Q9byk6KG48X2QmJihfZD1uKSxuPm1kJiYobWQ9bikpKSxjP3Q8eGQ/T3IoeWQsdCk+T3IoeWQsYmQpJiYoYmQ9dCk6T3IodCxiZCk+T3IoeWQsYmQpJiYoeWQ9dCk6YmQ+PXlkPyh0PHlkJiYoeWQ9dCksdD5iZCYmKGJkPXQpKTp0PnhkP09yKHlkLHQpPk9yKHlkLGJkKSYmKGJkPXQpOk9yKHQsYmQpPk9yKHlkLGJkKSYmKHlkPXQpfWVsc2UgVGQucHVzaChOZD1beWQ9dCxiZD10XSk7bjxfZCYmKF9kPW4pLG4+bWQmJihtZD1uKSxBZD1lLHhkPXR9ZnVuY3Rpb24gUnIoKXtncC5wb2ludD16cn1mdW5jdGlvbiBMcigpe05kWzBdPXlkLE5kWzFdPWJkLGdwLnBvaW50PVByLEFkPW51bGx9ZnVuY3Rpb24gRHIodCxuKXtpZihBZCl7dmFyIGU9dC14ZDt2cC5hZGQoSmQoZSk+MTgwP2UrKGU+MD8zNjA6LTM2MCk6ZSl9ZWxzZSB3ZD10LE1kPW47cHAucG9pbnQodCxuKSx6cih0LG4pfWZ1bmN0aW9uIFVyKCl7cHAubGluZVN0YXJ0KCl9ZnVuY3Rpb24gcXIoKXtEcih3ZCxNZCkscHAubGluZUVuZCgpLEpkKHZwKT5IZCYmKHlkPS0oYmQ9MTgwKSksTmRbMF09eWQsTmRbMV09YmQsQWQ9bnVsbH1mdW5jdGlvbiBPcih0LG4pe3JldHVybihuLT10KTwwP24rMzYwOm59ZnVuY3Rpb24gWXIodCxuKXtyZXR1cm4gdFswXS1uWzBdfWZ1bmN0aW9uIEJyKHQsbil7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn1mdW5jdGlvbiBGcih0LG4pe3QqPVFkO3ZhciBlPW5wKG4qPVFkKTtJcihlKm5wKHQpLGUqYXAodCksYXAobikpfWZ1bmN0aW9uIElyKHQsbixlKXtrZCs9KHQta2QpLysrU2QsQ2QrPShuLUNkKS9TZCxQZCs9KGUtUGQpL1NkfWZ1bmN0aW9uIGpyKCl7eXAucG9pbnQ9SHJ9ZnVuY3Rpb24gSHIodCxuKXt0Kj1RZDt2YXIgZT1ucChuKj1RZCk7QmQ9ZSpucCh0KSxGZD1lKmFwKHQpLElkPWFwKG4pLHlwLnBvaW50PVhyLElyKEJkLEZkLElkKX1mdW5jdGlvbiBYcih0LG4pe3QqPVFkO3ZhciBlPW5wKG4qPVFkKSxyPWUqbnAodCksaT1lKmFwKHQpLG89YXAobiksYT10cChmcCgoYT1GZCpvLUlkKmkpKmErKGE9SWQqci1CZCpvKSphKyhhPUJkKmktRmQqcikqYSksQmQqcitGZCppK0lkKm8pO0VkKz1hLHpkKz1hKihCZCsoQmQ9cikpLFJkKz1hKihGZCsoRmQ9aSkpLExkKz1hKihJZCsoSWQ9bykpLElyKEJkLEZkLElkKX1mdW5jdGlvbiBHcigpe3lwLnBvaW50PUZyfWZ1bmN0aW9uIFZyKCl7eXAucG9pbnQ9V3J9ZnVuY3Rpb24gJHIoKXtacihPZCxZZCkseXAucG9pbnQ9RnJ9ZnVuY3Rpb24gV3IodCxuKXtPZD10LFlkPW4sdCo9UWQsbio9UWQseXAucG9pbnQ9WnI7dmFyIGU9bnAobik7QmQ9ZSpucCh0KSxGZD1lKmFwKHQpLElkPWFwKG4pLElyKEJkLEZkLElkKX1mdW5jdGlvbiBacih0LG4pe3QqPVFkO3ZhciBlPW5wKG4qPVFkKSxyPWUqbnAodCksaT1lKmFwKHQpLG89YXAobiksYT1GZCpvLUlkKmksdT1JZCpyLUJkKm8sZj1CZCppLUZkKnIsYz1mcChhKmErdSp1K2YqZikscz1kcihjKSxsPWMmJi1zL2M7RGQrPWwqYSxVZCs9bCp1LHFkKz1sKmYsRWQrPXMsemQrPXMqKEJkKyhCZD1yKSksUmQrPXMqKEZkKyhGZD1pKSksTGQrPXMqKElkKyhJZD1vKSksSXIoQmQsRmQsSWQpfWZ1bmN0aW9uIFFyKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBKcih0LG4pe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT10KGUsciksbihlWzBdLGVbMV0pfXJldHVybiB0LmludmVydCYmbi5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybihlPW4uaW52ZXJ0KGUscikpJiZ0LmludmVydChlWzBdLGVbMV0pfSksZX1mdW5jdGlvbiBLcih0LG4pe3JldHVyblt0PkdkP3QtV2Q6dDwtR2Q/dCtXZDp0LG5dfWZ1bmN0aW9uIHRpKHQsbixlKXtyZXR1cm4odCU9V2QpP258fGU/SnIoZWkodCkscmkobixlKSk6ZWkodCk6bnx8ZT9yaShuLGUpOktyfWZ1bmN0aW9uIG5pKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiBuKz10LFtuPkdkP24tV2Q6bjwtR2Q/bitXZDpuLGVdfX1mdW5jdGlvbiBlaSh0KXt2YXIgbj1uaSh0KTtyZXR1cm4gbi5pbnZlcnQ9bmkoLXQpLG59ZnVuY3Rpb24gcmkodCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9bnAobiksdT1ucCh0KSplLGY9YXAodCkqZSxjPWFwKG4pLHM9YypyK3UqaTtyZXR1cm5bdHAoZipvLXMqYSx1KnItYyppKSxkcihzKm8rZiphKV19dmFyIHI9bnAodCksaT1hcCh0KSxvPW5wKG4pLGE9YXAobik7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9bnAobiksdT1ucCh0KSplLGY9YXAodCkqZSxjPWFwKG4pLHM9YypvLWYqYTtyZXR1cm5bdHAoZipvK2MqYSx1KnIrcyppKSxkcihzKnItdSppKV19LGV9ZnVuY3Rpb24gaWkodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbj10KG5bMF0qUWQsblsxXSpRZCksblswXSo9WmQsblsxXSo9WmQsbn1yZXR1cm4gdD10aSh0WzBdKlFkLHRbMV0qUWQsdC5sZW5ndGg+Mj90WzJdKlFkOjApLG4uaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBuPXQuaW52ZXJ0KG5bMF0qUWQsblsxXSpRZCksblswXSo9WmQsblsxXSo9WmQsbn0sbn1mdW5jdGlvbiBvaSh0LG4sZSxyLGksbyl7aWYoZSl7dmFyIGE9bnAobiksdT1hcChuKSxmPXIqZTtudWxsPT1pPyhpPW4rcipXZCxvPW4tZi8yKTooaT1haShhLGkpLG89YWkoYSxvKSwocj4wP2k8bzppPm8pJiYoaSs9cipXZCkpO2Zvcih2YXIgYyxzPWk7cj4wP3M+bzpzPG87cy09ZiljPUFyKFthLC11Km5wKHMpLC11KmFwKHMpXSksdC5wb2ludChjWzBdLGNbMV0pfX1mdW5jdGlvbiBhaSh0LG4peyhuPVRyKG4pKVswXS09dCxDcihuKTt2YXIgZT1ocigtblsxXSk7cmV0dXJuKCgtblsyXTwwPy1lOmUpK1dkLUhkKSVXZH1mdW5jdGlvbiB1aSgpe3ZhciB0LG49W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sZSl7dC5wdXNoKFtuLGVdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bi5wdXNoKHQ9W10pfSxsaW5lRW5kOnZyLHJlam9pbjpmdW5jdGlvbigpe24ubGVuZ3RoPjEmJm4ucHVzaChuLnBvcCgpLmNvbmNhdChuLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9bjtyZXR1cm4gbj1bXSx0PW51bGwsZX19fWZ1bmN0aW9uIGZpKHQsbil7cmV0dXJuIEpkKHRbMF0tblswXSk8SGQmJkpkKHRbMV0tblsxXSk8SGR9ZnVuY3Rpb24gY2kodCxuLGUscil7dGhpcy54PXQsdGhpcy56PW4sdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBzaSh0LG4sZSxyLGkpe3ZhciBvLGEsdT1bXSxmPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChuPXQubGVuZ3RoLTEpPD0wKSl7dmFyIG4sZSxyPXRbMF0sYT10W25dO2lmKGZpKHIsYSkpe2ZvcihpLmxpbmVTdGFydCgpLG89MDtvPG47KytvKWkucG9pbnQoKHI9dFtvXSlbMF0sclsxXSk7aS5saW5lRW5kKCl9ZWxzZSB1LnB1c2goZT1uZXcgY2kocix0LG51bGwsITApKSxmLnB1c2goZS5vPW5ldyBjaShyLG51bGwsZSwhMSkpLHUucHVzaChlPW5ldyBjaShhLHQsbnVsbCwhMSkpLGYucHVzaChlLm89bmV3IGNpKGEsbnVsbCxlLCEwKSl9fSksdS5sZW5ndGgpe2ZvcihmLnNvcnQobiksbGkodSksbGkoZiksbz0wLGE9Zi5sZW5ndGg7bzxhOysrbylmW29dLmU9ZT0hZTtmb3IodmFyIGMscyxsPXVbMF07Oyl7Zm9yKHZhciBoPWwsZD0hMDtoLnY7KWlmKChoPWgubik9PT1sKXJldHVybjtjPWgueixpLmxpbmVTdGFydCgpO2Rve2lmKGgudj1oLm8udj0hMCxoLmUpe2lmKGQpZm9yKG89MCxhPWMubGVuZ3RoO288YTsrK28paS5wb2ludCgocz1jW29dKVswXSxzWzFdKTtlbHNlIHIoaC54LGgubi54LDEsaSk7aD1oLm59ZWxzZXtpZihkKWZvcihjPWgucC56LG89Yy5sZW5ndGgtMTtvPj0wOy0tbylpLnBvaW50KChzPWNbb10pWzBdLHNbMV0pO2Vsc2UgcihoLngsaC5wLngsLTEsaSk7aD1oLnB9Yz0oaD1oLm8pLnosZD0hZH13aGlsZSghaC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGxpKHQpe2lmKG49dC5sZW5ndGgpe2Zvcih2YXIgbixlLHI9MCxpPXRbMF07KytyPG47KWkubj1lPXRbcl0sZS5wPWksaT1lO2kubj1lPXRbMF0sZS5wPWl9fWZ1bmN0aW9uIGhpKHQsbil7dmFyIGU9blswXSxyPW5bMV0saT1hcChyKSxvPVthcChlKSwtbnAoZSksMF0sYT0wLHU9MDtrcC5yZXNldCgpLDE9PT1pP3I9VmQrSGQ6LTE9PT1pJiYocj0tVmQtSGQpO2Zvcih2YXIgZj0wLGM9dC5sZW5ndGg7ZjxjOysrZilpZihsPShzPXRbZl0pLmxlbmd0aClmb3IodmFyIHMsbCxoPXNbbC0xXSxkPWhbMF0scD1oWzFdLzIrJGQsdj1hcChwKSxnPW5wKHApLHk9MDt5PGw7Kyt5LGQ9Yix2PXgsZz13LGg9Xyl7dmFyIF89c1t5XSxiPV9bMF0sbT1fWzFdLzIrJGQseD1hcChtKSx3PW5wKG0pLE09Yi1kLEE9TT49MD8xOi0xLFQ9QSpNLE49VD5HZCxTPXYqeDtpZihrcC5hZGQodHAoUypBKmFwKFQpLGcqdytTKm5wKFQpKSksYSs9Tj9NK0EqV2Q6TSxOXmQ+PWVeYj49ZSl7dmFyIEU9U3IoVHIoaCksVHIoXykpO0NyKEUpO3ZhciBrPVNyKG8sRSk7Q3Ioayk7dmFyIEM9KE5eTT49MD8tMToxKSpkcihrWzJdKTsocj5DfHxyPT09QyYmKEVbMF18fEVbMV0pKSYmKHUrPU5eTT49MD8xOi0xKX19cmV0dXJuKGE8LUhkfHxhPEhkJiZrcDwtSGQpXjEmdX1mdW5jdGlvbiBkaSh0LG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7ZnVuY3Rpb24gbyhuLGUpe3QobixlKSYmaS5wb2ludChuLGUpfWZ1bmN0aW9uIGEodCxuKXt2LnBvaW50KHQsbil9ZnVuY3Rpb24gdSgpe20ucG9pbnQ9YSx2LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGYoKXttLnBvaW50PW8sdi5saW5lRW5kKCl9ZnVuY3Rpb24gYyh0LG4pe3AucHVzaChbdCxuXSksXy5wb2ludCh0LG4pfWZ1bmN0aW9uIHMoKXtfLmxpbmVTdGFydCgpLHA9W119ZnVuY3Rpb24gbCgpe2MocFswXVswXSxwWzBdWzFdKSxfLmxpbmVFbmQoKTt2YXIgdCxuLGUscixvPV8uY2xlYW4oKSxhPWcucmVzdWx0KCksdT1hLmxlbmd0aDtpZihwLnBvcCgpLGgucHVzaChwKSxwPW51bGwsdSlpZigxJm8pe2lmKGU9YVswXSwobj1lLmxlbmd0aC0xKT4wKXtmb3IoYnx8KGkucG9seWdvblN0YXJ0KCksYj0hMCksaS5saW5lU3RhcnQoKSx0PTA7dDxuOysrdClpLnBvaW50KChyPWVbdF0pWzBdLHJbMV0pO2kubGluZUVuZCgpfX1lbHNlIHU+MSYmMiZvJiZhLnB1c2goYS5wb3AoKS5jb25jYXQoYS5zaGlmdCgpKSksZC5wdXNoKGEuZmlsdGVyKHBpKSl9dmFyIGgsZCxwLHY9bihpKSxnPXVpKCksXz1uKGcpLGI9ITEsbT17cG9pbnQ6byxsaW5lU3RhcnQ6dSxsaW5lRW5kOmYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bS5wb2ludD1jLG0ubGluZVN0YXJ0PXMsbS5saW5lRW5kPWwsZD1bXSxoPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bS5wb2ludD1vLG0ubGluZVN0YXJ0PXUsbS5saW5lRW5kPWYsZD15KGQpO3ZhciB0PWhpKGgscik7ZC5sZW5ndGg/KGJ8fChpLnBvbHlnb25TdGFydCgpLGI9ITApLHNpKGQsdmksdCxlLGkpKTp0JiYoYnx8KGkucG9seWdvblN0YXJ0KCksYj0hMCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxiJiYoaS5wb2x5Z29uRW5kKCksYj0hMSksZD1oPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07cmV0dXJuIG19fWZ1bmN0aW9uIHBpKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIHZpKHQsbil7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLVZkLUhkOlZkLXRbMV0pLSgobj1uLngpWzBdPDA/blsxXS1WZC1IZDpWZC1uWzFdKX1mdW5jdGlvbiBnaSh0KXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIG5wKHQpKm5wKG4pPml9ZnVuY3Rpb24gZSh0LG4sZSl7dmFyIHI9WzEsMCwwXSxvPVNyKFRyKHQpLFRyKG4pKSxhPU5yKG8sbyksdT1vWzBdLGY9YS11KnU7aWYoIWYpcmV0dXJuIWUmJnQ7dmFyIGM9aSphL2Yscz0taSp1L2YsbD1TcihyLG8pLGg9a3IocixjKTtFcihoLGtyKG8scykpO3ZhciBkPWwscD1OcihoLGQpLHY9TnIoZCxkKSxnPXAqcC12KihOcihoLGgpLTEpO2lmKCEoZzwwKSl7dmFyIHk9ZnAoZyksXz1rcihkLCgtcC15KS92KTtpZihFcihfLGgpLF89QXIoXyksIWUpcmV0dXJuIF87dmFyIGIsbT10WzBdLHg9blswXSx3PXRbMV0sTT1uWzFdO3g8bSYmKGI9bSxtPXgseD1iKTt2YXIgQT14LW0sVD1KZChBLUdkKTxIZDtpZighVCYmTTx3JiYoYj13LHc9TSxNPWIpLFR8fEE8SGQ/VD93K00+MF5fWzFdPChKZChfWzBdLW0pPEhkP3c6TSk6dzw9X1sxXSYmX1sxXTw9TTpBPkdkXihtPD1fWzBdJiZfWzBdPD14KSl7dmFyIE49a3IoZCwoLXAreSkvdik7cmV0dXJuIEVyKE4saCksW18sQXIoTildfX19ZnVuY3Rpb24gcihuLGUpe3ZhciByPWE/dDpHZC10LGk9MDtyZXR1cm4gbjwtcj9pfD0xOm4+ciYmKGl8PTIpLGU8LXI/aXw9NDplPnImJihpfD04KSxpfXZhciBpPW5wKHQpLG89NipRZCxhPWk+MCx1PUpkKGkpPkhkO3JldHVybiBkaShuLGZ1bmN0aW9uKHQpe3ZhciBpLG8sZixjLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9Zj0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGwsaCl7dmFyIGQscD1bbCxoXSx2PW4obCxoKSxnPWE/dj8wOnIobCxoKTp2P3IobCsobDwwP0dkOi1HZCksaCk6MDtpZighaSYmKGM9Zj12KSYmdC5saW5lU3RhcnQoKSx2IT09ZiYmKCEoZD1lKGkscCkpfHxmaShpLGQpfHxmaShwLGQpKSYmKHBbMF0rPUhkLHBbMV0rPUhkLHY9bihwWzBdLHBbMV0pKSx2IT09ZilzPTAsdj8odC5saW5lU3RhcnQoKSxkPWUocCxpKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPWUoaSxwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLGk9ZDtlbHNlIGlmKHUmJmkmJmFedil7dmFyIHk7ZyZvfHwhKHk9ZShwLGksITApKXx8KHM9MCxhPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoeVswXVswXSx5WzBdWzFdKSx0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSkpKX0hdnx8aSYmZmkoaSxwKXx8dC5wb2ludChwWzBdLHBbMV0pLGk9cCxmPXYsbz1nfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZiYmdC5saW5lRW5kKCksaT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBzfChjJiZmKTw8MX19fSxmdW5jdGlvbihuLGUscixpKXtvaShpLHQsbyxyLG4sZSl9LGE/WzAsLXRdOlstR2QsdC1HZF0pfWZ1bmN0aW9uIHlpKHQsbixlLHIpe2Z1bmN0aW9uIGkoaSxvKXtyZXR1cm4gdDw9aSYmaTw9ZSYmbjw9byYmbzw9cn1mdW5jdGlvbiBvKGksbyx1LGMpe3ZhciBzPTAsbD0wO2lmKG51bGw9PWl8fChzPWEoaSx1KSkhPT0obD1hKG8sdSkpfHxmKGksbyk8MF51PjApZG97Yy5wb2ludCgwPT09c3x8Mz09PXM/dDplLHM+MT9yOm4pfXdoaWxlKChzPShzK3UrNCklNCkhPT1sKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKHIsaSl7cmV0dXJuIEpkKHJbMF0tdCk8SGQ/aT4wPzA6MzpKZChyWzBdLWUpPEhkP2k+MD8yOjE6SmQoclsxXS1uKTxIZD9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gdSh0LG4pe3JldHVybiBmKHQueCxuLngpfWZ1bmN0aW9uIGYodCxuKXt2YXIgZT1hKHQsMSkscj1hKG4sMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT9uWzFdLXRbMV06MT09PWU/dFswXS1uWzBdOjI9PT1lP3RbMV0tblsxXTpuWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGYodCxuKXtpKHQsbikmJncucG9pbnQodCxuKX1mdW5jdGlvbiBjKG8sYSl7dmFyIHU9aShvLGEpO2lmKGwmJmgucHVzaChbbyxhXSksbSlkPW8scD1hLHY9dSxtPSExLHUmJih3LmxpbmVTdGFydCgpLHcucG9pbnQobyxhKSk7ZWxzZSBpZih1JiZiKXcucG9pbnQobyxhKTtlbHNle3ZhciBmPVtnPU1hdGgubWF4KHpwLE1hdGgubWluKFBwLGcpKSxfPU1hdGgubWF4KHpwLE1hdGgubWluKFBwLF8pKV0sYz1bbz1NYXRoLm1heCh6cCxNYXRoLm1pbihQcCxvKSksYT1NYXRoLm1heCh6cCxNYXRoLm1pbihQcCxhKSldOyFmdW5jdGlvbih0LG4sZSxyLGksbyl7dmFyIGEsdT10WzBdLGY9dFsxXSxjPTAscz0xLGw9blswXS11LGg9blsxXS1mO2lmKGE9ZS11LGx8fCEoYT4wKSl7aWYoYS89bCxsPDApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1lbHNlIGlmKGw+MCl7aWYoYT5zKXJldHVybjthPmMmJihjPWEpfWlmKGE9aS11LGx8fCEoYTwwKSl7aWYoYS89bCxsPDApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGw+MCl7aWYoYTxjKXJldHVybjthPHMmJihzPWEpfWlmKGE9ci1mLGh8fCEoYT4wKSl7aWYoYS89aCxoPDApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1lbHNlIGlmKGg+MCl7aWYoYT5zKXJldHVybjthPmMmJihjPWEpfWlmKGE9by1mLGh8fCEoYTwwKSl7aWYoYS89aCxoPDApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGg+MCl7aWYoYTxjKXJldHVybjthPHMmJihzPWEpfXJldHVybiBjPjAmJih0WzBdPXUrYypsLHRbMV09ZitjKmgpLHM8MSYmKG5bMF09dStzKmwsblsxXT1mK3MqaCksITB9fX19fShmLGMsdCxuLGUscik/dSYmKHcubGluZVN0YXJ0KCksdy5wb2ludChvLGEpLHg9ITEpOihifHwody5saW5lU3RhcnQoKSx3LnBvaW50KGZbMF0sZlsxXSkpLHcucG9pbnQoY1swXSxjWzFdKSx1fHx3LmxpbmVFbmQoKSx4PSExKX1nPW8sXz1hLGI9dX12YXIgcyxsLGgsZCxwLHYsZyxfLGIsbSx4LHc9YSxNPXVpKCksQT17cG9pbnQ6ZixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtBLnBvaW50PWMsbCYmbC5wdXNoKGg9W10pLG09ITAsYj0hMSxnPV89TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cyYmKGMoZCxwKSx2JiZiJiZNLnJlam9pbigpLHMucHVzaChNLnJlc3VsdCgpKSksQS5wb2ludD1mLGImJncubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt3PU0scz1bXSxsPVtdLHg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgbj1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLGU9MCxpPWwubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciBvLGEsdT1sW2VdLGY9MSxjPXUubGVuZ3RoLHM9dVswXSxoPXNbMF0sZD1zWzFdO2Y8YzsrK2Ypbz1oLGE9ZCxoPShzPXVbZl0pWzBdLGQ9c1sxXSxhPD1yP2Q+ciYmKGgtbykqKHItYSk+KGQtYSkqKHQtbykmJisrbjpkPD1yJiYoaC1vKSooci1hKTwoZC1hKSoodC1vKSYmLS1uO3JldHVybiBufSgpLGU9eCYmbixpPShzPXkocykpLmxlbmd0aDsoZXx8aSkmJihhLnBvbHlnb25TdGFydCgpLGUmJihhLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLGkmJnNpKHMsdSxuLG8sYSksYS5wb2x5Z29uRW5kKCkpLHc9YSxzPWw9aD1udWxsfX07cmV0dXJuIEF9fWZ1bmN0aW9uIF9pKCl7THAucG9pbnQ9THAubGluZUVuZD12cn1mdW5jdGlvbiBiaSh0LG4pe19wPXQqPVFkLGJwPWFwKG4qPVFkKSxtcD1ucChuKSxMcC5wb2ludD1taX1mdW5jdGlvbiBtaSh0LG4pe3QqPVFkO3ZhciBlPWFwKG4qPVFkKSxyPW5wKG4pLGk9SmQodC1fcCksbz1ucChpKSxhPXIqYXAoaSksdT1tcCplLWJwKnIqbyxmPWJwKmUrbXAqcipvO1JwLmFkZCh0cChmcChhKmErdSp1KSxmKSksX3A9dCxicD1lLG1wPXJ9ZnVuY3Rpb24geGkodCl7cmV0dXJuIFJwLnJlc2V0KCksYnIodCxMcCksK1JwfWZ1bmN0aW9uIHdpKHQsbil7cmV0dXJuIERwWzBdPXQsRHBbMV09bix4aShVcCl9ZnVuY3Rpb24gTWkodCxuKXtyZXR1cm4hKCF0fHwhT3AuaGFzT3duUHJvcGVydHkodC50eXBlKSkmJk9wW3QudHlwZV0odCxuKX1mdW5jdGlvbiBBaSh0LG4pe3JldHVybiAwPT09d2kodCxuKX1mdW5jdGlvbiBUaSh0LG4pe3ZhciBlPXdpKHRbMF0sdFsxXSk7cmV0dXJuIHdpKHRbMF0sbikrd2kobix0WzFdKTw9ZStIZH1mdW5jdGlvbiBOaSh0LG4pe3JldHVybiEhaGkodC5tYXAoU2kpLEVpKG4pKX1mdW5jdGlvbiBTaSh0KXtyZXR1cm4odD10Lm1hcChFaSkpLnBvcCgpLHR9ZnVuY3Rpb24gRWkodCl7cmV0dXJuW3RbMF0qUWQsdFsxXSpRZF19ZnVuY3Rpb24ga2kodCxuLGUpe3ZhciByPXModCxuLUhkLGUpLmNvbmNhdChuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG4pe3JldHVyblt0LG5dfSl9fWZ1bmN0aW9uIENpKHQsbixlKXt2YXIgcj1zKHQsbi1IZCxlKS5jb25jYXQobik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcChmdW5jdGlvbihuKXtyZXR1cm5bbix0XX0pfX1mdW5jdGlvbiBQaSgpe2Z1bmN0aW9uIHQoKXtyZXR1cm57dHlwZTpcIk11bHRpTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOm4oKX19ZnVuY3Rpb24gbigpe3JldHVybiBzKGVwKG8veSkqeSxpLHkpLm1hcChkKS5jb25jYXQocyhlcChjL18pKl8sZixfKS5tYXAocCkpLmNvbmNhdChzKGVwKHIvdikqdixlLHYpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gSmQodCV5KT5IZH0pLm1hcChsKSkuY29uY2F0KHMoZXAodS9nKSpnLGEsZykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBKZCh0JV8pPkhkfSkubWFwKGgpKX12YXIgZSxyLGksbyxhLHUsZixjLGwsaCxkLHAsdj0xMCxnPXYseT05MCxfPTM2MCxiPTIuNTtyZXR1cm4gdC5saW5lcz1mdW5jdGlvbigpe3JldHVybiBuKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOnR9fSl9LHQub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltkKG8pLmNvbmNhdChwKGYpLnNsaWNlKDEpLGQoaSkucmV2ZXJzZSgpLnNsaWNlKDEpLHAoYykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx0LmV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LmV4dGVudE1ham9yKG4pLmV4dGVudE1pbm9yKG4pOnQuZXh0ZW50TWlub3IoKX0sdC5leHRlbnRNYWpvcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rblswXVswXSxpPStuWzFdWzBdLGM9K25bMF1bMV0sZj0rblsxXVsxXSxvPmkmJihuPW8sbz1pLGk9biksYz5mJiYobj1jLGM9ZixmPW4pLHQucHJlY2lzaW9uKGIpKTpbW28sY10sW2ksZl1dfSx0LmV4dGVudE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStuWzBdWzBdLGU9K25bMV1bMF0sdT0rblswXVsxXSxhPStuWzFdWzFdLHI+ZSYmKG49cixyPWUsZT1uKSx1PmEmJihuPXUsdT1hLGE9biksdC5wcmVjaXNpb24oYikpOltbcix1XSxbZSxhXV19LHQuc3RlcD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LnN0ZXBNYWpvcihuKS5zdGVwTWlub3Iobik6dC5zdGVwTWlub3IoKX0sdC5zdGVwTWFqb3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K25bMF0sXz0rblsxXSx0KTpbeSxfXX0sdC5zdGVwTWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K25bMF0sZz0rblsxXSx0KTpbdixnXX0sdC5wcmVjaXNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K24sbD1raSh1LGEsOTApLGg9Q2kocixlLGIpLGQ9a2koYyxmLDkwKSxwPUNpKG8saSxiKSx0KTpifSx0LmV4dGVudE1ham9yKFtbLTE4MCwtOTArSGRdLFsxODAsOTAtSGRdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1IZF0sWzE4MCw4MCtIZF1dKX1mdW5jdGlvbiB6aSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBSaSgpe0ZwLnBvaW50PUxpfWZ1bmN0aW9uIExpKHQsbil7RnAucG9pbnQ9RGkseHA9TXA9dCx3cD1BcD1ufWZ1bmN0aW9uIERpKHQsbil7QnAuYWRkKEFwKnQtTXAqbiksTXA9dCxBcD1ufWZ1bmN0aW9uIFVpKCl7RGkoeHAsd3ApfWZ1bmN0aW9uIHFpKHQsbil7VnArPXQsJHArPW4sKytXcH1mdW5jdGlvbiBPaSgpe2V2LnBvaW50PVlpfWZ1bmN0aW9uIFlpKHQsbil7ZXYucG9pbnQ9QmkscWkoU3A9dCxFcD1uKX1mdW5jdGlvbiBCaSh0LG4pe3ZhciBlPXQtU3Ascj1uLUVwLGk9ZnAoZSplK3Iqcik7WnArPWkqKFNwK3QpLzIsUXArPWkqKEVwK24pLzIsSnArPWkscWkoU3A9dCxFcD1uKX1mdW5jdGlvbiBGaSgpe2V2LnBvaW50PXFpfWZ1bmN0aW9uIElpKCl7ZXYucG9pbnQ9SGl9ZnVuY3Rpb24gamkoKXtYaShUcCxOcCl9ZnVuY3Rpb24gSGkodCxuKXtldi5wb2ludD1YaSxxaShUcD1TcD10LE5wPUVwPW4pfWZ1bmN0aW9uIFhpKHQsbil7dmFyIGU9dC1TcCxyPW4tRXAsaT1mcChlKmUrcipyKTtacCs9aSooU3ArdCkvMixRcCs9aSooRXArbikvMixKcCs9aSxLcCs9KGk9RXAqdC1TcCpuKSooU3ArdCksdHYrPWkqKEVwK24pLG52Kz0zKmkscWkoU3A9dCxFcD1uKX1mdW5jdGlvbiBHaSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gVmkodCxuKXtjdi5wb2ludD0kaSxpdj1hdj10LG92PXV2PW59ZnVuY3Rpb24gJGkodCxuKXthdi09dCx1di09bixmdi5hZGQoZnAoYXYqYXYrdXYqdXYpKSxhdj10LHV2PW59ZnVuY3Rpb24gV2koKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gWmkodCl7cmV0dXJuXCJtMCxcIit0K1wiYVwiK3QrXCIsXCIrdCtcIiAwIDEsMSAwLFwiKy0yKnQrXCJhXCIrdCtcIixcIit0K1wiIDAgMSwxIDAsXCIrMip0K1wielwifWZ1bmN0aW9uIFFpKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uZXcgSmk7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdO3JldHVybiBlLnN0cmVhbT1uLGV9fWZ1bmN0aW9uIEppKCl7fWZ1bmN0aW9uIEtpKHQsbixlKXt2YXIgcj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQobnVsbCksYnIoZSx0LnN0cmVhbShHcCkpLG4oR3AucmVzdWx0KCkpLG51bGwhPXImJnQuY2xpcEV4dGVudChyKSx0fWZ1bmN0aW9uIHRvKHQsbixlKXtyZXR1cm4gS2kodCxmdW5jdGlvbihlKXt2YXIgcj1uWzFdWzBdLW5bMF1bMF0saT1uWzFdWzFdLW5bMF1bMV0sbz1NYXRoLm1pbihyLyhlWzFdWzBdLWVbMF1bMF0pLGkvKGVbMV1bMV0tZVswXVsxXSkpLGE9K25bMF1bMF0rKHItbyooZVsxXVswXStlWzBdWzBdKSkvMix1PStuWzBdWzFdKyhpLW8qKGVbMV1bMV0rZVswXVsxXSkpLzI7dC5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHVdKX0sZSl9ZnVuY3Rpb24gbm8odCxuLGUpe3JldHVybiB0byh0LFtbMCwwXSxuXSxlKX1mdW5jdGlvbiBlbyh0LG4sZSl7cmV0dXJuIEtpKHQsZnVuY3Rpb24oZSl7dmFyIHI9K24saT1yLyhlWzFdWzBdLWVbMF1bMF0pLG89KHItaSooZVsxXVswXStlWzBdWzBdKSkvMixhPS1pKmVbMF1bMV07dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFtvLGFdKX0sZSl9ZnVuY3Rpb24gcm8odCxuLGUpe3JldHVybiBLaSh0LGZ1bmN0aW9uKGUpe3ZhciByPStuLGk9ci8oZVsxXVsxXS1lWzBdWzFdKSxvPS1pKmVbMF1bMF0sYT0oci1pKihlWzFdWzFdK2VbMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbbyxhXSl9LGUpfWZ1bmN0aW9uIGlvKHQsbil7cmV0dXJuK24/ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHIsaSxvLGEsdSxmLGMscyxsLGgsZCxwLHYsZyl7dmFyIHk9Yy1yLF89cy1pLGI9eSp5K18qXztpZihiPjQqbiYmdi0tKXt2YXIgbT1hK2gseD11K2Qsdz1mK3AsTT1mcChtKm0reCp4K3cqdyksQT1kcih3Lz1NKSxUPUpkKEpkKHcpLTEpPEhkfHxKZChvLWwpPEhkPyhvK2wpLzI6dHAoeCxtKSxOPXQoVCxBKSxTPU5bMF0sRT1OWzFdLGs9Uy1yLEM9RS1pLFA9XyprLXkqQzsoUCpQL2I+bnx8SmQoKHkqaytfKkMpL2ItLjUpPi4zfHxhKmgrdSpkK2YqcDxsdikmJihlKHIsaSxvLGEsdSxmLFMsRSxULG0vPU0seC89TSx3LHYsZyksZy5wb2ludChTLEUpLGUoUyxFLFQsbSx4LHcsYyxzLGwsaCxkLHAsdixnKSl9fXJldHVybiBmdW5jdGlvbihuKXtmdW5jdGlvbiByKGUscil7ZT10KGUsciksbi5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGkoKXt5PU5hTix3LnBvaW50PW8sbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBvKHIsaSl7dmFyIG89VHIoW3IsaV0pLGE9dChyLGkpO2UoeSxfLGcsYixtLHgseT1hWzBdLF89YVsxXSxnPXIsYj1vWzBdLG09b1sxXSx4PW9bMl0sc3Ysbiksbi5wb2ludCh5LF8pfWZ1bmN0aW9uIGEoKXt3LnBvaW50PXIsbi5saW5lRW5kKCl9ZnVuY3Rpb24gdSgpe2koKSx3LnBvaW50PWYsdy5saW5lRW5kPWN9ZnVuY3Rpb24gZih0LG4pe28ocz10LG4pLGw9eSxoPV8sZD1iLHA9bSx2PXgsdy5wb2ludD1vfWZ1bmN0aW9uIGMoKXtlKHksXyxnLGIsbSx4LGwsaCxzLGQscCx2LHN2LG4pLHcubGluZUVuZD1hLGEoKX12YXIgcyxsLGgsZCxwLHYsZyx5LF8sYixtLHgsdz17cG9pbnQ6cixsaW5lU3RhcnQ6aSxsaW5lRW5kOmEscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSx3LmxpbmVTdGFydD11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksdy5saW5lU3RhcnQ9aX19O3JldHVybiB3fX0odCxuKTpmdW5jdGlvbih0KXtyZXR1cm4gUWkoe3BvaW50OmZ1bmN0aW9uKG4sZSl7bj10KG4sZSksdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX0odCl9ZnVuY3Rpb24gb28odCxuLGUscil7ZnVuY3Rpb24gaSh0LHIpe3JldHVyblt1KnQtZipyK24sZS1mKnQtdSpyXX12YXIgbz1ucChyKSxhPWFwKHIpLHU9byp0LGY9YSp0LGM9by90LHM9YS90LGw9KGEqZS1vKm4pL3QsaD0oYSpuK28qZSkvdDtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bYyp0LXMqbitsLGgtcyp0LWMqbl19LGl9ZnVuY3Rpb24gYW8odCl7cmV0dXJuIHVvKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSgpfWZ1bmN0aW9uIHVvKHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGwodFswXSpRZCx0WzFdKlFkKX1mdW5jdGlvbiBlKCl7dmFyIHQ9b28ocCwwLDAsdykuYXBwbHkobnVsbCxpKHksXykpLG49KHc/b286ZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bbit0KnIsZS10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1uKS90LChlLWkpL3RdfSxyfSkocCx2LXRbMF0sZy10WzFdLHcpO3JldHVybiBvPXRpKGIsbSx4KSxzPUpyKGksbiksbD1KcihvLHMpLGM9aW8ocyxTKSxyKCl9ZnVuY3Rpb24gcigpe3JldHVybiBoPWQ9bnVsbCxufXZhciBpLG8sYSx1LGYsYyxzLGwsaCxkLHA9MTUwLHY9NDgwLGc9MjUwLHk9MCxfPTAsYj0wLG09MCx4PTAsdz0wLE09bnVsbCxBPUNwLFQ9bnVsbCxOPXppLFM9LjU7cmV0dXJuIG4uc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBoJiZkPT09dD9oOmg9aHYoZnVuY3Rpb24odCl7cmV0dXJuIFFpKHtwb2ludDpmdW5jdGlvbihuLGUpe3ZhciByPXQobixlKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoclswXSxyWzFdKX19KX0obykoQShjKE4oZD10KSkpKSl9LG4ucHJlY2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT10LE09dm9pZCAwLHIoKSk6QX0sbi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj10LFQ9YT11PWY9bnVsbCxyKCkpOk59LG4uY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSt0P2dpKE09dCpRZCk6KE09bnVsbCxDcCkscigpKTpNKlpkfSxuLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49bnVsbD09dD8oVD1hPXU9Zj1udWxsLHppKTp5aShUPSt0WzBdWzBdLGE9K3RbMF1bMV0sdT0rdFsxXVswXSxmPSt0WzFdWzFdKSxyKCkpOm51bGw9PVQ/bnVsbDpbW1QsYV0sW3UsZl1dfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0LGUoKSk6cH0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K3RbMF0sZz0rdFsxXSxlKCkpOlt2LGddfSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10WzBdJTM2MCpRZCxfPXRbMV0lMzYwKlFkLGUoKSk6W3kqWmQsXypaZF19LG4ucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXRbMF0lMzYwKlFkLG09dFsxXSUzNjAqUWQseD10Lmxlbmd0aD4yP3RbMl0lMzYwKlFkOjAsZSgpKTpbYipaZCxtKlpkLHgqWmRdfSxuLmFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXQlMzYwKlFkLGUoKSk6dypaZH0sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9aW8ocyxTPXQqdCkscigpKTpmcChTKX0sbi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdG8obix0LGUpfSxuLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbm8obix0LGUpfSxuLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVvKG4sdCxlKX0sbi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcm8obix0LGUpfSxmdW5jdGlvbigpe3JldHVybiBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uaW52ZXJ0PWkuaW52ZXJ0JiZmdW5jdGlvbih0KXtyZXR1cm4odD1sLmludmVydCh0WzBdLHRbMV0pKSYmW3RbMF0qWmQsdFsxXSpaZF19LGUoKX19ZnVuY3Rpb24gZm8odCl7dmFyIG49MCxlPUdkLzMscj11byh0KSxpPXIobixlKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihuPXRbMF0qUWQsZT10WzFdKlFkKTpbbipaZCxlKlpkXX0saX1mdW5jdGlvbiBjbyh0LG4pe2Z1bmN0aW9uIGUodCxuKXt2YXIgZT1mcChvLTIqaSphcChuKSkvaTtyZXR1cm5bZSphcCh0Kj1pKSxhLWUqbnAodCldfXZhciByPWFwKHQpLGk9KHIrYXAobikpLzI7aWYoSmQoaSk8SGQpcmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLGFwKG4pL2VdfXZhciBlPW5wKHQpO3JldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsZHIobiplKV19LG59KHQpO3ZhciBvPTErciooMippLXIpLGE9ZnAobykvaTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1hLW47cmV0dXJuW3RwKHQsSmQoZSkpL2kqdXAoZSksZHIoKG8tKHQqdCtlKmUpKmkqaSkvKDIqaSkpXX0sZX1mdW5jdGlvbiBzbygpe3JldHVybiBmbyhjbykuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX1mdW5jdGlvbiBsbygpe3JldHVybiBzbygpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfWZ1bmN0aW9uIGhvKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPW5wKG4pLGk9bnAoZSksbz10KHIqaSk7cmV0dXJuW28qaSphcChuKSxvKmFwKGUpXX19ZnVuY3Rpb24gcG8odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9ZnAobipuK2UqZSksaT10KHIpLG89YXAoaSksYT1ucChpKTtyZXR1cm5bdHAobipvLHIqYSksZHIociYmZSpvL3IpXX19ZnVuY3Rpb24gdm8odCxuKXtyZXR1cm5bdCxpcChjcCgoVmQrbikvMikpXX1mdW5jdGlvbiBnbyh0KXtmdW5jdGlvbiBuKCl7dmFyIG49R2QqdSgpLGE9byhpaShvLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT1zP1tbYVswXS1uLGFbMV0tbl0sW2FbMF0rbixhWzFdK25dXTp0PT09dm8/W1tNYXRoLm1heChhWzBdLW4scyksZV0sW01hdGgubWluKGFbMF0rbixyKSxpXV06W1tzLE1hdGgubWF4KGFbMV0tbixlKV0sW3IsTWF0aC5taW4oYVsxXStuLGkpXV0pfXZhciBlLHIsaSxvPWFvKHQpLGE9by5jZW50ZXIsdT1vLnNjYWxlLGY9by50cmFuc2xhdGUsYz1vLmNsaXBFeHRlbnQscz1udWxsO3JldHVybiBvLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1KHQpLG4oKSk6dSgpfSxvLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZih0KSxuKCkpOmYoKX0sby5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksbigpKTphKCl9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9zPWU9cj1pPW51bGw6KHM9K3RbMF1bMF0sZT0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLG4oKSk6bnVsbD09cz9udWxsOltbcyxlXSxbcixpXV19LG4oKX1mdW5jdGlvbiB5byh0KXtyZXR1cm4gY3AoKFZkK3QpLzIpfWZ1bmN0aW9uIF9vKHQsbil7ZnVuY3Rpb24gZSh0LG4pe28+MD9uPC1WZCtIZCYmKG49LVZkK0hkKTpuPlZkLUhkJiYobj1WZC1IZCk7dmFyIGU9by9vcCh5byhuKSxpKTtyZXR1cm5bZSphcChpKnQpLG8tZSpucChpKnQpXX12YXIgcj1ucCh0KSxpPXQ9PT1uP2FwKHQpOmlwKHIvbnAobikpL2lwKHlvKG4pL3lvKHQpKSxvPXIqb3AoeW8odCksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1vLW4scj11cChpKSpmcCh0KnQrZSplKTtyZXR1cm5bdHAodCxKZChlKSkvaSp1cChlKSwyKktkKG9wKG8vciwxL2kpKS1WZF19LGUpOnZvfWZ1bmN0aW9uIGJvKHQsbil7cmV0dXJuW3Qsbl19ZnVuY3Rpb24gbW8odCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9by1uLHI9aSp0O3JldHVybltlKmFwKHIpLG8tZSpucChyKV19dmFyIHI9bnAodCksaT10PT09bj9hcCh0KTooci1ucChuKSkvKG4tdCksbz1yL2krdDtyZXR1cm4gSmQoaSk8SGQ/Ym86KGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uO3JldHVyblt0cCh0LEpkKGUpKS9pKnVwKGUpLG8tdXAoaSkqZnAodCp0K2UqZSldfSxlKX1mdW5jdGlvbiB4byh0LG4pe3ZhciBlPW5wKG4pLHI9bnAodCkqZTtyZXR1cm5bZSphcCh0KS9yLGFwKG4pL3JdfWZ1bmN0aW9uIHdvKHQsbixlLHIpe3JldHVybiAxPT09dCYmMT09PW4mJjA9PT1lJiYwPT09cj96aTpRaSh7cG9pbnQ6ZnVuY3Rpb24oaSxvKXt0aGlzLnN0cmVhbS5wb2ludChpKnQrZSxvKm4rcil9fSl9ZnVuY3Rpb24gTW8odCxuKXt2YXIgZT1uKm4scj1lKmU7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqZStyKihyKiguMDAzOTcxKmUtLjAwMTUyOSpyKS0uMDEzNzkxKSksbiooMS4wMDcyMjYrZSooLjAxNTA4NStyKiguMDI4ODc0KmUtLjA0NDQ3NS0uMDA1OTE2KnIpKSldfWZ1bmN0aW9uIEFvKHQsbil7cmV0dXJuW25wKG4pKmFwKHQpLGFwKG4pXX1mdW5jdGlvbiBUbyh0LG4pe3ZhciBlPW5wKG4pLHI9MStucCh0KSplO3JldHVybltlKmFwKHQpL3IsYXAobikvcl19ZnVuY3Rpb24gTm8odCxuKXtyZXR1cm5baXAoY3AoKFZkK24pLzIpKSwtdF19ZnVuY3Rpb24gU28odCxuKXtyZXR1cm4gdC5wYXJlbnQ9PT1uLnBhcmVudD8xOjJ9ZnVuY3Rpb24gRW8odCxuKXtyZXR1cm4gdCtuLnh9ZnVuY3Rpb24ga28odCxuKXtyZXR1cm4gTWF0aC5tYXgodCxuLnkpfWZ1bmN0aW9uIENvKHQpe3ZhciBuPTAsZT10LmNoaWxkcmVuLHI9ZSYmZS5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspbis9ZVtyXS52YWx1ZTtlbHNlIG49MTt0LnZhbHVlPW59ZnVuY3Rpb24gUG8odCxuKXt2YXIgZSxyLGksbyxhLHU9bmV3IERvKHQpLGY9K3QudmFsdWUmJih1LnZhbHVlPXQudmFsdWUpLGM9W3VdO2ZvcihudWxsPT1uJiYobj16byk7ZT1jLnBvcCgpOylpZihmJiYoZS52YWx1ZT0rZS5kYXRhLnZhbHVlKSwoaT1uKGUuZGF0YSkpJiYoYT1pLmxlbmd0aCkpZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChyPWUuY2hpbGRyZW5bb109bmV3IERvKGlbb10pKSxyLnBhcmVudD1lLHIuZGVwdGg9ZS5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUoTG8pfWZ1bmN0aW9uIHpvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIFJvKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBMbyh0KXt2YXIgbj0wO2Rve3QuaGVpZ2h0PW59d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK24pfWZ1bmN0aW9uIERvKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWZ1bmN0aW9uIFVvKHQpe2Zvcih2YXIgbixlLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dC5sZW5ndGg7cjspZT1NYXRoLnJhbmRvbSgpKnItLXwwLG49dFtyXSx0W3JdPXRbZV0sdFtlXT1uO3JldHVybiB0fSh2di5jYWxsKHQpKSkubGVuZ3RoLG89W107cjxpOyluPXRbcl0sZSYmT28oZSxuKT8rK3I6KGU9ZnVuY3Rpb24odCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybnt4OnQueCx5OnQueSxyOnQucn19KHRbMF0pO2Nhc2UgMjpyZXR1cm4gQm8odFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIEZvKHRbMF0sdFsxXSx0WzJdKX19KG89ZnVuY3Rpb24odCxuKXt2YXIgZSxyO2lmKFlvKG4sdCkpcmV0dXJuW25dO2ZvcihlPTA7ZTx0Lmxlbmd0aDsrK2UpaWYocW8obix0W2VdKSYmWW8oQm8odFtlXSxuKSx0KSlyZXR1cm5bdFtlXSxuXTtmb3IoZT0wO2U8dC5sZW5ndGgtMTsrK2UpZm9yKHI9ZSsxO3I8dC5sZW5ndGg7KytyKWlmKHFvKEJvKHRbZV0sdFtyXSksbikmJnFvKEJvKHRbZV0sbiksdFtyXSkmJnFvKEJvKHRbcl0sbiksdFtlXSkmJllvKEZvKHRbZV0sdFtyXSxuKSx0KSlyZXR1cm5bdFtlXSx0W3JdLG5dO3Rocm93IG5ldyBFcnJvcn0obyxuKSkscj0wKTtyZXR1cm4gZX1mdW5jdGlvbiBxbyh0LG4pe3ZhciBlPXQuci1uLnIscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZTwwfHxlKmU8cipyK2kqaX1mdW5jdGlvbiBPbyh0LG4pe3ZhciBlPXQuci1uLnIrMWUtNixyPW4ueC10LngsaT1uLnktdC55O3JldHVybiBlPjAmJmUqZT5yKnIraSppfWZ1bmN0aW9uIFlvKHQsbil7Zm9yKHZhciBlPTA7ZTxuLmxlbmd0aDsrK2UpaWYoIU9vKHQsbltlXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQm8odCxuKXt2YXIgZT10Lngscj10LnksaT10LnIsbz1uLngsYT1uLnksdT1uLnIsZj1vLWUsYz1hLXIscz11LWksbD1NYXRoLnNxcnQoZipmK2MqYyk7cmV0dXJue3g6KGUrbytmL2wqcykvMix5OihyK2ErYy9sKnMpLzIscjoobCtpK3UpLzJ9fWZ1bmN0aW9uIEZvKHQsbixlKXt2YXIgcj10LngsaT10Lnksbz10LnIsYT1uLngsdT1uLnksZj1uLnIsYz1lLngscz1lLnksbD1lLnIsaD1yLWEsZD1yLWMscD1pLXUsdj1pLXMsZz1mLW8seT1sLW8sXz1yKnIraSppLW8qbyxiPV8tYSphLXUqdStmKmYsbT1fLWMqYy1zKnMrbCpsLHg9ZCpwLWgqdix3PShwKm0tdipiKS8oMip4KS1yLE09KHYqZy1wKnkpL3gsQT0oZCpiLWgqbSkvKDIqeCktaSxUPShoKnktZCpnKS94LE49TSpNK1QqVC0xLFM9Mioobyt3Kk0rQSpUKSxFPXcqdytBKkEtbypvLGs9LShOPyhTK01hdGguc3FydChTKlMtNCpOKkUpKS8oMipOKTpFL1MpO3JldHVybnt4OnIrdytNKmsseTppK0ErVCprLHI6a319ZnVuY3Rpb24gSW8odCxuLGUpe3ZhciByLGksbyxhLHU9dC54LW4ueCxmPXQueS1uLnksYz11KnUrZipmO2M/KGk9bi5yK2UucixpKj1pLGE9dC5yK2UucixpPihhKj1hKT8ocj0oYythLWkpLygyKmMpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsYS9jLXIqcikpLGUueD10Lngtcip1LW8qZixlLnk9dC55LXIqZitvKnUpOihyPShjK2ktYSkvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxpL2MtcipyKSksZS54PW4ueCtyKnUtbypmLGUueT1uLnkrcipmK28qdSkpOihlLng9bi54K2UucixlLnk9bi55KX1mdW5jdGlvbiBqbyh0LG4pe3ZhciBlPXQucituLnItMWUtNixyPW4ueC10LngsaT1uLnktdC55O3JldHVybiBlPjAmJmUqZT5yKnIraSppfWZ1bmN0aW9uIEhvKHQpe3ZhciBuPXQuXyxlPXQubmV4dC5fLHI9bi5yK2UucixpPShuLngqZS5yK2UueCpuLnIpL3Isbz0obi55KmUucitlLnkqbi5yKS9yO3JldHVybiBpKmkrbypvfWZ1bmN0aW9uIFhvKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBHbyh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBuLGUscixpLG8sYSx1LGYsYyxzLGw7aWYobj10WzBdLG4ueD0wLG4ueT0wLCEoaT4xKSlyZXR1cm4gbi5yO2lmKGU9dFsxXSxuLng9LWUucixlLng9bi5yLGUueT0wLCEoaT4yKSlyZXR1cm4gbi5yK2UucjtJbyhlLG4scj10WzJdKSxuPW5ldyBYbyhuKSxlPW5ldyBYbyhlKSxyPW5ldyBYbyhyKSxuLm5leHQ9ci5wcmV2aW91cz1lLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bjt0OmZvcih1PTM7dTxpOysrdSl7SW8obi5fLGUuXyxyPXRbdV0pLHI9bmV3IFhvKHIpLGY9ZS5uZXh0LGM9bi5wcmV2aW91cyxzPWUuXy5yLGw9bi5fLnI7ZG97aWYoczw9bCl7aWYoam8oZi5fLHIuXykpe2U9ZixuLm5leHQ9ZSxlLnByZXZpb3VzPW4sLS11O2NvbnRpbnVlIHR9cys9Zi5fLnIsZj1mLm5leHR9ZWxzZXtpZihqbyhjLl8sci5fKSl7KG49YykubmV4dD1lLGUucHJldmlvdXM9biwtLXU7Y29udGludWUgdH1sKz1jLl8ucixjPWMucHJldmlvdXN9fXdoaWxlKGYhPT1jLm5leHQpO2ZvcihyLnByZXZpb3VzPW4sci5uZXh0PWUsbi5uZXh0PWUucHJldmlvdXM9ZT1yLG89SG8obik7KHI9ci5uZXh0KSE9PWU7KShhPUhvKHIpKTxvJiYobj1yLG89YSk7ZT1uLm5leHR9Zm9yKG49W2UuX10scj1lOyhyPXIubmV4dCkhPT1lOyluLnB1c2goci5fKTtmb3Iocj1VbyhuKSx1PTA7dTxpOysrdSluPXRbdV0sbi54LT1yLngsbi55LT1yLnk7cmV0dXJuIHIucn1mdW5jdGlvbiBWbyh0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiAkbygpe3JldHVybiAwfWZ1bmN0aW9uIFdvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBabyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIFFvKHQpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVufHwobi5yPU1hdGgubWF4KDAsK3Qobil8fDApKX19ZnVuY3Rpb24gSm8odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYocj1lLmNoaWxkcmVuKXt2YXIgcixpLG8sYT1yLmxlbmd0aCx1PXQoZSkqbnx8MDtpZih1KWZvcihpPTA7aTxhOysraSlyW2ldLnIrPXU7aWYobz1HbyhyKSx1KWZvcihpPTA7aTxhOysraSlyW2ldLnItPXU7ZS5yPW8rdX19fWZ1bmN0aW9uIEtvKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uLnBhcmVudDtuLnIqPXQsZSYmKG4ueD1lLngrdCpuLngsbi55PWUueSt0Km4ueSl9fWZ1bmN0aW9uIHRhKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBuYSh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxmPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3U8ZjspKG89YVt1XSkueTA9ZSxvLnkxPWksby54MD1uLG8ueDE9bis9by52YWx1ZSpjfWZ1bmN0aW9uIGVhKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHJhKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIGlhKHQsbil7cmV0dXJuIHQucGFyZW50PT09bi5wYXJlbnQ/MToyfWZ1bmN0aW9uIG9hKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/blswXTp0LnR9ZnVuY3Rpb24gYWEodCl7dmFyIG49dC5jaGlsZHJlbjtyZXR1cm4gbj9uW24ubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiB1YSh0LG4sZSl7dmFyIHI9ZS8obi5pLXQuaSk7bi5jLT1yLG4ucys9ZSx0LmMrPXIsbi56Kz1lLG4ubSs9ZX1mdW5jdGlvbiBmYSh0LG4sZSl7cmV0dXJuIHQuYS5wYXJlbnQ9PT1uLnBhcmVudD90LmE6ZX1mdW5jdGlvbiBjYSh0LG4pe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1ufWZ1bmN0aW9uIHNhKHQsbixlLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbix1PS0xLGY9YS5sZW5ndGgsYz10LnZhbHVlJiYoaS1lKS90LnZhbHVlOysrdTxmOykobz1hW3VdKS54MD1uLG8ueDE9cixvLnkwPWUsby55MT1lKz1vLnZhbHVlKmN9ZnVuY3Rpb24gbGEodCxuLGUscixpLG8pe2Zvcih2YXIgYSx1LGYsYyxzLGwsaCxkLHAsdixnLHk9W10sXz1uLmNoaWxkcmVuLGI9MCxtPTAseD1fLmxlbmd0aCx3PW4udmFsdWU7Yjx4Oyl7Zj1pLWUsYz1vLXI7ZG97cz1fW20rK10udmFsdWV9d2hpbGUoIXMmJm08eCk7Zm9yKGw9aD1zLGc9cypzKih2PU1hdGgubWF4KGMvZixmL2MpLyh3KnQpKSxwPU1hdGgubWF4KGgvZyxnL2wpO208eDsrK20pe2lmKHMrPXU9X1ttXS52YWx1ZSx1PGwmJihsPXUpLHU+aCYmKGg9dSksZz1zKnMqdiwoZD1NYXRoLm1heChoL2csZy9sKSk+cCl7cy09dTticmVha31wPWR9eS5wdXNoKGE9e3ZhbHVlOnMsZGljZTpmPGMsY2hpbGRyZW46Xy5zbGljZShiLG0pfSksYS5kaWNlP25hKGEsZSxyLGksdz9yKz1jKnMvdzpvKTpzYShhLGUscix3P2UrPWYqcy93Omksbyksdy09cyxiPW19cmV0dXJuIHl9ZnVuY3Rpb24gaGEodCxuLGUpe3JldHVybihuWzBdLXRbMF0pKihlWzFdLXRbMV0pLShuWzFdLXRbMV0pKihlWzBdLXRbMF0pfWZ1bmN0aW9uIGRhKHQsbil7cmV0dXJuIHRbMF0tblswXXx8dFsxXS1uWzFdfWZ1bmN0aW9uIHBhKHQpe2Zvcih2YXIgbj10Lmxlbmd0aCxlPVswLDFdLHI9MixpPTI7aTxuOysraSl7Zm9yKDtyPjEmJmhhKHRbZVtyLTJdXSx0W2Vbci0xXV0sdFtpXSk8PTA7KS0tcjtlW3IrK109aX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIHZhKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9ZnVuY3Rpb24gZ2EodCl7ZnVuY3Rpb24gbihuKXt2YXIgbz1uK1wiXCIsYT1lLmdldChvKTtpZighYSl7aWYoaSE9PVB2KXJldHVybiBpO2Uuc2V0KG8sYT1yLnB1c2gobikpfXJldHVybiB0WyhhLTEpJXQubGVuZ3RoXX12YXIgZT1oZSgpLHI9W10saT1QdjtyZXR1cm4gdD1udWxsPT10P1tdOkN2LmNhbGwodCksbi5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIuc2xpY2UoKTtyPVtdLGU9aGUoKTtmb3IodmFyIGksbyxhPS0xLHU9dC5sZW5ndGg7KythPHU7KWUuaGFzKG89KGk9dFthXSkrXCJcIil8fGUuc2V0KG8sci5wdXNoKGkpKTtyZXR1cm4gbn0sbi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1Ddi5jYWxsKGUpLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGdhKCkuZG9tYWluKHIpLnJhbmdlKHQpLnVua25vd24oaSl9LG59ZnVuY3Rpb24geWEoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9aSgpLmxlbmd0aCxyPWFbMV08YVswXSxoPWFbci0wXSxkPWFbMS1yXTtuPShkLWgpL01hdGgubWF4KDEsdC1mKzIqYyksdSYmKG49TWF0aC5mbG9vcihuKSksaCs9KGQtaC1uKih0LWYpKSpsLGU9biooMS1mKSx1JiYoaD1NYXRoLnJvdW5kKGgpLGU9TWF0aC5yb3VuZChlKSk7dmFyIHA9cyh0KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGgrbip0fSk7cmV0dXJuIG8ocj9wLnJldmVyc2UoKTpwKX12YXIgbixlLHI9Z2EoKS51bmtub3duKHZvaWQgMCksaT1yLmRvbWFpbixvPXIucmFuZ2UsYT1bMCwxXSx1PSExLGY9MCxjPTAsbD0uNTtyZXR1cm4gZGVsZXRlIHIudW5rbm93bixyLmRvbWFpbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShuKSx0KCkpOmkoKX0sci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK25bMF0sK25bMV1dLHQoKSk6YS5zbGljZSgpfSxyLnJhbmdlUm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGE9WytuWzBdLCtuWzFdXSx1PSEwLHQoKX0sci5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG59LHIucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ISFuLHQoKSk6dX0sci5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOmZ9LHIucGFkZGluZ0lubmVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSksdCgpKTpmfSxyLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLHQoKSk6Y30sci5hbGlnbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLHQoKSk6bH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHlhKCkuZG9tYWluKGkoKSkucmFuZ2UoYSkucm91bmQodSkucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihjKS5hbGlnbihsKX0sdCgpfWZ1bmN0aW9uIF9hKHQpe3ZhciBuPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIF9hKG4oKSl9LHR9ZnVuY3Rpb24gYmEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG1hKHQpe3JldHVybit0fWZ1bmN0aW9uIHhhKHQsbil7cmV0dXJuKG4tPXQ9K3QpP2Z1bmN0aW9uKGUpe3JldHVybihlLXQpL259OmJhKG4pfWZ1bmN0aW9uIHdhKHQsbixlLHIpe3ZhciBpPXRbMF0sbz10WzFdLGE9blswXSx1PW5bMV07cmV0dXJuIG88aT8oaT1lKG8saSksYT1yKHUsYSkpOihpPWUoaSxvKSxhPXIoYSx1KSksZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fWZ1bmN0aW9uIE1hKHQsbixlLHIpe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLG4ubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHU9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxuPW4uc2xpY2UoKS5yZXZlcnNlKCkpOysrdTxpOylvW3VdPWUodFt1XSx0W3UrMV0pLGFbdV09cihuW3VdLG5bdSsxXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPUtjKHQsbiwxLGkpLTE7cmV0dXJuIGFbZV0ob1tlXShuKSl9fWZ1bmN0aW9uIEFhKHQsbil7cmV0dXJuIG4uZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpfWZ1bmN0aW9uIFRhKHQsbil7ZnVuY3Rpb24gZSgpe3JldHVybiBpPU1hdGgubWluKHUubGVuZ3RoLGYubGVuZ3RoKT4yP01hOndhLG89YT1udWxsLHJ9ZnVuY3Rpb24gcihuKXtyZXR1cm4ob3x8KG89aSh1LGYscz9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1uPzA6dD49ZT8xOnIodCl9fX0odCk6dCxjKSkpKCtuKX12YXIgaSxvLGEsdT16dixmPXp2LGM9ZG4scz0hMTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKGF8fChhPWkoZix1LHhhLHM/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9dChuPStuLGU9K2UpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD9uOnQ+PTE/ZTpyKHQpfX19KG4pOm4pKSkoK3QpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1rdi5jYWxsKHQsbWEpLGUoKSk6dS5zbGljZSgpfSxyLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUN2LmNhbGwodCksZSgpKTpmLnNsaWNlKCl9LHIucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gZj1Ddi5jYWxsKHQpLGM9cG4sZSgpfSxyLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSEhdCxlKCkpOnN9LHIuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxlKCkpOmN9LGUoKX1mdW5jdGlvbiBOYShuKXt2YXIgZT1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbih0KXt2YXIgbj1lKCk7cmV0dXJuIGwoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbihuLGUscil7dmFyIGksbz1uWzBdLGE9bltuLmxlbmd0aC0xXSx1PWQobyxhLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChyPXRyKG51bGw9PXI/XCIsZlwiOnIpKS50eXBlKXtjYXNlXCJzXCI6dmFyIGY9TWF0aC5tYXgoTWF0aC5hYnMobyksTWF0aC5hYnMoYSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT11cih1LGYpKXx8KHIucHJlY2lzaW9uPWkpLHQuZm9ybWF0UHJlZml4KHIsZik7Y2FzZVwiXCI6Y2FzZVwiZVwiOmNhc2VcImdcIjpjYXNlXCJwXCI6Y2FzZVwiclwiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPWZyKHUsTWF0aC5tYXgoTWF0aC5hYnMobyksTWF0aC5hYnMoYSkpKSl8fChyLnByZWNpc2lvbj1pLShcImVcIj09PXIudHlwZSkpO2JyZWFrO2Nhc2VcImZcIjpjYXNlXCIlXCI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9YXIodSkpfHwoci5wcmVjaXNpb249aS0yKihcIiVcIj09PXIudHlwZSkpfXJldHVybiB0LmZvcm1hdChyKX0oZSgpLG4scil9LG4ubmljZT1mdW5jdGlvbih0KXtudWxsPT10JiYodD0xMCk7dmFyIHIsaT1lKCksbz0wLGE9aS5sZW5ndGgtMSx1PWlbb10sZj1pW2FdO3JldHVybiBmPHUmJihyPXUsdT1mLGY9cixyPW8sbz1hLGE9ciksKHI9aCh1LGYsdCkpPjA/cj1oKHU9TWF0aC5mbG9vcih1L3IpKnIsZj1NYXRoLmNlaWwoZi9yKSpyLHQpOnI8MCYmKHI9aCh1PU1hdGguY2VpbCh1KnIpL3IsZj1NYXRoLmZsb29yKGYqcikvcix0KSkscj4wPyhpW29dPU1hdGguZmxvb3IodS9yKSpyLGlbYV09TWF0aC5jZWlsKGYvcikqcixlKGkpKTpyPDAmJihpW29dPU1hdGguY2VpbCh1KnIpL3IsaVthXT1NYXRoLmZsb29yKGYqcikvcixlKGkpKSxufSxufWZ1bmN0aW9uIFNhKCl7dmFyIHQ9VGEoeGEsc24pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQWEodCxTYSgpKX0sTmEodCl9ZnVuY3Rpb24gRWEoKXtmdW5jdGlvbiB0KHQpe3JldHVybit0fXZhciBuPVswLDFdO3JldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49a3YuY2FsbChlLG1hKSx0KTpuLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBFYSgpLmRvbWFpbihuKX0sTmEodCl9ZnVuY3Rpb24ga2EodCxuKXt2YXIgZSxyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLG89dFtyXSxhPXRbaV07cmV0dXJuIGE8byYmKGU9cixyPWksaT1lLGU9byxvPWEsYT1lKSx0W3JdPW4uZmxvb3IobyksdFtpXT1uLmNlaWwoYSksdH1mdW5jdGlvbiBDYSh0LG4pe3JldHVybihuPU1hdGgubG9nKG4vdCkpP2Z1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlL3QpL259OmJhKG4pfWZ1bmN0aW9uIFBhKHQsbil7cmV0dXJuIHQ8MD9mdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5wb3coLW4sZSkqTWF0aC5wb3coLXQsMS1lKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KG4sZSkqTWF0aC5wb3codCwxLWUpfX1mdW5jdGlvbiB6YSh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KyhcIjFlXCIrdCk6dDwwPzA6dH1mdW5jdGlvbiBSYSh0KXtyZXR1cm4gMTA9PT10P3phOnQ9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQsbil9fWZ1bmN0aW9uIExhKHQpe3JldHVybiB0PT09TWF0aC5FP01hdGgubG9nOjEwPT09dCYmTWF0aC5sb2cxMHx8Mj09PXQmJk1hdGgubG9nMnx8KHQ9TWF0aC5sb2codCksZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubG9nKG4pL3R9KX1mdW5jdGlvbiBEYSh0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuLXQoLW4pfX1mdW5jdGlvbiBVYSgpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbz1MYShpKSxhPVJhKGkpLHIoKVswXTwwJiYobz1EYShvKSxhPURhKGEpKSxlfXZhciBlPVRhKENhLFBhKS5kb21haW4oWzEsMTBdKSxyPWUuZG9tYWluLGk9MTAsbz1MYSgxMCksYT1SYSgxMCk7cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxuKCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLG4oKSk6cigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuLGU9cigpLHU9ZVswXSxmPWVbZS5sZW5ndGgtMV07KG49Zjx1KSYmKGQ9dSx1PWYsZj1kKTt2YXIgYyxzLGgsZD1vKHUpLHA9byhmKSx2PW51bGw9PXQ/MTA6K3QsZz1bXTtpZighKGklMSkmJnAtZDx2KXtpZihkPU1hdGgucm91bmQoZCktMSxwPU1hdGgucm91bmQocCkrMSx1PjApe2Zvcig7ZDxwOysrZClmb3Iocz0xLGM9YShkKTtzPGk7KytzKWlmKCEoKGg9YypzKTx1KSl7aWYoaD5mKWJyZWFrO2cucHVzaChoKX19ZWxzZSBmb3IoO2Q8cDsrK2QpZm9yKHM9aS0xLGM9YShkKTtzPj0xOy0tcylpZighKChoPWMqcyk8dSkpe2lmKGg+ZilicmVhaztnLnB1c2goaCl9fWVsc2UgZz1sKGQscCxNYXRoLm1pbihwLWQsdikpLm1hcChhKTtyZXR1cm4gbj9nLnJldmVyc2UoKTpnfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtpZihudWxsPT1yJiYocj0xMD09PWk/XCIuMGVcIjpcIixcIiksXCJmdW5jdGlvblwiIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpLG49PT0xLzApcmV0dXJuIHI7bnVsbD09biYmKG49MTApO3ZhciB1PU1hdGgubWF4KDEsaSpuL2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10L2EoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIG4qaTxpLS41JiYobio9aSksbjw9dT9yKHQpOlwiXCJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcihrYShyKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBhKE1hdGguZmxvb3Iobyh0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBhKE1hdGguY2VpbChvKHQpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQWEoZSxVYSgpLmJhc2UoaSkpfSxlfWZ1bmN0aW9uIHFhKHQsbil7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX1mdW5jdGlvbiBPYSgpe3ZhciB0PTEsbj1UYShmdW5jdGlvbihuLGUpe3JldHVybihlPXFhKGUsdCktKG49cWEobix0KSkpP2Z1bmN0aW9uKHIpe3JldHVybihxYShyLHQpLW4pL2V9OmJhKGUpfSxmdW5jdGlvbihuLGUpe3JldHVybiBlPXFhKGUsdCktKG49cWEobix0KSksZnVuY3Rpb24ocil7cmV0dXJuIHFhKG4rZSpyLDEvdCl9fSksZT1uLmRvbWFpbjtyZXR1cm4gbi5leHBvbmVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixlKGUoKSkpOnR9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBBYShuLE9hKCkuZXhwb25lbnQodCkpfSxOYShuKX1mdW5jdGlvbiBZYSgpe2Z1bmN0aW9uIHQoKXt2YXIgdD0wLG49TWF0aC5tYXgoMSxpLmxlbmd0aCk7Zm9yKG89bmV3IEFycmF5KG4tMSk7Kyt0PG47KW9bdC0xXT12KHIsdC9uKTtyZXR1cm4gZX1mdW5jdGlvbiBlKHQpe2lmKCFpc05hTih0PSt0KSlyZXR1cm4gaVtLYyhvLHQpXX12YXIgcj1bXSxpPVtdLG89W107cmV0dXJuIGUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPWkuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP29bbi0xXTpyWzBdLG48by5sZW5ndGg/b1tuXTpyW3IubGVuZ3RoLTFdXX0sZS5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIuc2xpY2UoKTtyPVtdO2Zvcih2YXIgaSxvPTAsYT1lLmxlbmd0aDtvPGE7KytvKW51bGw9PShpPWVbb10pfHxpc05hTihpPStpKXx8ci5wdXNoKGkpO3JldHVybiByLnNvcnQobiksdCgpfSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUN2LmNhbGwobiksdCgpKTppLnNsaWNlKCl9LGUucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2xpY2UoKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFlhKCkuZG9tYWluKHIpLnJhbmdlKGkpfSxlfWZ1bmN0aW9uIEJhKCl7ZnVuY3Rpb24gdCh0KXtpZih0PD10KXJldHVybiBhW0tjKG8sdCwwLGkpXX1mdW5jdGlvbiBuKCl7dmFyIG49LTE7Zm9yKG89bmV3IEFycmF5KGkpOysrbjxpOylvW25dPSgobisxKSpyLShuLWkpKmUpLyhpKzEpO3JldHVybiB0fXZhciBlPTAscj0xLGk9MSxvPVsuNV0sYT1bMCwxXTtyZXR1cm4gdC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxuKCkpOltlLHJdfSx0LnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPShhPUN2LmNhbGwodCkpLmxlbmd0aC0xLG4oKSk6YS5zbGljZSgpfSx0LmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgbj1hLmluZGV4T2YodCk7cmV0dXJuIG48MD9bTmFOLE5hTl06bjwxP1tlLG9bMF1dOm4+PWk/W29baS0xXSxyXTpbb1tuLTFdLG9bbl1dfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQmEoKS5kb21haW4oW2Uscl0pLnJhbmdlKGEpfSxOYSh0KX1mdW5jdGlvbiBGYSgpe2Z1bmN0aW9uIHQodCl7aWYodDw9dClyZXR1cm4gZVtLYyhuLHQsMCxyKV19dmFyIG49Wy41XSxlPVswLDFdLHI9MTtyZXR1cm4gdC5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Q3YuY2FsbChpKSxyPU1hdGgubWluKG4ubGVuZ3RoLGUubGVuZ3RoLTEpLHQpOm4uc2xpY2UoKX0sdC5yYW5nZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Ddi5jYWxsKGkpLHI9TWF0aC5taW4obi5sZW5ndGgsZS5sZW5ndGgtMSksdCk6ZS5zbGljZSgpfSx0LmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgcj1lLmluZGV4T2YodCk7cmV0dXJuW25bci0xXSxuW3JdXX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEZhKCkuZG9tYWluKG4pLnJhbmdlKGUpfSx0fWZ1bmN0aW9uIElhKHQsbixlLHIpe2Z1bmN0aW9uIGkobil7cmV0dXJuIHQobj1uZXcgRGF0ZSgrbikpLG59cmV0dXJuIGkuZmxvb3I9aSxpLmNlaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZShlLTEpKSxuKGUsMSksdChlKSxlfSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBuPWkodCksZT1pLmNlaWwodCk7cmV0dXJuIHQtbjxlLXQ/bjplfSxpLm9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQ9bmV3IERhdGUoK3QpLG51bGw9PWU/MTpNYXRoLmZsb29yKGUpKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKGUscixvKXt2YXIgYSx1PVtdO2lmKGU9aS5jZWlsKGUpLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShlPHImJm8+MCkpcmV0dXJuIHU7ZG97dS5wdXNoKGE9bmV3IERhdGUoK2UpKSxuKGUsbyksdChlKX13aGlsZShhPGUmJmU8cik7cmV0dXJuIHV9LGkuZmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiBJYShmdW5jdGlvbihuKXtpZihuPj1uKWZvcig7dChuKSwhZShuKTspbi5zZXRUaW1lKG4tMSl9LGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7bih0LC0xKSwhZSh0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7bih0LDEpLCFlKHQpOyk7fSl9LGUmJihpLmNvdW50PWZ1bmN0aW9uKG4scil7cmV0dXJuIFJ2LnNldFRpbWUoK24pLEx2LnNldFRpbWUoK3IpLHQoUnYpLHQoTHYpLE1hdGguZmxvb3IoZShSdixMdikpfSxpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/aS5maWx0ZXIocj9mdW5jdGlvbihuKXtyZXR1cm4gcihuKSV0PT0wfTpmdW5jdGlvbihuKXtyZXR1cm4gaS5jb3VudCgwLG4pJXQ9PTB9KTppOm51bGx9KSxpfWZ1bmN0aW9uIGphKHQpe3JldHVybiBJYShmdW5jdGlvbihuKXtuLnNldERhdGUobi5nZXREYXRlKCktKG4uZ2V0RGF5KCkrNy10KSU3KSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQtKG4uZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnF2KS9Pdn0pfWZ1bmN0aW9uIEhhKHQpe3JldHVybiBJYShmdW5jdGlvbihuKXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktKG4uZ2V0VVRDRGF5KCkrNy10KSU3KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL092fSl9ZnVuY3Rpb24gWGEodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIG4uc2V0RnVsbFllYXIodC55KSxufXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIEdhKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFZhKHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uICRhKHQpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxvLGE9W10sdT0tMSxmPTAsYz10Lmxlbmd0aDtmb3IoZSBpbnN0YW5jZW9mIERhdGV8fChlPW5ldyBEYXRlKCtlKSk7Kyt1PGM7KTM3PT09dC5jaGFyQ29kZUF0KHUpJiYoYS5wdXNoKHQuc2xpY2UoZix1KSksbnVsbCE9KGk9VWdbcj10LmNoYXJBdCgrK3UpXSk/cj10LmNoYXJBdCgrK3UpOmk9XCJlXCI9PT1yP1wiIFwiOlwiMFwiLChvPW5bcl0pJiYocj1vKGUsaSkpLGEucHVzaChyKSxmPXUrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGYsdSkpLGEuam9pbihcIlwiKX19ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaSxvLGE9VmEoMTkwMCk7aWYocihhLHQsZSs9XCJcIiwwKSE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7aWYoXCJRXCJpbiBhKXJldHVybiBuZXcgRGF0ZShhLlEpO2lmKFwicFwiaW4gYSYmKGEuSD1hLkglMTIrMTIqYS5wKSxcIlZcImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7XCJ3XCJpbiBhfHwoYS53PTEpLFwiWlwiaW4gYT8oaT0obz0oaT1HYShWYShhLnkpKSkuZ2V0VVRDRGF5KCkpPjR8fDA9PT1vP19nLmNlaWwoaSk6X2coaSksaT12Zy5vZmZzZXQoaSw3KihhLlYtMSkpLGEueT1pLmdldFVUQ0Z1bGxZZWFyKCksYS5tPWkuZ2V0VVRDTW9udGgoKSxhLmQ9aS5nZXRVVENEYXRlKCkrKGEudys2KSU3KTooaT0obz0oaT1uKFZhKGEueSkpKS5nZXREYXkoKSk+NHx8MD09PW8/JHYuY2VpbChpKTokdihpKSxpPVh2Lm9mZnNldChpLDcqKGEuVi0xKSksYS55PWkuZ2V0RnVsbFllYXIoKSxhLm09aS5nZXRNb250aCgpLGEuZD1pLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoXCJXXCJpbiBhfHxcIlVcImluIGEpJiYoXCJ3XCJpbiBhfHwoYS53PVwidVwiaW4gYT9hLnUlNzpcIldcImluIGE/MTowKSxvPVwiWlwiaW4gYT9HYShWYShhLnkpKS5nZXRVVENEYXkoKTpuKFZhKGEueSkpLmdldERheSgpLGEubT0wLGEuZD1cIldcImluIGE/KGEudys2KSU3KzcqYS5XLShvKzUpJTc6YS53KzcqYS5VLShvKzYpJTcpO3JldHVyblwiWlwiaW4gYT8oYS5IKz1hLlovMTAwfDAsYS5NKz1hLlolMTAwLEdhKGEpKTpuKGEpfX1mdW5jdGlvbiByKHQsbixlLHIpe2Zvcih2YXIgaSxvLGE9MCx1PW4ubGVuZ3RoLGY9ZS5sZW5ndGg7YTx1Oyl7aWYocj49ZilyZXR1cm4tMTtpZigzNz09PShpPW4uY2hhckNvZGVBdChhKyspKSl7aWYoaT1uLmNoYXJBdChhKyspLCEobz1BW2kgaW4gVWc/bi5jaGFyQXQoYSsrKTppXSl8fChyPW8odCxlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9dmFyIGk9dC5kYXRlVGltZSxvPXQuZGF0ZSxhPXQudGltZSx1PXQucGVyaW9kcyxmPXQuZGF5cyxjPXQuc2hvcnREYXlzLHM9dC5tb250aHMsbD10LnNob3J0TW9udGhzLGg9UWEodSksZD1KYSh1KSxwPVFhKGYpLHY9SmEoZiksZz1RYShjKSx5PUphKGMpLF89UWEocyksYj1KYShzKSxtPVFhKGwpLHg9SmEobCksdz17YTpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOl91LGU6X3UsZjpNdSxIOmJ1LEk6bXUsajp4dSxMOnd1LG06QXUsTTpUdSxwOmZ1bmN0aW9uKHQpe3JldHVybiB1WysodC5nZXRIb3VycygpPj0xMildfSxROkt1LHM6dGYsUzpOdSx1OlN1LFU6RXUsVjprdSx3OkN1LFc6UHUseDpudWxsLFg6bnVsbCx5Onp1LFk6UnUsWjpMdSxcIiVcIjpKdX0sTT17YTpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOkR1LGU6RHUsZjpCdSxIOlV1LEk6cXUsajpPdSxMOll1LG06RnUsTTpJdSxwOmZ1bmN0aW9uKHQpe3JldHVybiB1WysodC5nZXRVVENIb3VycygpPj0xMildfSxROkt1LHM6dGYsUzpqdSx1Okh1LFU6WHUsVjpHdSx3OlZ1LFc6JHUseDpudWxsLFg6bnVsbCx5Old1LFk6WnUsWjpRdSxcIiVcIjpKdX0sQT17YTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9Zy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9eVtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1wLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz12W3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxuLGUpe3ZhciByPW0uZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5tPXhbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9Xy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09YltyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gcih0LGksbixlKX0sZDpmdSxlOmZ1LGY6cHUsSDpzdSxJOnN1LGo6Y3UsTDpkdSxtOnV1LE06bHUscDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9aC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LnA9ZFtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxROmd1LHM6eXUsUzpodSx1OnR1LFU6bnUsVjpldSx3OkthLFc6cnUseDpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIodCxvLG4sZSl9LFg6ZnVuY3Rpb24odCxuLGUpe3JldHVybiByKHQsYSxuLGUpfSx5Om91LFk6aXUsWjphdSxcIiVcIjp2dX07cmV0dXJuIHcueD1uKG8sdyksdy5YPW4oYSx3KSx3LmM9bihpLHcpLE0ueD1uKG8sTSksTS5YPW4oYSxNKSxNLmM9bihpLE0pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9bih0Kz1cIlwiLHcpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBuPWUodCs9XCJcIixYYSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPW4odCs9XCJcIixNKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1lKHQsR2EpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59fX1mdW5jdGlvbiBXYSh0LG4sZSl7dmFyIHI9dDwwP1wiLVwiOlwiXCIsaT0ocj8tdDp0KStcIlwiLG89aS5sZW5ndGg7cmV0dXJuIHIrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4obikraTppKX1mdW5jdGlvbiBaYSh0KXtyZXR1cm4gdC5yZXBsYWNlKFlnLFwiXFxcXCQmXCIpfWZ1bmN0aW9uIFFhKHQpe3JldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiK3QubWFwKFphKS5qb2luKFwifFwiKStcIilcIixcImlcIil9ZnVuY3Rpb24gSmEodCl7Zm9yKHZhciBuPXt9LGU9LTEscj10Lmxlbmd0aDsrK2U8cjspblt0W2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIG59ZnVuY3Rpb24gS2EodCxuLGUpe3ZhciByPXFnLmV4ZWMobi5zbGljZShlLGUrMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHUodCxuLGUpe3ZhciByPXFnLmV4ZWMobi5zbGljZShlLGUrMSkpO3JldHVybiByPyh0LnU9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnUodCxuLGUpe3ZhciByPXFnLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LlU9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXUodCxuLGUpe3ZhciByPXFnLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LlY9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnUodCxuLGUpe3ZhciByPXFnLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Llc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXUodCxuLGUpe3ZhciByPXFnLmV4ZWMobi5zbGljZShlLGUrNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb3UodCxuLGUpe3ZhciByPXFnLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhdSh0LG4sZSl7dmFyIHI9L14oWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/Ly5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fFwiMDBcIikpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHV1KHQsbixlKXt2YXIgcj1xZy5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmdSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjdSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUsZSszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzdSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsdSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBodSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkdSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUsZSszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwdSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUsZSs2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2dSh0LG4sZSl7dmFyIHI9T2cuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/ZStyWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBndSh0LG4sZSl7dmFyIHI9cWcuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5RPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHl1KHQsbixlKXt2YXIgcj1xZy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LlE9MWUzKityWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF91KHQsbil7cmV0dXJuIFdhKHQuZ2V0RGF0ZSgpLG4sMil9ZnVuY3Rpb24gYnUodCxuKXtyZXR1cm4gV2EodC5nZXRIb3VycygpLG4sMil9ZnVuY3Rpb24gbXUodCxuKXtyZXR1cm4gV2EodC5nZXRIb3VycygpJTEyfHwxMixuLDIpfWZ1bmN0aW9uIHh1KHQsbil7cmV0dXJuIFdhKDErWHYuY291bnQoY2codCksdCksbiwzKX1mdW5jdGlvbiB3dSh0LG4pe3JldHVybiBXYSh0LmdldE1pbGxpc2Vjb25kcygpLG4sMyl9ZnVuY3Rpb24gTXUodCxuKXtyZXR1cm4gd3UodCxuKStcIjAwMFwifWZ1bmN0aW9uIEF1KHQsbil7cmV0dXJuIFdhKHQuZ2V0TW9udGgoKSsxLG4sMil9ZnVuY3Rpb24gVHUodCxuKXtyZXR1cm4gV2EodC5nZXRNaW51dGVzKCksbiwyKX1mdW5jdGlvbiBOdSh0LG4pe3JldHVybiBXYSh0LmdldFNlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIFN1KHQpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1uPzc6bn1mdW5jdGlvbiBFdSh0LG4pe3JldHVybiBXYShWdi5jb3VudChjZyh0KSx0KSxuLDIpfWZ1bmN0aW9uIGt1KHQsbil7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gdD1lPj00fHwwPT09ZT9Rdih0KTpRdi5jZWlsKHQpLFdhKFF2LmNvdW50KGNnKHQpLHQpKyg0PT09Y2codCkuZ2V0RGF5KCkpLG4sMil9ZnVuY3Rpb24gQ3UodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gUHUodCxuKXtyZXR1cm4gV2EoJHYuY291bnQoY2codCksdCksbiwyKX1mdW5jdGlvbiB6dSh0LG4pe3JldHVybiBXYSh0LmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gUnUodCxuKXtyZXR1cm4gV2EodC5nZXRGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIEx1KHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4obj4wP1wiLVwiOihuKj0tMSxcIitcIikpK1dhKG4vNjB8MCxcIjBcIiwyKStXYShuJTYwLFwiMFwiLDIpfWZ1bmN0aW9uIER1KHQsbil7cmV0dXJuIFdhKHQuZ2V0VVRDRGF0ZSgpLG4sMil9ZnVuY3Rpb24gVXUodCxuKXtyZXR1cm4gV2EodC5nZXRVVENIb3VycygpLG4sMil9ZnVuY3Rpb24gcXUodCxuKXtyZXR1cm4gV2EodC5nZXRVVENIb3VycygpJTEyfHwxMixuLDIpfWZ1bmN0aW9uIE91KHQsbil7cmV0dXJuIFdhKDErdmcuY291bnQoUmcodCksdCksbiwzKX1mdW5jdGlvbiBZdSh0LG4pe3JldHVybiBXYSh0LmdldFVUQ01pbGxpc2Vjb25kcygpLG4sMyl9ZnVuY3Rpb24gQnUodCxuKXtyZXR1cm4gWXUodCxuKStcIjAwMFwifWZ1bmN0aW9uIEZ1KHQsbil7cmV0dXJuIFdhKHQuZ2V0VVRDTW9udGgoKSsxLG4sMil9ZnVuY3Rpb24gSXUodCxuKXtyZXR1cm4gV2EodC5nZXRVVENNaW51dGVzKCksbiwyKX1mdW5jdGlvbiBqdSh0LG4pe3JldHVybiBXYSh0LmdldFVUQ1NlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIEh1KHQpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1uPzc6bn1mdW5jdGlvbiBYdSh0LG4pe3JldHVybiBXYSh5Zy5jb3VudChSZyh0KSx0KSxuLDIpfWZ1bmN0aW9uIEd1KHQsbil7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1lPj00fHwwPT09ZT94Zyh0KTp4Zy5jZWlsKHQpLFdhKHhnLmNvdW50KFJnKHQpLHQpKyg0PT09UmcodCkuZ2V0VVRDRGF5KCkpLG4sMil9ZnVuY3Rpb24gVnUodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gJHUodCxuKXtyZXR1cm4gV2EoX2cuY291bnQoUmcodCksdCksbiwyKX1mdW5jdGlvbiBXdSh0LG4pe3JldHVybiBXYSh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gWnUodCxuKXtyZXR1cm4gV2EodC5nZXRVVENGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIFF1KCl7cmV0dXJuXCIrMDAwMFwifWZ1bmN0aW9uIEp1KCl7cmV0dXJuXCIlXCJ9ZnVuY3Rpb24gS3UodCl7cmV0dXJuK3R9ZnVuY3Rpb24gdGYodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBuZihuKXtyZXR1cm4gTGc9JGEobiksdC50aW1lRm9ybWF0PUxnLmZvcm1hdCx0LnRpbWVQYXJzZT1MZy5wYXJzZSx0LnV0Y0Zvcm1hdD1MZy51dGNGb3JtYXQsdC51dGNQYXJzZT1MZy51dGNQYXJzZSxMZ31mdW5jdGlvbiBlZih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gcmYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gb2YodCxuLHIsaSxvLGEsdSxmLGMpe2Z1bmN0aW9uIHMoZSl7cmV0dXJuKHUoZSk8ZT9nOmEoZSk8ZT95Om8oZSk8ZT9fOmkoZSk8ZT9iOm4oZSk8ZT9yKGUpPGU/bTp4OnQoZSk8ZT93Ok0pKGUpfWZ1bmN0aW9uIGwobixyLGksbyl7aWYobnVsbD09biYmKG49MTApLFwibnVtYmVyXCI9PXR5cGVvZiBuKXt2YXIgYT1NYXRoLmFicyhpLXIpL24sdT1lKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkucmlnaHQoQSxhKTt1PT09QS5sZW5ndGg/KG89ZChyL1dnLGkvV2csbiksbj10KTp1PyhvPSh1PUFbYS9BW3UtMV1bMl08QVt1XVsyXS9hP3UtMTp1XSlbMV0sbj11WzBdKToobz1NYXRoLm1heChkKHIsaSxuKSwxKSxuPWYpfXJldHVybiBudWxsPT1vP246bi5ldmVyeShvKX12YXIgaD1UYSh4YSxzbikscD1oLmludmVydCx2PWguZG9tYWluLGc9YyhcIi4lTFwiKSx5PWMoXCI6JVNcIiksXz1jKFwiJUk6JU1cIiksYj1jKFwiJUkgJXBcIiksbT1jKFwiJWEgJWRcIikseD1jKFwiJWIgJWRcIiksdz1jKFwiJUJcIiksTT1jKFwiJVlcIiksQT1bW3UsMSxqZ10sW3UsNSw1KmpnXSxbdSwxNSwxNSpqZ10sW3UsMzAsMzAqamddLFthLDEsSGddLFthLDUsNSpIZ10sW2EsMTUsMTUqSGddLFthLDMwLDMwKkhnXSxbbywxLFhnXSxbbywzLDMqWGddLFtvLDYsNipYZ10sW28sMTIsMTIqWGddLFtpLDEsR2ddLFtpLDIsMipHZ10sW3IsMSxWZ10sW24sMSwkZ10sW24sMywzKiRnXSxbdCwxLFdnXV07cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShwKHQpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dihrdi5jYWxsKHQscmYpKTp2KCkubWFwKGVmKX0saC50aWNrcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9digpLGk9clswXSxvPXJbci5sZW5ndGgtMV0sYT1vPGk7cmV0dXJuIGEmJihlPWksaT1vLG89ZSksZT1sKHQsaSxvLG4pLGU9ZT9lLnJhbmdlKGksbysxKTpbXSxhP2UucmV2ZXJzZSgpOmV9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uP3M6YyhuKX0saC5uaWNlPWZ1bmN0aW9uKHQsbil7dmFyIGU9digpO3JldHVybih0PWwodCxlWzBdLGVbZS5sZW5ndGgtMV0sbikpP3Yoa2EoZSx0KSk6aH0saC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEFhKGgsb2YodCxuLHIsaSxvLGEsdSxmLGMpKX0saH1mdW5jdGlvbiBhZih0KXtmdW5jdGlvbiBuKG4pe3ZhciByPShuLWUpKmk7cmV0dXJuIHQobz9NYXRoLm1heCgwLE1hdGgubWluKDEscikpOnIpfXZhciBlPTAscj0xLGk9MSxvPSExO3JldHVybiBuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLGk9ZT09PXI/MDoxLyhyLWUpLG4pOltlLHJdfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxuKTpvfSxuLmludGVycG9sYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBhZih0KS5kb21haW4oW2Uscl0pLmNsYW1wKG8pfSxOYShuKX1mdW5jdGlvbiB1Zih0KXtmdW5jdGlvbiBuKG4pe3ZhciBlPS41Kygobj0rbiktcikqKG48cj9vOmEpO3JldHVybiB0KHU/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKX12YXIgZT0wLHI9LjUsaT0xLG89MSxhPTEsdT0hMTtyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpPSt0WzJdLG89ZT09PXI/MDouNS8oci1lKSxhPXI9PT1pPzA6LjUvKGktciksbik6W2UscixpXX0sbi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXQsbik6dX0sbi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdWYodCkuZG9tYWluKFtlLHIsaV0pLmNsYW1wKHUpfSxOYShuKX1mdW5jdGlvbiBmZih0KXtmb3IodmFyIG49dC5sZW5ndGgvNnwwLGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KWVbcl09XCIjXCIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBlfWZ1bmN0aW9uIGNmKHQpe3JldHVybiBpbCh0W3QubGVuZ3RoLTFdKX1mdW5jdGlvbiBzZih0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcihlKm4pKSldfX1mdW5jdGlvbiBsZih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gaGYodCl7cmV0dXJuIHQ+PTE/VF86dDw9LTE/LVRfOk1hdGguYXNpbih0KX1mdW5jdGlvbiBkZih0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBwZih0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiB2Zih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGdmKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHlmKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIF9mKHQsbixlLHIsaSxvLGEpe3ZhciB1PXQtZSxmPW4tcixjPShhP286LW8pL3dfKHUqdStmKmYpLHM9YypmLGw9LWMqdSxoPXQrcyxkPW4rbCxwPWUrcyx2PXIrbCxnPShoK3ApLzIseT0oZCt2KS8yLF89cC1oLGI9di1kLG09XypfK2IqYix4PWktbyx3PWgqdi1wKmQsTT0oYjwwPy0xOjEpKndfKGJfKDAseCp4Km0tdyp3KSksQT0odypiLV8qTSkvbSxUPSgtdypfLWIqTSkvbSxOPSh3KmIrXypNKS9tLFM9KC13Kl8rYipNKS9tLEU9QS1nLGs9VC15LEM9Ti1nLFA9Uy15O3JldHVybiBFKkUrayprPkMqQytQKlAmJihBPU4sVD1TKSx7Y3g6QSxjeTpULHgwMTotcyx5MDE6LWwseDExOkEqKGkveC0xKSx5MTE6VCooaS94LTEpfX1mdW5jdGlvbiBiZih0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbWYodCl7cmV0dXJuIG5ldyBiZih0KX1mdW5jdGlvbiB4Zih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3Zih0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBNZigpe2Z1bmN0aW9uIHQodCl7dmFyIHUsZixjLHM9dC5sZW5ndGgsbD0hMTtmb3IobnVsbD09aSYmKGE9byhjPW9lKCkpKSx1PTA7dTw9czsrK3UpISh1PHMmJnIoZj10W3VdLHUsdCkpPT09bCYmKChsPSFsKT9hLmxpbmVTdGFydCgpOmEubGluZUVuZCgpKSxsJiZhLnBvaW50KCtuKGYsdSx0KSwrZShmLHUsdCkpO2lmKGMpcmV0dXJuIGE9bnVsbCxjK1wiXCJ8fG51bGx9dmFyIG49eGYsZT13ZixyPWxmKCEwKSxpPW51bGwsbz1tZixhPW51bGw7cmV0dXJuIHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bGYoK2UpLHQpOm59LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoK24pLHQpOmV9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoISFuKSx0KTpyfSx0LmN1cnZlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sbnVsbCE9aSYmKGE9byhpKSksdCk6b30sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP2k9YT1udWxsOmE9byhpPW4pLHQpOml9LHR9ZnVuY3Rpb24gQWYoKXtmdW5jdGlvbiB0KHQpe3ZhciBuLHMsbCxoLGQscD10Lmxlbmd0aCx2PSExLGc9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApO2ZvcihudWxsPT11JiYoYz1mKGQ9b2UoKSkpLG49MDtuPD1wOysrbil7aWYoIShuPHAmJmEoaD10W25dLG4sdCkpPT09dilpZih2PSF2KXM9bixjLmFyZWFTdGFydCgpLGMubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYy5saW5lRW5kKCksYy5saW5lU3RhcnQoKSxsPW4tMTtsPj1zOy0tbCljLnBvaW50KGdbbF0seVtsXSk7Yy5saW5lRW5kKCksYy5hcmVhRW5kKCl9diYmKGdbbl09K2UoaCxuLHQpLHlbbl09K2koaCxuLHQpLGMucG9pbnQocj8rcihoLG4sdCk6Z1tuXSxvPytvKGgsbix0KTp5W25dKSl9aWYoZClyZXR1cm4gYz1udWxsLGQrXCJcInx8bnVsbH1mdW5jdGlvbiBuKCl7cmV0dXJuIE1mKCkuZGVmaW5lZChhKS5jdXJ2ZShmKS5jb250ZXh0KHUpfXZhciBlPXhmLHI9bnVsbCxpPWxmKDApLG89d2YsYT1sZighMCksdT1udWxsLGY9bWYsYz1udWxsO3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmxmKCtuKSxyPW51bGwsdCk6ZX0sdC54MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoK24pLHQpOmV9LHQueDE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpsZigrbiksdCk6cn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpsZigrbiksbz1udWxsLHQpOml9LHQueTA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmxmKCtuKSx0KTppfSx0LnkxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PW4/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoK24pLHQpOm99LHQubGluZVgwPXQubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS54KGUpLnkoaSl9LHQubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS54KGUpLnkobyl9LHQubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS54KHIpLnkoaSl9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoISFuKSx0KTphfSx0LmN1cnZlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPW4sbnVsbCE9dSYmKGM9Zih1KSksdCk6Zn0sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3U9Yz1udWxsOmM9Zih1PW4pLHQpOnV9LHR9ZnVuY3Rpb24gVGYodCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gTmYodCl7cmV0dXJuIHR9ZnVuY3Rpb24gU2YodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBFZih0KXtmdW5jdGlvbiBuKG4pe3JldHVybiBuZXcgU2YodChuKSl9cmV0dXJuIG4uX2N1cnZlPXQsbn1mdW5jdGlvbiBrZih0KXt2YXIgbj10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihFZih0KSk6bigpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBDZigpe3JldHVybiBrZihNZigpLmN1cnZlKFNfKSl9ZnVuY3Rpb24gUGYoKXt2YXIgdD1BZigpLmN1cnZlKFNfKSxuPXQuY3VydmUsZT10LmxpbmVYMCxyPXQubGluZVgxLGk9dC5saW5lWTAsbz10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGtmKGUoKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBrZihyKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4ga2YoaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGtmKG8oKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oRWYodCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gemYodCxuKXtyZXR1cm5bKG49K24pKk1hdGguY29zKHQtPU1hdGguUEkvMiksbipNYXRoLnNpbih0KV19ZnVuY3Rpb24gUmYodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIExmKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBEZih0KXtmdW5jdGlvbiBuKCl7dmFyIG4sdT1FXy5jYWxsKGFyZ3VtZW50cyksZj1lLmFwcGx5KHRoaXMsdSksYz1yLmFwcGx5KHRoaXMsdSk7aWYoYXx8KGE9bj1vZSgpKSx0KGEsK2kuYXBwbHkodGhpcywodVswXT1mLHUpKSwrby5hcHBseSh0aGlzLHUpLCtpLmFwcGx5KHRoaXMsKHVbMF09Yyx1KSksK28uYXBwbHkodGhpcyx1KSksbilyZXR1cm4gYT1udWxsLG4rXCJcInx8bnVsbH12YXIgZT1SZixyPUxmLGk9eGYsbz13ZixhPW51bGw7cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmxmKCt0KSxuKTppfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmxmKCt0KSxuKTpvfSxuLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9udWxsOnQsbik6YX0sbn1mdW5jdGlvbiBVZih0LG4sZSxyLGkpe3QubW92ZVRvKG4sZSksdC5iZXppZXJDdXJ2ZVRvKG49KG4rcikvMixlLG4saSxyLGkpfWZ1bmN0aW9uIHFmKHQsbixlLHIsaSl7dC5tb3ZlVG8obixlKSx0LmJlemllckN1cnZlVG8obixlPShlK2kpLzIscixlLHIsaSl9ZnVuY3Rpb24gT2YodCxuLGUscixpKXt2YXIgbz16ZihuLGUpLGE9emYobixlPShlK2kpLzIpLHU9emYocixlKSxmPXpmKHIsaSk7dC5tb3ZlVG8ob1swXSxvWzFdKSx0LmJlemllckN1cnZlVG8oYVswXSxhWzFdLHVbMF0sdVsxXSxmWzBdLGZbMV0pfWZ1bmN0aW9uIFlmKCl7fWZ1bmN0aW9uIEJmKHQsbixlKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErbikvNiwodC5feTArNCp0Ll95MStlKS82KX1mdW5jdGlvbiBGZih0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSWYodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGpmKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBIZih0LG4pe3RoaXMuX2Jhc2lzPW5ldyBGZih0KSx0aGlzLl9iZXRhPW59ZnVuY3Rpb24gWGYodCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLW4pLHQuX3kyK3QuX2sqKHQuX3kxLWUpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBHZih0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9ZnVuY3Rpb24gVmYodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fWZ1bmN0aW9uICRmKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1mdW5jdGlvbiBXZih0LG4sZSl7dmFyIHI9dC5feDEsaT10Ll95MSxvPXQuX3gyLGE9dC5feTI7aWYodC5fbDAxX2E+TV8pe3ZhciB1PTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGY9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqdS10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9mLGk9KGkqdS10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9mfWlmKHQuX2wyM19hPk1fKXt2YXIgYz0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxzPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtvPShvKmMrdC5feDEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9zLGE9KGEqYyt0Ll95MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL3N9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxvLGEsdC5feDIsdC5feTIpfWZ1bmN0aW9uIFpmKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZnVuY3Rpb24gUWYodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1mdW5jdGlvbiBKZih0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufWZ1bmN0aW9uIEtmKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB0Yyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gbmModCxuLGUpe3ZhciByPXQuX3gxLXQuX3gwLGk9bi10Ll94MSxvPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLGE9KGUtdC5feTEpLyhpfHxyPDAmJi0wKSx1PShvKmkrYSpyKS8ocitpKTtyZXR1cm4odGMobykrdGMoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHUpKXx8MH1mdW5jdGlvbiBlYyh0LG4pe3ZhciBlPXQuX3gxLXQuX3gwO3JldHVybiBlPygzKih0Ll95MS10Ll95MCkvZS1uKS8yOm59ZnVuY3Rpb24gcmModCxuLGUpe3ZhciByPXQuX3gwLGk9dC5feTAsbz10Ll94MSxhPXQuX3kxLHU9KG8tcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocit1LGkrdSpuLG8tdSxhLXUqZSxvLGEpfWZ1bmN0aW9uIGljKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBvYyh0KXt0aGlzLl9jb250ZXh0PW5ldyBhYyh0KX1mdW5jdGlvbiBhYyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdWModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGZjKHQpe3ZhciBuLGUscj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsb1swXT0yLGFbMF09dFswXSsyKnRbMV0sbj0xO248ci0xOysrbilpW25dPTEsb1tuXT00LGFbbl09NCp0W25dKzIqdFtuKzFdO2ZvcihpW3ItMV09MixvW3ItMV09NyxhW3ItMV09OCp0W3ItMV0rdFtyXSxuPTE7bjxyOysrbillPWlbbl0vb1tuLTFdLG9bbl0tPWUsYVtuXS09ZSphW24tMV07Zm9yKGlbci0xXT1hW3ItMV0vb1tyLTFdLG49ci0yO24+PTA7LS1uKWlbbl09KGFbbl0taVtuKzFdKS9vW25dO2ZvcihvW3ItMV09KHRbcl0raVtyLTFdKS8yLG49MDtuPHItMTsrK24pb1tuXT0yKnRbbisxXS1pW24rMV07cmV0dXJuW2ksb119ZnVuY3Rpb24gY2ModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1ufWZ1bmN0aW9uIHNjKHQsbil7aWYoKGk9dC5sZW5ndGgpPjEpZm9yKHZhciBlLHIsaSxvPTEsYT10W25bMF1dLHU9YS5sZW5ndGg7bzxpOysrbylmb3Iocj1hLGE9dFtuW29dXSxlPTA7ZTx1OysrZSlhW2VdWzFdKz1hW2VdWzBdPWlzTmFOKHJbZV1bMV0pP3JbZV1bMF06cltlXVsxXX1mdW5jdGlvbiBsYyh0KXtmb3IodmFyIG49dC5sZW5ndGgsZT1uZXcgQXJyYXkobik7LS1uPj0wOyllW25dPW47cmV0dXJuIGV9ZnVuY3Rpb24gaGModCxuKXtyZXR1cm4gdFtuXX1mdW5jdGlvbiBkYyh0KXt2YXIgbj10Lm1hcChwYyk7cmV0dXJuIGxjKHQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gblt0XS1uW2VdfSl9ZnVuY3Rpb24gcGModCl7Zm9yKHZhciBuLGU9MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShuPSt0W3JdWzFdKSYmKGUrPW4pO3JldHVybiBlfWZ1bmN0aW9uIHZjKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBnYyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5Yyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBfYygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGJjKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gbWModCxuKXt2YXIgZT1uLHI9bi5SLGk9ZS5VO2k/aS5MPT09ZT9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxlLlU9cixlLlI9ci5MLGUuUiYmKGUuUi5VPWUpLHIuTD1lfWZ1bmN0aW9uIHhjKHQsbil7dmFyIGU9bixyPW4uTCxpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5MPXIuUixlLkwmJihlLkwuVT1lKSxyLlI9ZX1mdW5jdGlvbiB3Yyh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gTWModCxuLGUscil7dmFyIGk9W251bGwsbnVsbF0sbz1yYi5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9bixlJiZUYyhpLHQsbixlKSxyJiZUYyhpLG4sdCxyKSxuYlt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxuYltuLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIEFjKHQsbixlKXt2YXIgcj1bbixlXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBUYyh0LG4sZSxyKXt0WzBdfHx0WzFdP3QubGVmdD09PWU/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1uLHQucmlnaHQ9ZSl9ZnVuY3Rpb24gTmModCxuLGUscixpKXt2YXIgbyxhPXRbMF0sdT10WzFdLGY9YVswXSxjPWFbMV0scz0wLGw9MSxoPXVbMF0tZixkPXVbMV0tYztpZihvPW4tZixofHwhKG8+MCkpe2lmKG8vPWgsaDwwKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9ZWxzZSBpZihoPjApe2lmKG8+bClyZXR1cm47bz5zJiYocz1vKX1pZihvPXItZixofHwhKG88MCkpe2lmKG8vPWgsaDwwKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9ZWxzZSBpZihoPjApe2lmKG88cylyZXR1cm47bzxsJiYobD1vKX1pZihvPWUtYyxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9ZWxzZSBpZihkPjApe2lmKG8+bClyZXR1cm47bz5zJiYocz1vKX1pZihvPWktYyxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9ZWxzZSBpZihkPjApe2lmKG88cylyZXR1cm47bzxsJiYobD1vKX1yZXR1cm4hKHM+MHx8bDwxKXx8KHM+MCYmKHRbMF09W2YrcypoLGMrcypkXSksbDwxJiYodFsxXT1bZitsKmgsYytsKmRdKSwhMCl9fX19fWZ1bmN0aW9uIFNjKHQsbixlLHIsaSl7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHUsZj10WzBdLGM9dC5sZWZ0LHM9dC5yaWdodCxsPWNbMF0saD1jWzFdLGQ9c1swXSxwPXNbMV0sdj0obCtkKS8yLGc9KGgrcCkvMjtpZihwPT09aCl7aWYodjxufHx2Pj1yKXJldHVybjtpZihsPmQpe2lmKGYpe2lmKGZbMV0+PWkpcmV0dXJufWVsc2UgZj1bdixlXTtvPVt2LGldfWVsc2V7aWYoZil7aWYoZlsxXTxlKXJldHVybn1lbHNlIGY9W3YsaV07bz1bdixlXX19ZWxzZSBpZihhPShsLWQpLyhwLWgpLHU9Zy1hKnYsYTwtMXx8YT4xKWlmKGw+ZCl7aWYoZil7aWYoZlsxXT49aSlyZXR1cm59ZWxzZSBmPVsoZS11KS9hLGVdO289WyhpLXUpL2EsaV19ZWxzZXtpZihmKXtpZihmWzFdPGUpcmV0dXJufWVsc2UgZj1bKGktdSkvYSxpXTtvPVsoZS11KS9hLGVdfWVsc2UgaWYoaDxwKXtpZihmKXtpZihmWzBdPj1yKXJldHVybn1lbHNlIGY9W24sYSpuK3VdO289W3IsYSpyK3VdfWVsc2V7aWYoZil7aWYoZlswXTxuKXJldHVybn1lbHNlIGY9W3IsYSpyK3VdO289W24sYSpuK3VdfXJldHVybiB0WzBdPWYsdFsxXT1vLCEwfWZ1bmN0aW9uIEVjKHQsbil7dmFyIGU9dC5zaXRlLHI9bi5sZWZ0LGk9bi5yaWdodDtyZXR1cm4gZT09PWkmJihpPXIscj1lKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KGU9PT1yPyhyPW5bMV0saT1uWzBdKToocj1uWzBdLGk9blsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24ga2ModCxuKXtyZXR1cm4gblsrKG4ubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIENjKHQsbil7cmV0dXJuIG5bKyhuLmxlZnQ9PT10LnNpdGUpXX1mdW5jdGlvbiBQYyh0KXt2YXIgbj10LlAsZT10Lk47aWYobiYmZSl7dmFyIHI9bi5zaXRlLGk9dC5zaXRlLG89ZS5zaXRlO2lmKHIhPT1vKXt2YXIgYT1pWzBdLHU9aVsxXSxmPXJbMF0tYSxjPXJbMV0tdSxzPW9bMF0tYSxsPW9bMV0tdSxoPTIqKGYqbC1jKnMpO2lmKCEoaD49LXViKSl7dmFyIGQ9ZipmK2MqYyxwPXMqcytsKmwsdj0obCpkLWMqcCkvaCxnPShmKnAtcypkKS9oLHk9aWIucG9wKCl8fG5ldyBmdW5jdGlvbigpe2JjKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH07eS5hcmM9dCx5LnNpdGU9aSx5Lng9dithLHkueT0oeS5jeT1nK3UpK01hdGguc3FydCh2KnYrZypnKSx0LmNpcmNsZT15O2Zvcih2YXIgXz1udWxsLGI9ZWIuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KXtpZighYi5MKXtfPWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe189YjticmVha31iPWIuUn1lYi5pbnNlcnQoXyx5KSxffHwoS189eSl9fX19ZnVuY3Rpb24gemModCl7dmFyIG49dC5jaXJjbGU7biYmKG4uUHx8KEtfPW4uTiksZWIucmVtb3ZlKG4pLGliLnB1c2gobiksYmMobiksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gUmModCl7dmFyIG49b2IucG9wKCl8fG5ldyBmdW5jdGlvbigpe2JjKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH07cmV0dXJuIG4uc2l0ZT10LG59ZnVuY3Rpb24gTGModCl7emModCksdGIucmVtb3ZlKHQpLG9iLnB1c2godCksYmModCl9ZnVuY3Rpb24gRGModCl7dmFyIG49dC5jaXJjbGUsZT1uLngscj1uLmN5LGk9W2Uscl0sbz10LlAsYT10Lk4sdT1bdF07TGModCk7Zm9yKHZhciBmPW87Zi5jaXJjbGUmJk1hdGguYWJzKGUtZi5jaXJjbGUueCk8YWImJk1hdGguYWJzKHItZi5jaXJjbGUuY3kpPGFiOylvPWYuUCx1LnVuc2hpZnQoZiksTGMoZiksZj1vO3UudW5zaGlmdChmKSx6YyhmKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxhYiYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8YWI7KWE9Yy5OLHUucHVzaChjKSxMYyhjKSxjPWE7dS5wdXNoKGMpLHpjKGMpO3ZhciBzLGw9dS5sZW5ndGg7Zm9yKHM9MTtzPGw7KytzKWM9dVtzXSxmPXVbcy0xXSxUYyhjLmVkZ2UsZi5zaXRlLGMuc2l0ZSxpKTtmPXVbMF0sKGM9dVtsLTFdKS5lZGdlPU1jKGYuc2l0ZSxjLnNpdGUsbnVsbCxpKSxQYyhmKSxQYyhjKX1mdW5jdGlvbiBVYyh0KXtmb3IodmFyIG4sZSxyLGksbz10WzBdLGE9dFsxXSx1PXRiLl87dTspaWYoKHI9cWModSxhKS1vKT5hYil1PXUuTDtlbHNle2lmKCEoKGk9by1mdW5jdGlvbih0LG4pe3ZhciBlPXQuTjtpZihlKXJldHVybiBxYyhlLG4pO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PW4/clswXToxLzB9KHUsYSkpPmFiKSl7cj4tYWI/KG49dS5QLGU9dSk6aT4tYWI/KG49dSxlPXUuTik6bj1lPXU7YnJlYWt9aWYoIXUuUil7bj11O2JyZWFrfXU9dS5SfShmdW5jdGlvbih0KXtuYlt0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KSh0KTt2YXIgZj1SYyh0KTtpZih0Yi5pbnNlcnQobixmKSxufHxlKXtpZihuPT09ZSlyZXR1cm4gemMobiksZT1SYyhuLnNpdGUpLHRiLmluc2VydChmLGUpLGYuZWRnZT1lLmVkZ2U9TWMobi5zaXRlLGYuc2l0ZSksUGMobiksdm9pZCBQYyhlKTtpZihlKXt6YyhuKSx6YyhlKTt2YXIgYz1uLnNpdGUscz1jWzBdLGw9Y1sxXSxoPXRbMF0tcyxkPXRbMV0tbCxwPWUuc2l0ZSx2PXBbMF0tcyxnPXBbMV0tbCx5PTIqKGgqZy1kKnYpLF89aCpoK2QqZCxiPXYqditnKmcsbT1bKGcqXy1kKmIpL3krcywoaCpiLXYqXykveStsXTtUYyhlLmVkZ2UsYyxwLG0pLGYuZWRnZT1NYyhjLHQsbnVsbCxtKSxlLmVkZ2U9TWModCxwLG51bGwsbSksUGMobiksUGMoZSl9ZWxzZSBmLmVkZ2U9TWMobi5zaXRlLGYuc2l0ZSl9fWZ1bmN0aW9uIHFjKHQsbil7dmFyIGU9dC5zaXRlLHI9ZVswXSxpPWVbMV0sbz1pLW47aWYoIW8pcmV0dXJuIHI7dmFyIGE9dC5QO2lmKCFhKXJldHVybi0xLzA7dmFyIHU9KGU9YS5zaXRlKVswXSxmPWVbMV0sYz1mLW47aWYoIWMpcmV0dXJuIHU7dmFyIHM9dS1yLGw9MS9vLTEvYyxoPXMvYztyZXR1cm4gbD8oLWgrTWF0aC5zcXJ0KGgqaC0yKmwqKHMqcy8oLTIqYyktZitjLzIraS1vLzIpKSkvbCtyOihyK3UpLzJ9ZnVuY3Rpb24gT2ModCxuLGUpe3JldHVybih0WzBdLWVbMF0pKihuWzFdLXRbMV0pLSh0WzBdLW5bMF0pKihlWzFdLXRbMV0pfWZ1bmN0aW9uIFljKHQsbil7cmV0dXJuIG5bMV0tdFsxXXx8blswXS10WzBdfWZ1bmN0aW9uIEJjKHQsbil7dmFyIGUscixpLG89dC5zb3J0KFljKS5wb3AoKTtmb3IocmI9W10sbmI9bmV3IEFycmF5KHQubGVuZ3RoKSx0Yj1uZXcgX2MsZWI9bmV3IF9jOzspaWYoaT1LXyxvJiYoIWl8fG9bMV08aS55fHxvWzFdPT09aS55JiZvWzBdPGkueCkpb1swXT09PWUmJm9bMV09PT1yfHwoVWMobyksZT1vWzBdLHI9b1sxXSksbz10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7RGMoaS5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LG4sZSxyLGk9MCxvPW5iLmxlbmd0aDtpPG87KytpKWlmKCh0PW5iW2ldKSYmKHI9KG49dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShyKSx1PW5ldyBBcnJheShyKTtmb3IoZT0wO2U8cjsrK2UpYVtlXT1lLHVbZV09RWModCxyYltuW2VdXSk7Zm9yKGEuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiB1W25dLXVbdF19KSxlPTA7ZTxyOysrZSl1W2VdPW5bYVtlXV07Zm9yKGU9MDtlPHI7KytlKW5bZV09dVtlXX19KCksbil7dmFyIGE9K25bMF1bMF0sdT0rblswXVsxXSxmPStuWzFdWzBdLGM9K25bMV1bMV07KGZ1bmN0aW9uKHQsbixlLHIpe2Zvcih2YXIgaSxvPXJiLmxlbmd0aDtvLS07KVNjKGk9cmJbb10sdCxuLGUscikmJk5jKGksdCxuLGUscikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPmFifHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPmFiKXx8ZGVsZXRlIHJiW29dfSkoYSx1LGYsYyksZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhLHUsZixjLHMsbCxoLGQscCx2LGc9bmIubGVuZ3RoLHk9ITA7Zm9yKGk9MDtpPGc7KytpKWlmKG89bmJbaV0pe2ZvcihhPW8uc2l0ZSx1PShmPW8uaGFsZmVkZ2VzKS5sZW5ndGg7dS0tOylyYltmW3VdXXx8Zi5zcGxpY2UodSwxKTtmb3IodT0wLGM9Zi5sZW5ndGg7dTxjOylwPShkPUNjKG8scmJbZlt1XV0pKVswXSx2PWRbMV0sbD0ocz1rYyhvLHJiW2ZbKyt1JWNdXSkpWzBdLGg9c1sxXSwoTWF0aC5hYnMocC1sKT5hYnx8TWF0aC5hYnModi1oKT5hYikmJihmLnNwbGljZSh1LDAscmIucHVzaChBYyhhLGQsTWF0aC5hYnMocC10KTxhYiYmci12PmFiP1t0LE1hdGguYWJzKGwtdCk8YWI/aDpyXTpNYXRoLmFicyh2LXIpPGFiJiZlLXA+YWI/W01hdGguYWJzKGgtcik8YWI/bDplLHJdOk1hdGguYWJzKHAtZSk8YWImJnYtbj5hYj9bZSxNYXRoLmFicyhsLWUpPGFiP2g6bl06TWF0aC5hYnModi1uKTxhYiYmcC10PmFiP1tNYXRoLmFicyhoLW4pPGFiP2w6dCxuXTpudWxsKSktMSksKytjKTtjJiYoeT0hMSl9aWYoeSl7dmFyIF8sYixtLHg9MS8wO2ZvcihpPTAseT1udWxsO2k8ZzsrK2kpKG89bmJbaV0pJiYobT0oXz0oYT1vLnNpdGUpWzBdLXQpKl8rKGI9YVsxXS1uKSpiKTx4JiYoeD1tLHk9byk7aWYoeSl7dmFyIHc9W3Qsbl0sTT1bdCxyXSxBPVtlLHJdLFQ9W2Usbl07eS5oYWxmZWRnZXMucHVzaChyYi5wdXNoKEFjKGE9eS5zaXRlLHcsTSkpLTEscmIucHVzaChBYyhhLE0sQSkpLTEscmIucHVzaChBYyhhLEEsVCkpLTEscmIucHVzaChBYyhhLFQsdykpLTEpfX1mb3IoaT0wO2k8ZzsrK2kpKG89bmJbaV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgbmJbaV0pfShhLHUsZixjKX10aGlzLmVkZ2VzPXJiLHRoaXMuY2VsbHM9bmIsdGI9ZWI9cmI9bmI9bnVsbH1mdW5jdGlvbiBGYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSWModCxuLGUpe3RoaXMuaz10LHRoaXMueD1uLHRoaXMueT1lfWZ1bmN0aW9uIGpjKHQpe3JldHVybiB0Ll9fem9vbXx8ZmJ9ZnVuY3Rpb24gSGMoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFhjKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gR2MoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gVmMoKXt2YXIgdCxuLGU9dGhpcztyZXR1cm4gZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KHQ9KGU9ZS5vd25lclNWR0VsZW1lbnR8fGUpLndpZHRoLmJhc2VWYWwudmFsdWUsbj1lLmhlaWdodC5iYXNlVmFsLnZhbHVlKToodD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQpLFtbMCwwXSxbdCxuXV19ZnVuY3Rpb24gJGMoKXtyZXR1cm4gdGhpcy5fX3pvb218fGZifWZ1bmN0aW9uIFdjKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSkvNTAwfWZ1bmN0aW9uIFpjKCl7cmV0dXJuXCJvbnRvdWNoc3RhcnRcImluIHRoaXN9ZnVuY3Rpb24gUWModCxuLGUpe3ZhciByPXQuaW52ZXJ0WChuWzBdWzBdKS1lWzBdWzBdLGk9dC5pbnZlcnRYKG5bMV1bMF0pLWVbMV1bMF0sbz10LmludmVydFkoblswXVsxXSktZVswXVsxXSxhPXQuaW52ZXJ0WShuWzFdWzFdKS1lWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfXZhciBKYz1lKG4pLEtjPUpjLnJpZ2h0LHRzPUpjLmxlZnQsbnM9QXJyYXkucHJvdG90eXBlLGVzPW5zLnNsaWNlLHJzPW5zLm1hcCxpcz1NYXRoLnNxcnQoNTApLG9zPU1hdGguc3FydCgxMCksYXM9TWF0aC5zcXJ0KDIpLHVzPUFycmF5LnByb3RvdHlwZS5zbGljZSxmcz0xLGNzPTIsc3M9Myxscz00LGhzPTFlLTYsZHM9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07Uy5wcm90b3R5cGU9Ti5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMsb246ZnVuY3Rpb24odCxuKXt2YXIgZSxyPXRoaXMuXyxpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9XCJcIixyPXQuaW5kZXhPZihcIi5cIik7aWYocj49MCYmKGU9dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhbi5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pfSh0K1wiXCIsciksbz0tMSxhPWkubGVuZ3RoO3tpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPW4mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIrbik7Zm9yKDsrK288YTspaWYoZT0odD1pW29dKS50eXBlKXJbZV09RShyW2VdLHQubmFtZSxuKTtlbHNlIGlmKG51bGw9PW4pZm9yKGUgaW4gcilyW2VdPUUocltlXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288YTspaWYoKGU9KHQ9aVtvXSkudHlwZSkmJihlPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKGU9dFtyXSkubmFtZT09PW4pcmV0dXJuIGUudmFsdWV9KHJbZV0sdC5uYW1lKSkpcmV0dXJuIGV9fSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sbj10aGlzLl87Zm9yKHZhciBlIGluIG4pdFtlXT1uW2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBTKHQpfSxjYWxsOmZ1bmN0aW9uKHQsbil7aWYoKGU9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgZSxyLGk9bmV3IEFycmF5KGUpLG89MDtvPGU7KytvKWlbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO2ZvcihvPTAsZT0ocj10aGlzLl9bdF0pLmxlbmd0aDtvPGU7KytvKXJbb10udmFsdWUuYXBwbHkobixpKX0sYXBwbHk6ZnVuY3Rpb24odCxuLGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShuLGUpfX07dmFyIHBzPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLHZzPXtzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHhodG1sOnBzLHhsaW5rOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLHhtbDpcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIn0sZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCl7dmFyIHlzPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZigheXMubWF0Y2hlcyl7dmFyIF9zPXlzLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8eXMubXNNYXRjaGVzU2VsZWN0b3J8fHlzLm1vek1hdGNoZXNTZWxlY3Rvcnx8eXMub01hdGNoZXNTZWxlY3Rvcjtncz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gX3MuY2FsbCh0aGlzLHQpfX19fXZhciBicz1ncztVLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VSxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LG4pfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgbXM9XCIkXCI7SC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIix0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIHhzPXt9O2lmKHQuZXZlbnQ9bnVsbCxcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQpe1wib25tb3VzZWVudGVyXCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh4cz17bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwifSl9dmFyIHdzPVtudWxsXTt1dC5wcm90b3R5cGU9ZnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1dCxzZWxlY3Q6ZnVuY3Rpb24odCl7XCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9eih0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhLHU9bltpXSxmPXUubGVuZ3RoLGM9cltpXT1uZXcgQXJyYXkoZikscz0wO3M8ZjsrK3MpKG89dVtzXSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18scyx1KSkmJihcIl9fZGF0YV9fXCJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3NdPWEpO3JldHVybiBuZXcgdXQocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PUwodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPVtdLGk9W10sbz0wO288ZTsrK28pZm9yKHZhciBhLHU9bltvXSxmPXUubGVuZ3RoLGM9MDtjPGY7KytjKShhPXVbY10pJiYoci5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyx1KSksaS5wdXNoKGEpKTtyZXR1cm4gbmV3IHV0KHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1icyh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhPW5baV0sdT1hLmxlbmd0aCxmPXJbaV09W10sYz0wO2M8dTsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmZi5wdXNoKG8pO3JldHVybiBuZXcgdXQocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7ZFsrK2NdPXR9KSxkO3ZhciBlPW4/TzpxLHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwcztcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KHQpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksZj1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciBzPXJbY10sbD1pW2NdLGg9bC5sZW5ndGgsZD10LmNhbGwocyxzJiZzLl9fZGF0YV9fLGMscikscD1kLmxlbmd0aCx2PXVbY109bmV3IEFycmF5KHApLGc9YVtjXT1uZXcgQXJyYXkocCk7ZShzLGwsdixnLGZbY109bmV3IEFycmF5KGgpLGQsbik7Zm9yKHZhciB5LF8sYj0wLG09MDtiPHA7KytiKWlmKHk9dltiXSl7Zm9yKGI+PW0mJihtPWIrMSk7IShfPWdbbV0pJiYrK208cDspO3kuX25leHQ9X3x8bnVsbH19cmV0dXJuIGE9bmV3IHV0KGEsciksYS5fZW50ZXI9dSxhLl9leGl0PWYsYX0sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHV0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKEQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1dCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKEQpLHRoaXMuX3BhcmVudHMpfSxtZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9dC5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPU1hdGgubWluKHIsaSksYT1uZXcgQXJyYXkociksdT0wO3U8bzsrK3UpZm9yKHZhciBmLGM9blt1XSxzPWVbdV0sbD1jLmxlbmd0aCxoPWFbdV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKShmPWNbZF18fHNbZF0pJiYoaFtkXT1mKTtmb3IoO3U8cjsrK3UpYVt1XT1uW3VdO3JldHVybiBuZXcgdXQoYSx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49LTEsZT10Lmxlbmd0aDsrK248ZTspZm9yKHZhciByLGk9dFtuXSxvPWkubGVuZ3RoLTEsYT1pW29dOy0tbz49MDspKHI9aVtvXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKTohbi0hZX10fHwodD1ZKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgYSx1PWVbb10sZj11Lmxlbmd0aCxjPWlbb109bmV3IEFycmF5KGYpLHM9MDtzPGY7KytzKShhPXVbc10pJiYoY1tzXT1hKTtjLnNvcnQobil9cmV0dXJuIG5ldyB1dChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxuPS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0Wysrbl09dGhpc30pLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49MCxlPXQubGVuZ3RoO248ZTsrK24pZm9yKHZhciByPXRbbl0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIGE9cltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPTAscj1uLmxlbmd0aDtlPHI7KytlKWZvcih2YXIgaSxvPW5bZV0sYT0wLHU9by5sZW5ndGg7YTx1OysrYSkoaT1vW2FdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsbil7dmFyIGU9ayh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2UubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP2UubG9jYWw/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX06ZS5sb2NhbD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX0pKGUsbikpfSxzdHlsZTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19OlwiZnVuY3Rpb25cIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixlKX19OmZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixlKX19KSh0LG4sbnVsbD09ZT9cIlwiOmUpKTpGKHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1uP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX06XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1lfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPW59fSkodCxuKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1JKHQrXCJcIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9aih0aGlzLm5vZGUoKSksaT0tMSxvPWUubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKChcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7KG4uYXBwbHkodGhpcyxhcmd1bWVudHMpP1g6RykodGhpcyx0KX19Om4/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7WCh0aGlzLHQpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Ryh0aGlzLHQpfX0pKGUsbikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P1Y6KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1uP1wiXCI6bn19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/JDooXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uP1wiXCI6bn19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFcpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goWil9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6Qyh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKHQsbil7dmFyIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OkModCkscj1udWxsPT1uP1E6XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOnoobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEopfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD90dDpLKX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49XCJcIixlPXQuaW5kZXhPZihcIi5cIik7cmV0dXJuIGU+PTAmJihuPXQuc2xpY2UoZSsxKSx0PXQuc2xpY2UoMCxlKSkse3R5cGU6dCxuYW1lOm59fSl9KHQrXCJcIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2Zvcih1PW4/aXQ6cnQsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPGE7KytyKXRoaXMuZWFjaCh1KG9bcl0sbixlKSk7cmV0dXJuIHRoaXN9dmFyIHU9dGhpcy5ub2RlKCkuX19vbjtpZih1KWZvcih2YXIgZixjPTAscz11Lmxlbmd0aDtjPHM7KytjKWZvcihyPTAsZj11W2NdO3I8YTsrK3IpaWYoKGk9b1tyXSkudHlwZT09PWYudHlwZSYmaS5uYW1lPT09Zi5uYW1lKXJldHVybiBmLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmVhY2goKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYXQodGhpcyx0LG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGF0KHRoaXMsdCxuKX19KSh0LG4pKX19O3ZhciBNcz0wO2x0LnByb3RvdHlwZT1zdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmx0LGdldDpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fOyEobiBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W25dfSxzZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFt0aGlzLl9dPW59LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319LHh0LnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXMuXz90aGlzOnR9O3ZhciBBcz1cIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixUcz1cIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLE5zPVwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFNzPS9eIyhbMC05YS1mXXszfSkkLyxFcz0vXiMoWzAtOWEtZl17Nn0pJC8sa3M9bmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiK1tBcyxBcyxBc10rXCJcXFxcKSRcIiksQ3M9bmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiK1tOcyxOcyxOc10rXCJcXFxcKSRcIiksUHM9bmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIitbQXMsQXMsQXMsVHNdK1wiXFxcXCkkXCIpLHpzPW5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIrW05zLE5zLE5zLFRzXStcIlxcXFwpJFwiKSxScz1uZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIrW1RzLE5zLE5zXStcIlxcXFwpJFwiKSxMcz1uZXcgUmVnRXhwKFwiXmhzbGFcXFxcKFwiK1tUcyxOcyxOcyxUc10rXCJcXFxcKSRcIiksRHM9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07TnQoRXQsa3Qse2Rpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuaGV4KCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrXCJcIn19KSxOdChMdCxSdCxTdChFdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEx0KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBMdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpmdW5jdGlvbigpe3JldHVyblwiI1wiK0R0KHRoaXMucikrRHQodGhpcy5nKStEdCh0aGlzLmIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/XCJyZ2IoXCI6XCJyZ2JhKFwiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKStcIiwgXCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrXCIsIFwiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD9cIilcIjpcIiwgXCIrdCtcIilcIil9fSkpLE50KE90LHF0LFN0KEV0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgT3QodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgT3QodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLG49aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsZT10aGlzLmwscj1lKyhlPC41P2U6MS1lKSpuLGk9MiplLXI7cmV0dXJuIG5ldyBMdChZdCh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxZdCh0LGksciksWXQodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyIFVzPU1hdGguUEkvMTgwLHFzPTE4MC9NYXRoLlBJLE9zPS45NjQyMixZcz0xLEJzPS44MjUyMSxGcz00LzI5LElzPTYvMjksanM9MypJcypJcyxIcz1JcypJcypJcztOdChJdCxGdCxTdChFdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJdCh0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEl0KHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LG49aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxlPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG49T3MqSHQobiksdD1ZcypIdCh0KSxlPUJzKkh0KGUpLG5ldyBMdChYdCgzLjEzMzg1NjEqbi0xLjYxNjg2NjcqdC0uNDkwNjE0NiplKSxYdCgtLjk3ODc2ODQqbisxLjkxNjE0MTUqdCsuMDMzNDU0KmUpLFh0KC4wNzE5NDUzKm4tLjIyODk5MTQqdCsxLjQwNTI0MjcqZSksdGhpcy5vcGFjaXR5KX19KSksTnQoV3QsJHQsU3QoRXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgV3QodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXdCh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBCdCh0aGlzKS5yZ2IoKX19KSk7dmFyIFhzPS0uMjkyMjcsR3M9LS45MDY0OSxWcz0xLjk3Mjk0LCRzPVZzKkdzLFdzPTEuNzgyNzcqVnMsWnM9MS43ODI3NypYcy0gLS4xNDg2MSpHcztOdChRdCxadCxTdChFdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IFF0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IFF0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpVcyxuPSt0aGlzLmwsZT1pc05hTih0aGlzLnMpPzA6dGhpcy5zKm4qKDEtbikscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgTHQoMjU1KihuK2UqKC0uMTQ4NjEqcisxLjc4Mjc3KmkpKSwyNTUqKG4rZSooWHMqcitHcyppKSksMjU1KihuK2UqKFZzKnIpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgUXMsSnMsS3MsdGwsbmwsZWwscmw9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9cigodD1SdCh0KSkuciwobj1SdChuKSkuciksaT1yKHQuZyxuLmcpLG89cih0LmIsbi5iKSxhPWFuKHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5yPWUobiksdC5nPWkobiksdC5iPW8obiksdC5vcGFjaXR5PWEobiksdCtcIlwifX12YXIgcj1vbihuKTtyZXR1cm4gZS5nYW1tYT10LGV9KDEpLGlsPXVuKEt0KSxvbD11bih0biksYWw9L1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLHVsPW5ldyBSZWdFeHAoYWwuc291cmNlLFwiZ1wiKSxmbD0xODAvTWF0aC5QSSxjbD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxzbD1nbihmdW5jdGlvbih0KXtyZXR1cm5cIm5vbmVcIj09PXQ/Y2w6KFFzfHwoUXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKSxKcz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsS3M9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLFFzLnN0eWxlLnRyYW5zZm9ybT10LHQ9S3MuZ2V0Q29tcHV0ZWRTdHlsZShKcy5hcHBlbmRDaGlsZChRcyksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKSxKcy5yZW1vdmVDaGlsZChRcyksdD10LnNsaWNlKDcsLTEpLnNwbGl0KFwiLFwiKSx2bigrdFswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSxcInB4LCBcIixcInB4KVwiLFwiZGVnKVwiKSxsbD1nbihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9jbDoodGx8fCh0bD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKSksdGwuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdCksKHQ9dGwudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsdm4odC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpjbCl9LFwiLCBcIixcIilcIixcIilcIiksaGw9TWF0aC5TUVJUMixkbD0yLHBsPTQsdmw9MWUtMTIsZ2w9Ym4ocm4pLHlsPWJuKGFuKSxfbD1tbihybiksYmw9bW4oYW4pLG1sPXhuKHJuKSx4bD14bihhbiksd2w9MCxNbD0wLEFsPTAsVGw9MWUzLE5sPTAsU2w9MCxFbD0wLGtsPVwib2JqZWN0XCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQ2w9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtBbi5wcm90b3R5cGU9VG4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBbixyZXN0YXJ0OmZ1bmN0aW9uKHQsbixlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtlPShudWxsPT1lP3duKCk6K2UpKyhudWxsPT1uPzA6K24pLHRoaXMuX25leHR8fGVsPT09dGhpc3x8KGVsP2VsLl9uZXh0PXRoaXM6bmw9dGhpcyxlbD10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1lLGtuKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGtuKCkpfX07dmFyIFBsPU4oXCJzdGFydFwiLFwiZW5kXCIsXCJpbnRlcnJ1cHRcIiksemw9W10sUmw9MCxMbD0xLERsPTIsVWw9MyxxbD00LE9sPTUsWWw9NixCbD1mdC5wcm90b3R5cGUuY29uc3RydWN0b3IsRmw9MCxJbD1mdC5wcm90b3R5cGU7T24ucHJvdG90eXBlPVluLnByb3RvdHlwZT17Y29uc3RydWN0b3I6T24sc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD16KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciB1LGYsYz1yW2FdLHM9Yy5sZW5ndGgsbD1vW2FdPW5ldyBBcnJheShzKSxoPTA7aDxzOysraCkodT1jW2hdKSYmKGY9dC5jYWxsKHUsdS5fX2RhdGFfXyxoLGMpKSYmKFwiX19kYXRhX19cImluIHUmJihmLl9fZGF0YV9fPXUuX19kYXRhX18pLGxbaF09ZixQbihsW2hdLG4sZSxoLGwsTG4odSxlKSkpO3JldHVybiBuZXcgT24obyx0aGlzLl9wYXJlbnRzLG4sZSl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7XCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9TCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89W10sYT1bXSx1PTA7dTxpOysrdSlmb3IodmFyIGYsYz1yW3VdLHM9Yy5sZW5ndGgsbD0wO2w8czsrK2wpaWYoZj1jW2xdKXtmb3IodmFyIGgsZD10LmNhbGwoZixmLl9fZGF0YV9fLGwsYykscD1MbihmLGUpLHY9MCxnPWQubGVuZ3RoO3Y8ZzsrK3YpKGg9ZFt2XSkmJlBuKGgsbixlLHYsZCxwKTtvLnB1c2goZCksYS5wdXNoKGYpfXJldHVybiBuZXcgT24obyxhLG4sZSl9LGZpbHRlcjpmdW5jdGlvbih0KXtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1icyh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhPW5baV0sdT1hLmxlbmd0aCxmPXJbaV09W10sYz0wO2M8dTsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmZi5wdXNoKG8pO3JldHVybiBuZXcgT24ocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9dC5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPU1hdGgubWluKHIsaSksYT1uZXcgQXJyYXkociksdT0wO3U8bzsrK3UpZm9yKHZhciBmLGM9blt1XSxzPWVbdV0sbD1jLmxlbmd0aCxoPWFbdV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKShmPWNbZF18fHNbZF0pJiYoaFtkXT1mKTtmb3IoO3U8cjsrK3UpYVt1XT1uW3VdO3JldHVybiBuZXcgT24oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJsKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLG49dGhpcy5faWQsZT1CbigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHU9cltvXSxmPXUubGVuZ3RoLGM9MDtjPGY7KytjKWlmKGE9dVtjXSl7dmFyIHM9TG4oYSxuKTtQbihhLHQsZSxjLHUse3RpbWU6cy50aW1lK3MuZGVsYXkrcy5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnMuZHVyYXRpb24sZWFzZTpzLmVhc2V9KX1yZXR1cm4gbmV3IE9uKHIsdGhpcy5fcGFyZW50cyx0LGUpfSxjYWxsOklsLmNhbGwsbm9kZXM6SWwubm9kZXMsbm9kZTpJbC5ub2RlLHNpemU6SWwuc2l6ZSxlbXB0eTpJbC5lbXB0eSxlYWNoOklsLmVhY2gsb246ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0xuKHRoaXMubm9kZSgpLGUpLm9uLm9uKHQpOnRoaXMuZWFjaChmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPWZ1bmN0aW9uKHQpe3JldHVybih0K1wiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIG49dC5pbmRleE9mKFwiLlwiKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8XCJzdGFydFwiPT09dH0pfShuKT96bjpSbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCksdT1hLm9uO3UhPT1yJiYoaT0ocj11KS5jb3B5KCkpLm9uKG4sZSksYS5vbj1pfX0oZSx0LG4pKX0sYXR0cjpmdW5jdGlvbih0LG4pe3ZhciBlPWsodCkscj1cInRyYW5zZm9ybVwiPT09ZT9sbDpxbjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhlLmxvY2FsP2Z1bmN0aW9uKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsdT1lKHRoaXMpO2lmKG51bGwhPXUpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXU/bnVsbDphPT09ciYmdT09PWk/bzpvPW4ocj1hLGk9dSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1PWUodGhpcyk7aWYobnVsbCE9dSlyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT11P251bGw6YT09PXImJnU9PT1pP286bz1uKHI9YSxpPXUpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKGUscixVbih0aGlzLFwiYXR0ci5cIit0LG4pKTpudWxsPT1uPyhlLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKGUpOihlLmxvY2FsP2Z1bmN0aW9uKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fTpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fSkoZSxyLG4rXCJcIikpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgZT1cImF0dHIuXCIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjt2YXIgcj1rKHQpO3JldHVybiB0aGlzLnR3ZWVuKGUsKHIubG9jYWw/ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcyxyPW4uYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihuKXtlLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX06ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcyxyPW4uYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihuKXtlLnNldEF0dHJpYnV0ZSh0LHIobikpfX1yZXR1cm4gZS5fdmFsdWU9bixlfSkocixuKSl9LHN0eWxlOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1cInRyYW5zZm9ybVwiPT0odCs9XCJcIik/c2w6cW47cmV0dXJuIG51bGw9PW4/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89Rih0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksRih0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09ZSYmYT09PXI/aTppPW4oZT1vLHI9YSl9fSh0LHIpKS5vbihcImVuZC5zdHlsZS5cIit0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUYodGhpcyx0KSx1PWUodGhpcyk7cmV0dXJuIG51bGw9PXUmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHU9Rih0aGlzLHQpKSxhPT09dT9udWxsOmE9PT1yJiZ1PT09aT9vOm89bihyPWEsaT11KX19KHQscixVbih0aGlzLFwic3R5bGUuXCIrdCxuKSk6ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89Rih0aGlzLHQpO3JldHVybiBvPT09ZT9udWxsOm89PT1yP2k6aT1uKHI9byxlKX19KHQscixuK1wiXCIpLGUpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1cInN0eWxlLlwiKyh0Kz1cIlwiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLGZ1bmN0aW9uKHQsbixlKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihuKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShuKSxlKX19cmV0dXJuIHIuX3ZhbHVlPW4scn0odCxuLG51bGw9PWU/XCJcIjplKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09bj9cIlwiOm59fShVbih0aGlzLFwidGV4dFwiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10P1wiXCI6dCtcIlwiKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKFwiZW5kLnJlbW92ZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT10KXJldHVybjtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtpZih0Kz1cIlwiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9TG4odGhpcy5ub2RlKCksZSkudHdlZW4sbz0wLGE9aS5sZW5ndGg7bzxhOysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2Z1bmN0aW9uKHQsbil7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1Sbih0aGlzLHQpLG89aS50d2VlbjtpZihvIT09ZSlmb3IodmFyIGE9MCx1PShyPWU9bykubGVuZ3RoO2E8dTsrK2EpaWYoclthXS5uYW1lPT09bil7KHI9ci5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31pLnR3ZWVuPXJ9fTpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1Sbih0aGlzLHQpLGE9by50d2VlbjtpZihhIT09cil7aT0ocj1hKS5zbGljZSgpO2Zvcih2YXIgdT17bmFtZTpuLHZhbHVlOmV9LGY9MCxjPWkubGVuZ3RoO2Y8YzsrK2YpaWYoaVtmXS5uYW1lPT09bil7aVtmXT11O2JyZWFrfWY9PT1jJiZpLnB1c2godSl9by50d2Vlbj1pfX0pKGUsdCxuKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3puKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe3puKHRoaXMsdCkuZGVsYXk9bn19KShuLHQpKTpMbih0aGlzLm5vZGUoKSxuKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKChcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Um4odGhpcyx0KS5kdXJhdGlvbj0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7Um4odGhpcyx0KS5kdXJhdGlvbj1ufX0pKG4sdCkpOkxuKHRoaXMubm9kZSgpLG4pLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbih0LG4pe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe1JuKHRoaXMsdCkuZWFzZT1ufX0obix0KSk6TG4odGhpcy5ub2RlKCksbikuZWFzZX19O3ZhciBqbD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIE1hdGgucG93KHQsbil9cmV0dXJuIG49K24sZS5leHBvbmVudD10LGV9KDMpLEhsPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsbil9cmV0dXJuIG49K24sZS5leHBvbmVudD10LGV9KDMpLFhsPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsbik6Mi1NYXRoLnBvdygyLXQsbikpLzJ9cmV0dXJuIG49K24sZS5leHBvbmVudD10LGV9KDMpLEdsPU1hdGguUEksVmw9R2wvMiwkbD00LzExLFdsPTYvMTEsWmw9OC8xMSxRbD0uNzUsSmw9OS8xMSxLbD0xMC8xMSx0aD0uOTM3NSxuaD0yMS8yMixlaD02My82NCxyaD0xLyRsLyRsLGloPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCksb2g9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybi0tdCp0KigobisxKSp0K24pKzF9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfSgxLjcwMTU4KSxhaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKG4rMSkqdC1uKToodC09MikqdCooKG4rMSkqdCtuKSsyKS8yfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCksdWg9MipNYXRoLlBJLGZoPWZ1bmN0aW9uIHQobixlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoaS10KS9lKX12YXIgaT1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPXVoKTtyZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKnVoKX0sci5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0scn0oMSwuMyksY2g9ZnVuY3Rpb24gdChuLGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIDEtbipNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K2kpL2UpfXZhciBpPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89dWgpO3JldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqdWgpfSxyLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxyfSgxLC4zKSxzaD1mdW5jdGlvbiB0KG4sZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/bipNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChpLXQpL2UpOjItbipNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigoaSt0KS9lKSkvMn12YXIgaT1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPXVoKTtyZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKnVoKX0sci5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0scn0oMSwuMyksbGg9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOklufTtmdC5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtEbih0aGlzLHQpfSl9LGZ0LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuLGU7dCBpbnN0YW5jZW9mIE9uPyhuPXQuX2lkLHQ9dC5fbmFtZSk6KG49Qm4oKSwoZT1saCkudGltZT13bigpLHQ9bnVsbD09dD9udWxsOnQrXCJcIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSx1PXJbb10sZj11Lmxlbmd0aCxjPTA7YzxmOysrYykoYT11W2NdKSYmUG4oYSx0LG4sYyx1LGV8fFZuKGEsbikpO3JldHVybiBuZXcgT24ocix0aGlzLl9wYXJlbnRzLHQsbil9O3ZhciBoaD1bbnVsbF0sZGg9e25hbWU6XCJkcmFnXCJ9LHBoPXtuYW1lOlwic3BhY2VcIn0sdmg9e25hbWU6XCJoYW5kbGVcIn0sZ2g9e25hbWU6XCJjZW50ZXJcIn0seWg9e25hbWU6XCJ4XCIsaGFuZGxlczpbXCJlXCIsXCJ3XCJdLm1hcChRbiksaW5wdXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmW1t0WzBdLG5bMF1bMV1dLFt0WzFdLG5bMV1bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX19LF9oPXtuYW1lOlwieVwiLGhhbmRsZXM6W1wiblwiLFwic1wiXS5tYXAoUW4pLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJltbblswXVswXSx0WzBdXSxbblsxXVswXSx0WzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19fSxiaD17bmFtZTpcInh5XCIsaGFuZGxlczpbXCJuXCIsXCJlXCIsXCJzXCIsXCJ3XCIsXCJud1wiLFwibmVcIixcInNlXCIsXCJzd1wiXS5tYXAoUW4pLGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxtaD17b3ZlcmxheTpcImNyb3NzaGFpclwiLHNlbGVjdGlvbjpcIm1vdmVcIixuOlwibnMtcmVzaXplXCIsZTpcImV3LXJlc2l6ZVwiLHM6XCJucy1yZXNpemVcIix3OlwiZXctcmVzaXplXCIsbnc6XCJud3NlLXJlc2l6ZVwiLG5lOlwibmVzdy1yZXNpemVcIixzZTpcIm53c2UtcmVzaXplXCIsc3c6XCJuZXN3LXJlc2l6ZVwifSx4aD17ZTpcIndcIix3OlwiZVwiLG53OlwibmVcIixuZTpcIm53XCIsc2U6XCJzd1wiLHN3Olwic2VcIn0sd2g9e246XCJzXCIsczpcIm5cIixudzpcInN3XCIsbmU6XCJzZVwiLHNlOlwibmVcIixzdzpcIm53XCJ9LE1oPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LEFoPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9LFRoPU1hdGguY29zLE5oPU1hdGguc2luLFNoPU1hdGguUEksRWg9U2gvMixraD0yKlNoLENoPU1hdGgubWF4LFBoPUFycmF5LnByb3RvdHlwZS5zbGljZSx6aD1NYXRoLlBJLFJoPTIqemgsTGg9UmgtMWUtNjtpZS5wcm90b3R5cGU9b2UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppZSxtb3ZlVG86ZnVuY3Rpb24odCxuKXt0aGlzLl8rPVwiTVwiKyh0aGlzLl94MD10aGlzLl94MT0rdCkrXCIsXCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz1cIlpcIil9LGxpbmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXys9XCJMXCIrKHRoaXMuX3gxPSt0KStcIixcIisodGhpcy5feTE9K24pfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIpe3RoaXMuXys9XCJRXCIrICt0K1wiLFwiKyArbitcIixcIisodGhpcy5feDE9K2UpK1wiLFwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxuLGUscixpLG8pe3RoaXMuXys9XCJDXCIrICt0K1wiLFwiKyArbitcIixcIisgK2UrXCIsXCIrICtyK1wiLFwiKyh0aGlzLl94MT0raSkrXCIsXCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24odCxuLGUscixpKXt0PSt0LG49K24sZT0rZSxyPStyLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSx1PWUtdCxmPXItbixjPW8tdCxzPWEtbixsPWMqYytzKnM7aWYoaTwwKXRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9XCJNXCIrKHRoaXMuX3gxPXQpK1wiLFwiKyh0aGlzLl95MT1uKTtlbHNlIGlmKGw+MWUtNilpZihNYXRoLmFicyhzKnUtZipjKT4xZS02JiZpKXt2YXIgaD1lLW8sZD1yLWEscD11KnUrZipmLHY9aCpoK2QqZCxnPU1hdGguc3FydChwKSx5PU1hdGguc3FydChsKSxfPWkqTWF0aC50YW4oKHpoLU1hdGguYWNvcygocCtsLXYpLygyKmcqeSkpKS8yKSxiPV8veSxtPV8vZztNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPVwiTFwiKyh0K2IqYykrXCIsXCIrKG4rYipzKSksdGhpcy5fKz1cIkFcIitpK1wiLFwiK2krXCIsMCwwLFwiKyArKHMqaD5jKmQpK1wiLFwiKyh0aGlzLl94MT10K20qdSkrXCIsXCIrKHRoaXMuX3kxPW4rbSpmKX1lbHNlIHRoaXMuXys9XCJMXCIrKHRoaXMuX3gxPXQpK1wiLFwiKyh0aGlzLl95MT1uKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0PSt0LG49K247dmFyIGE9KGU9K2UpKk1hdGguY29zKHIpLHU9ZSpNYXRoLnNpbihyKSxmPXQrYSxjPW4rdSxzPTFebyxsPW8/ci1pOmktcjtpZihlPDApdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIitlKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz1cIk1cIitmK1wiLFwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWYpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWMpPjFlLTYpJiYodGhpcy5fKz1cIkxcIitmK1wiLFwiK2MpLGUmJihsPDAmJihsPWwlUmgrUmgpLGw+TGg/dGhpcy5fKz1cIkFcIitlK1wiLFwiK2UrXCIsMCwxLFwiK3MrXCIsXCIrKHQtYSkrXCIsXCIrKG4tdSkrXCJBXCIrZStcIixcIitlK1wiLDAsMSxcIitzK1wiLFwiKyh0aGlzLl94MT1mKStcIixcIisodGhpcy5feTE9Yyk6bD4xZS02JiYodGhpcy5fKz1cIkFcIitlK1wiLFwiK2UrXCIsMCxcIisgKyhsPj16aCkrXCIsXCIrcytcIixcIisodGhpcy5feDE9dCtlKk1hdGguY29zKGkpKStcIixcIisodGhpcy5feTE9bitlKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsbixlLHIpe3RoaXMuXys9XCJNXCIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KStcIixcIisodGhpcy5feTA9dGhpcy5feTE9K24pK1wiaFwiKyArZStcInZcIisgK3IrXCJoXCIrLWUrXCJaXCJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2xlLnByb3RvdHlwZT1oZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxlLGhhczpmdW5jdGlvbih0KXtyZXR1cm5cIiRcIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tcIiRcIit0XX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXNbXCIkXCIrdF09bix0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49XCIkXCIrdDtyZXR1cm4gbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylcIiRcIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBuIGluIHRoaXMpXCIkXCI9PT1uWzBdJiZ0LnB1c2gobi5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKVwiJFwiPT09blswXSYmdC5wdXNoKHRoaXNbbl0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBuIGluIHRoaXMpXCIkXCI9PT1uWzBdJiZ0LnB1c2goe2tleTpuLnNsaWNlKDEpLHZhbHVlOnRoaXNbbl19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBuIGluIHRoaXMpXCIkXCI9PT1uWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoXCIkXCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0aGlzKVwiJFwiPT09blswXSYmdCh0aGlzW25dLG4uc2xpY2UoMSksdGhpcyl9fTt2YXIgRGg9aGUucHJvdG90eXBlO3llLnByb3RvdHlwZT1fZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnllLGhhczpEaC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0Kz1cIlwiLHRoaXNbXCIkXCIrdF09dCx0aGlzfSxyZW1vdmU6RGgucmVtb3ZlLGNsZWFyOkRoLmNsZWFyLHZhbHVlczpEaC5rZXlzLHNpemU6RGguc2l6ZSxlbXB0eTpEaC5lbXB0eSxlYWNoOkRoLmVhY2h9O3ZhciBVaD1BcnJheS5wcm90b3R5cGUuc2xpY2UscWg9W1tdLFtbWzEsMS41XSxbLjUsMV1dXSxbW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbLjUsMV1dXSxbW1sxLC41XSxbMS41LDFdXV0sW1tbMSwxLjVdLFsuNSwxXV0sW1sxLC41XSxbMS41LDFdXV0sW1tbMSwuNV0sWzEsMS41XV1dLFtbWzEsLjVdLFsuNSwxXV1dLFtbWy41LDFdLFsxLC41XV1dLFtbWzEsMS41XSxbMSwuNV1dXSxbW1suNSwxXSxbMSwuNV1dLFtbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbMS41LDFdXV0sW1tbLjUsMV0sWzEsMS41XV1dLFtdXSxPaD17fSxZaD17fSxCaD0zNCxGaD0xMCxJaD0xMyxqaD1rZShcIixcIiksSGg9amgucGFyc2UsWGg9amgucGFyc2VSb3dzLEdoPWpoLmZvcm1hdCxWaD1qaC5mb3JtYXRSb3dzLCRoPWtlKFwiXFx0XCIpLFdoPSRoLnBhcnNlLFpoPSRoLnBhcnNlUm93cyxRaD0kaC5mb3JtYXQsSmg9JGguZm9ybWF0Um93cyxLaD1MZShIaCksdGQ9TGUoV2gpLG5kPVVlKFwiYXBwbGljYXRpb24veG1sXCIpLGVkPVVlKFwidGV4dC9odG1sXCIpLHJkPVVlKFwiaW1hZ2Uvc3ZnK3htbFwiKSxpZD1qZS5wcm90b3R5cGU9SGUucHJvdG90eXBlO2lkLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxuLGU9bmV3IEhlKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBlO2lmKCFyLmxlbmd0aClyZXR1cm4gZS5fcm9vdD1YZShyKSxlO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0OmUuX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShuPXIuc291cmNlW2ldKSYmKG4ubGVuZ3RoP3QucHVzaCh7c291cmNlOm4sdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPVhlKG4pKTtyZXR1cm4gZX0saWQuYWRkPWZ1bmN0aW9uKHQpe3ZhciBuPSt0aGlzLl94LmNhbGwobnVsbCx0KSxlPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gWWUodGhpcy5jb3ZlcihuLGUpLG4sZSx0KX0saWQuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksZj0xLzAsYz0xLzAscz0tMS8wLGw9LTEvMDtmb3IoZT0wO2U8bzsrK2UpaXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsbj10W2VdKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLG4pKXx8KGFbZV09cix1W2VdPWkscjxmJiYoZj1yKSxyPnMmJihzPXIpLGk8YyYmKGM9aSksaT5sJiYobD1pKSk7Zm9yKHM8ZiYmKGY9dGhpcy5feDAscz10aGlzLl94MSksbDxjJiYoYz10aGlzLl95MCxsPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGYsYykuY292ZXIocyxsKSxlPTA7ZTxvOysrZSlZZSh0aGlzLGFbZV0sdVtlXSx0W2VdKTtyZXR1cm4gdGhpc30saWQuY292ZXI9ZnVuY3Rpb24odCxuKXtpZihpc05hTih0PSt0KXx8aXNOYU4obj0rbikpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4oZSkpaT0oZT1NYXRoLmZsb29yKHQpKSsxLG89KHI9TWF0aC5mbG9vcihuKSkrMTtlbHNle2lmKCEoZT50fHx0Pml8fHI+bnx8bj5vKSlyZXR1cm4gdGhpczt2YXIgYSx1LGY9aS1lLGM9dGhpcy5fcm9vdDtzd2l0Y2godT0objwocitvKS8yKTw8MXx0PChlK2kpLzIpe2Nhc2UgMDpkb3thPW5ldyBBcnJheSg0KSxhW3VdPWMsYz1hfXdoaWxlKGYqPTIsaT1lK2Ysbz1yK2YsdD5pfHxuPm8pO2JyZWFrO2Nhc2UgMTpkb3thPW5ldyBBcnJheSg0KSxhW3VdPWMsYz1hfXdoaWxlKGYqPTIsZT1pLWYsbz1yK2YsZT50fHxuPm8pO2JyZWFrO2Nhc2UgMjpkb3thPW5ldyBBcnJheSg0KSxhW3VdPWMsYz1hfXdoaWxlKGYqPTIsaT1lK2Yscj1vLWYsdD5pfHxyPm4pO2JyZWFrO2Nhc2UgMzpkb3thPW5ldyBBcnJheSg0KSxhW3VdPWMsYz1hfXdoaWxlKGYqPTIsZT1pLWYscj1vLWYsZT50fHxyPm4pfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9ZSx0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfSxpZC5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKWRve3QucHVzaChuLmRhdGEpfXdoaWxlKG49bi5uZXh0KX0pLHR9LGlkLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0saWQuZmluZD1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvLGEsdSxmLGMscz10aGlzLl94MCxsPXRoaXMuX3kwLGg9dGhpcy5feDEsZD10aGlzLl95MSxwPVtdLHY9dGhpcy5fcm9vdDtmb3IodiYmcC5wdXNoKG5ldyBCZSh2LHMsbCxoLGQpKSxudWxsPT1lP2U9MS8wOihzPXQtZSxsPW4tZSxoPXQrZSxkPW4rZSxlKj1lKTtmPXAucG9wKCk7KWlmKCEoISh2PWYubm9kZSl8fChpPWYueDApPmh8fChvPWYueTApPmR8fChhPWYueDEpPHN8fCh1PWYueTEpPGwpKWlmKHYubGVuZ3RoKXt2YXIgZz0oaSthKS8yLHk9KG8rdSkvMjtwLnB1c2gobmV3IEJlKHZbM10sZyx5LGEsdSksbmV3IEJlKHZbMl0saSx5LGcsdSksbmV3IEJlKHZbMV0sZyxvLGEseSksbmV3IEJlKHZbMF0saSxvLGcseSkpLChjPShuPj15KTw8MXx0Pj1nKSYmKGY9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS1jXSxwW3AubGVuZ3RoLTEtY109Zil9ZWxzZXt2YXIgXz10LSt0aGlzLl94LmNhbGwobnVsbCx2LmRhdGEpLGI9bi0rdGhpcy5feS5jYWxsKG51bGwsdi5kYXRhKSxtPV8qXytiKmI7aWYobTxlKXt2YXIgeD1NYXRoLnNxcnQoZT1tKTtzPXQteCxsPW4teCxoPXQreCxkPW4reCxyPXYuZGF0YX19cmV0dXJuIHJ9LGlkLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgbixlLHIsaSxvLGEsdSxmLGMscyxsLGgsZD10aGlzLl9yb290LHA9dGhpcy5feDAsdj10aGlzLl95MCxnPXRoaXMuX3gxLHk9dGhpcy5feTE7aWYoIWQpcmV0dXJuIHRoaXM7aWYoZC5sZW5ndGgpZm9yKDs7KXtpZigoYz1vPj0odT0ocCtnKS8yKSk/cD11Omc9dSwocz1hPj0oZj0odit5KS8yKSk/dj1mOnk9ZixuPWQsIShkPWRbbD1zPDwxfGNdKSlyZXR1cm4gdGhpcztpZighZC5sZW5ndGgpYnJlYWs7KG5bbCsxJjNdfHxuW2wrMiYzXXx8bltsKzMmM10pJiYoZT1uLGg9bCl9Zm9yKDtkLmRhdGEhPT10OylpZihyPWQsIShkPWQubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9ZC5uZXh0KSYmZGVsZXRlIGQubmV4dCxyPyhpP3IubmV4dD1pOmRlbGV0ZSByLm5leHQsdGhpcyk6bj8oaT9uW2xdPWk6ZGVsZXRlIG5bbF0sKGQ9blswXXx8blsxXXx8blsyXXx8blszXSkmJmQ9PT0oblszXXx8blsyXXx8blsxXXx8blswXSkmJiFkLmxlbmd0aCYmKGU/ZVtoXT1kOnRoaXMuX3Jvb3Q9ZCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0saWQucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wLGU9dC5sZW5ndGg7bjxlOysrbil0aGlzLnJlbW92ZSh0W25dKTtyZXR1cm4gdGhpc30saWQucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxpZC5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG97Kyt0fXdoaWxlKG49bi5uZXh0KX0pLHR9LGlkLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYSx1PVtdLGY9dGhpcy5fcm9vdDtmb3IoZiYmdS5wdXNoKG5ldyBCZShmLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7bj11LnBvcCgpOylpZighdChmPW4ubm9kZSxyPW4ueDAsaT1uLnkwLG89bi54MSxhPW4ueTEpJiZmLmxlbmd0aCl7dmFyIGM9KHIrbykvMixzPShpK2EpLzI7KGU9ZlszXSkmJnUucHVzaChuZXcgQmUoZSxjLHMsbyxhKSksKGU9ZlsyXSkmJnUucHVzaChuZXcgQmUoZSxyLHMsYyxhKSksKGU9ZlsxXSkmJnUucHVzaChuZXcgQmUoZSxjLGksbyxzKSksKGU9ZlswXSkmJnUucHVzaChuZXcgQmUoZSxyLGksYyxzKSl9cmV0dXJuIHRoaXN9LGlkLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIG4sZT1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZlLnB1c2gobmV3IEJlKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPWUucG9wKCk7KXt2YXIgaT1uLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBvLGE9bi54MCx1PW4ueTAsZj1uLngxLGM9bi55MSxzPShhK2YpLzIsbD0odStjKS8yOyhvPWlbMF0pJiZlLnB1c2gobmV3IEJlKG8sYSx1LHMsbCkpLChvPWlbMV0pJiZlLnB1c2gobmV3IEJlKG8scyx1LGYsbCkpLChvPWlbMl0pJiZlLnB1c2gobmV3IEJlKG8sYSxsLHMsYykpLChvPWlbM10pJiZlLnB1c2gobmV3IEJlKG8scyxsLGYsYykpfXIucHVzaChuKX1mb3IoO249ci5wb3AoKTspdChuLm5vZGUsbi54MCxuLnkwLG4ueDEsbi55MSk7cmV0dXJuIHRoaXN9LGlkLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxpZC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX07dmFyIG9kPTEwLGFkPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSx1ZD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtXFwoIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTt0ci5wcm90b3R5cGU9bnIucHJvdG90eXBlLG5yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz9cIjBcIjpcIlwiKSsobnVsbD09dGhpcy53aWR0aD9cIlwiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/XCIsXCI6XCJcIikrKG51bGw9PXRoaXMucHJlY2lzaW9uP1wiXCI6XCIuXCIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT9cIn5cIjpcIlwiKSt0aGlzLnR5cGV9O3ZhciBmZCxjZCxzZD17XCIlXCI6ZnVuY3Rpb24odCxuKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQobil9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrXCJcIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKG4pfSxmOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9GaXhlZChuKX0sZzpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvUHJlY2lzaW9uKG4pfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGVyKDEwMCp0LG4pfSxyOmVyLHM6ZnVuY3Rpb24odCxuKXt2YXIgZT1KZSh0LG4pO2lmKCFlKXJldHVybiB0K1wiXCI7dmFyIHI9ZVswXSxpPWVbMV0sbz1pLShmZD0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsYT1yLmxlbmd0aDtyZXR1cm4gbz09PWE/cjpvPmE/cituZXcgQXJyYXkoby1hKzEpLmpvaW4oXCIwXCIpOm8+MD9yLnNsaWNlKDAsbykrXCIuXCIrci5zbGljZShvKTpcIjAuXCIrbmV3IEFycmF5KDEtbykuam9pbihcIjBcIikrSmUodCxNYXRoLm1heCgwLG4rby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0sbGQ9W1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtvcih7ZGVjaW1hbDpcIi5cIix0aG91c2FuZHM6XCIsXCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OltcIiRcIixcIlwiXX0pLHNyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6c3IscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtscihqZCx0LHRoaXMudCksbHIodGhpcyxqZC5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9amQudDp0aGlzLnM9amQudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgaGQsZGQscGQsdmQsZ2QseWQsX2QsYmQsbWQseGQsd2QsTWQsQWQsVGQsTmQsU2QsRWQsa2QsQ2QsUGQsemQsUmQsTGQsRGQsVWQscWQsT2QsWWQsQmQsRmQsSWQsamQ9bmV3IHNyLEhkPTFlLTYsWGQ9MWUtMTIsR2Q9TWF0aC5QSSxWZD1HZC8yLCRkPUdkLzQsV2Q9MipHZCxaZD0xODAvR2QsUWQ9R2QvMTgwLEpkPU1hdGguYWJzLEtkPU1hdGguYXRhbix0cD1NYXRoLmF0YW4yLG5wPU1hdGguY29zLGVwPU1hdGguY2VpbCxycD1NYXRoLmV4cCxpcD1NYXRoLmxvZyxvcD1NYXRoLnBvdyxhcD1NYXRoLnNpbix1cD1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sZnA9TWF0aC5zcXJ0LGNwPU1hdGgudGFuLHNwPXtGZWF0dXJlOmZ1bmN0aW9uKHQsbil7Z3IodC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWdyKGVbcl0uZ2VvbWV0cnksbil9fSxscD17U3BoZXJlOmZ1bmN0aW9uKHQsbil7bi5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxuKXt0PXQuY29vcmRpbmF0ZXMsbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXQ9ZVtyXSxuLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe3lyKHQuY29vcmRpbmF0ZXMsbiwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl5cihlW3JdLG4sMCl9LFBvbHlnb246ZnVuY3Rpb24odCxuKXtfcih0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KV9yKGVbcl0sbil9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10Lmdlb21ldHJpZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylncihlW3JdLG4pfX0saHA9Y3IoKSxkcD1jcigpLHBwPXtwb2ludDp2cixsaW5lU3RhcnQ6dnIsbGluZUVuZDp2cixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtocC5yZXNldCgpLHBwLmxpbmVTdGFydD1tcixwcC5saW5lRW5kPXhyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2hwO2RwLmFkZCh0PDA/V2QrdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD12cn0sc3BoZXJlOmZ1bmN0aW9uKCl7ZHAuYWRkKFdkKX19LHZwPWNyKCksZ3A9e3BvaW50OlByLGxpbmVTdGFydDpScixsaW5lRW5kOkxyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2dwLnBvaW50PURyLGdwLmxpbmVTdGFydD1VcixncC5saW5lRW5kPXFyLHZwLnJlc2V0KCkscHAucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwcC5wb2x5Z29uRW5kKCksZ3AucG9pbnQ9UHIsZ3AubGluZVN0YXJ0PVJyLGdwLmxpbmVFbmQ9THIsaHA8MD8oeWQ9LShiZD0xODApLF9kPS0obWQ9OTApKTp2cD5IZD9tZD05MDp2cDwtSGQmJihfZD0tOTApLE5kWzBdPXlkLE5kWzFdPWJkfX0seXA9e3NwaGVyZTp2cixwb2ludDpGcixsaW5lU3RhcnQ6anIsbGluZUVuZDpHcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5cC5saW5lU3RhcnQ9VnIseXAubGluZUVuZD0kcn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lwLmxpbmVTdGFydD1qcix5cC5saW5lRW5kPUdyfX07S3IuaW52ZXJ0PUtyO3ZhciBfcCxicCxtcCx4cCx3cCxNcCxBcCxUcCxOcCxTcCxFcCxrcD1jcigpLENwPWRpKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGZ1bmN0aW9uKHQpe3ZhciBuLGU9TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLG49MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgdT1vPjA/R2Q6LUdkLGY9SmQoby1lKTtKZChmLUdkKTxIZD8odC5wb2ludChlLHI9KHIrYSkvMj4wP1ZkOi1WZCksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh1LHIpLHQucG9pbnQobyxyKSxuPTApOmkhPT11JiZmPj1HZCYmKEpkKGUtaSk8SGQmJihlLT1pKkhkKSxKZChvLXUpPEhkJiYoby09dSpIZCkscj1mdW5jdGlvbih0LG4sZSxyKXt2YXIgaSxvLGE9YXAodC1lKTtyZXR1cm4gSmQoYSk+SGQ/S2QoKGFwKG4pKihvPW5wKHIpKSphcChlKS1hcChyKSooaT1ucChuKSkqYXAodCkpLyhpKm8qYSkpOihuK3IpLzJ9KGUscixvLGEpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxyKSxuPTApLHQucG9pbnQoZT1vLHI9YSksaT11fSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksZT1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1ufX19LGZ1bmN0aW9uKHQsbixlLHIpe3ZhciBpO2lmKG51bGw9PXQpaT1lKlZkLHIucG9pbnQoLUdkLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KEdkLGkpLHIucG9pbnQoR2QsMCksci5wb2ludChHZCwtaSksci5wb2ludCgwLC1pKSxyLnBvaW50KC1HZCwtaSksci5wb2ludCgtR2QsMCksci5wb2ludCgtR2QsaSk7ZWxzZSBpZihKZCh0WzBdLW5bMF0pPkhkKXt2YXIgbz10WzBdPG5bMF0/R2Q6LUdkO2k9ZSpvLzIsci5wb2ludCgtbyxpKSxyLnBvaW50KDAsaSksci5wb2ludChvLGkpfWVsc2Ugci5wb2ludChuWzBdLG5bMV0pfSxbLUdkLC1WZF0pLFBwPTFlOSx6cD0tUHAsUnA9Y3IoKSxMcD17c3BoZXJlOnZyLHBvaW50OnZyLGxpbmVTdGFydDpmdW5jdGlvbigpe0xwLnBvaW50PWJpLExwLmxpbmVFbmQ9X2l9LGxpbmVFbmQ6dnIscG9seWdvblN0YXJ0OnZyLHBvbHlnb25FbmQ6dnJ9LERwPVtudWxsLG51bGxdLFVwPXt0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOkRwfSxxcD17RmVhdHVyZTpmdW5jdGlvbih0LG4pe3JldHVybiBNaSh0Lmdlb21ldHJ5LG4pfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmZlYXR1cmVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoTWkoZVtyXS5nZW9tZXRyeSxuKSlyZXR1cm4hMDtyZXR1cm4hMX19LE9wPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gQWkodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoQWkoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe3JldHVybiBUaSh0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKFRpKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxuKXtyZXR1cm4gTmkodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihOaShlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5nZW9tZXRyaWVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoTWkoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX19LFlwPWNyKCksQnA9Y3IoKSxGcD17cG9pbnQ6dnIsbGluZVN0YXJ0OnZyLGxpbmVFbmQ6dnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7RnAubGluZVN0YXJ0PVJpLEZwLmxpbmVFbmQ9VWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtGcC5saW5lU3RhcnQ9RnAubGluZUVuZD1GcC5wb2ludD12cixZcC5hZGQoSmQoQnApKSxCcC5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1ZcC8yO3JldHVybiBZcC5yZXNldCgpLHR9fSxJcD0xLzAsanA9SXAsSHA9LUlwLFhwPUhwLEdwPXtwb2ludDpmdW5jdGlvbih0LG4pe3Q8SXAmJihJcD10KSx0PkhwJiYoSHA9dCksbjxqcCYmKGpwPW4pLG4+WHAmJihYcD1uKX0sbGluZVN0YXJ0OnZyLGxpbmVFbmQ6dnIscG9seWdvblN0YXJ0OnZyLHBvbHlnb25FbmQ6dnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1tJcCxqcF0sW0hwLFhwXV07cmV0dXJuIEhwPVhwPS0oanA9SXA9MS8wKSx0fX0sVnA9MCwkcD0wLFdwPTAsWnA9MCxRcD0wLEpwPTAsS3A9MCx0dj0wLG52PTAsZXY9e3BvaW50OnFpLGxpbmVTdGFydDpPaSxsaW5lRW5kOkZpLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2V2LmxpbmVTdGFydD1JaSxldi5saW5lRW5kPWppfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZXYucG9pbnQ9cWksZXYubGluZVN0YXJ0PU9pLGV2LmxpbmVFbmQ9Rml9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PW52P1tLcC9udix0di9udl06SnA/W1pwL0pwLFFwL0pwXTpXcD9bVnAvV3AsJHAvV3BdOltOYU4sTmFOXTtyZXR1cm4gVnA9JHA9V3A9WnA9UXA9SnA9S3A9dHY9bnY9MCx0fX07R2kucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsbiksdGhpcy5fY29udGV4dC5hcmModCxuLHRoaXMuX3JhZGl1cywwLFdkKX19LHJlc3VsdDp2cn07dmFyIHJ2LGl2LG92LGF2LHV2LGZ2PWNyKCksY3Y9e3BvaW50OnZyLGxpbmVTdGFydDpmdW5jdGlvbigpe2N2LnBvaW50PVZpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cnYmJiRpKGl2LG92KSxjdi5wb2ludD12cn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cnY9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtydj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rZnY7cmV0dXJuIGZ2LnJlc2V0KCksdH19O1dpLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpaaSg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz10LHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9zdHJpbmcucHVzaChcIlpcIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKFwiTVwiLHQsXCIsXCIsbiksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fc3RyaW5nLnB1c2goXCJMXCIsdCxcIixcIixuKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1aaSh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaChcIk1cIix0LFwiLFwiLG4sdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKFwiXCIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LEppLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SmkscG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0LG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIHN2PTE2LGx2PW5wKDMwKlFkKSxodj1RaSh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0KlFkLG4qUWQpfX0pLGR2PWhvKGZ1bmN0aW9uKHQpe3JldHVybiBmcCgyLygxK3QpKX0pO2R2LmludmVydD1wbyhmdW5jdGlvbih0KXtyZXR1cm4gMipkcih0LzIpfSk7dmFyIHB2PWhvKGZ1bmN0aW9uKHQpe3JldHVybih0PWhyKHQpKSYmdC9hcCh0KX0pO3B2LmludmVydD1wbyhmdW5jdGlvbih0KXtyZXR1cm4gdH0pLHZvLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0LDIqS2QocnAobikpLVZkXX0sYm8uaW52ZXJ0PWJvLHhvLmludmVydD1wbyhLZCksTW8uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGUscj1uLGk9MjU7ZG97dmFyIG89cipyLGE9bypvO3ItPWU9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLjAyODg3NCpvLS4wNDQ0NzUtLjAwNTkxNiphKSkpLW4pLygxLjAwNzIyNitvKiguMDQ1MjU1K2EqKC4yNTk4NjYqby0uMzExMzI1LS4wMDU5MTYqMTEqYSkpKX13aGlsZShKZChlKT5IZCYmLS1pPjApO3JldHVyblt0LyguODcwNysobz1yKnIpKihvKihvKm8qbyooLjAwMzk3MS0uMDAxNTI5Km8pLS4wMTM3OTEpLS4xMzE5NzkpKSxyXX0sQW8uaW52ZXJ0PXBvKGRyKSxUby5pbnZlcnQ9cG8oZnVuY3Rpb24odCl7cmV0dXJuIDIqS2QodCl9KSxOby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bLW4sMipLZChycCh0KSktVmRdfSxEby5wcm90b3R5cGU9UG8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEbyxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihDbyl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbz10aGlzLGE9W29dO2Rve2ZvcihuPWEucmV2ZXJzZSgpLGE9W107bz1uLnBvcCgpOylpZih0KG8pLGU9by5jaGlsZHJlbilmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpOysrcilhLnB1c2goZVtyXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscixpPXRoaXMsbz1baV0sYT1bXTtpPW8ucG9wKCk7KWlmKGEucHVzaChpKSxuPWkuY2hpbGRyZW4pZm9yKGU9MCxyPW4ubGVuZ3RoO2U8cjsrK2Upby5wdXNoKG5bZV0pO2Zvcig7aT1hLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksbj1yLmNoaWxkcmVuKWZvcihlPW4ubGVuZ3RoLTE7ZT49MDstLWUpaS5wdXNoKG5bZV0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKG4pe2Zvcih2YXIgZT0rdChuLmRhdGEpfHwwLHI9bi5jaGlsZHJlbixpPXImJnIubGVuZ3RoOy0taT49MDspZSs9cltpXS52YWx1ZTtuLnZhbHVlPWV9KX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJm4uY2hpbGRyZW4uc29ydCh0KX0pfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLGU9ZnVuY3Rpb24odCxuKXtpZih0PT09bilyZXR1cm4gdDt2YXIgZT10LmFuY2VzdG9ycygpLHI9bi5hbmNlc3RvcnMoKSxpPW51bGw7Zm9yKHQ9ZS5wb3AoKSxuPXIucG9wKCk7dD09PW47KWk9dCx0PWUucG9wKCksbj1yLnBvcCgpO3JldHVybiBpfShuLHQpLHI9W25dO24hPT1lOyluPW4ucGFyZW50LHIucHVzaChuKTtmb3IodmFyIGk9ci5sZW5ndGg7dCE9PWU7KXIuc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxuPVt0XTt0PXQucGFyZW50OyluLnB1c2godCk7cmV0dXJuIG59LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt0LnB1c2gobil9KSx0fSxsZWF2ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG4pe24uY2hpbGRyZW58fHQucHVzaChuKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPVtdO3JldHVybiB0LmVhY2goZnVuY3Rpb24oZSl7ZSE9PXQmJm4ucHVzaCh7c291cmNlOmUucGFyZW50LHRhcmdldDplfSl9KSxufSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIFBvKHRoaXMpLmVhY2hCZWZvcmUoUm8pfX07dmFyIHZ2PUFycmF5LnByb3RvdHlwZS5zbGljZSxndj1cIiRcIix5dj17ZGVwdGg6LTF9LF92PXt9O2NhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKERvLnByb3RvdHlwZSk7dmFyIGJ2PSgxK01hdGguc3FydCg1KSkvMixtdj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlLHIsaSxvKXtsYShuLHQsZSxyLGksbyl9cmV0dXJuIGUucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIHQoKG49K24pPjE/bjoxKX0sZX0oYnYpLHh2PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUscixpLG8pe2lmKChhPXQuX3NxdWFyaWZ5KSYmYS5yYXRpbz09PW4pZm9yKHZhciBhLHUsZixjLHMsbD0tMSxoPWEubGVuZ3RoLGQ9dC52YWx1ZTsrK2w8aDspe2ZvcihmPSh1PWFbbF0pLmNoaWxkcmVuLGM9dS52YWx1ZT0wLHM9Zi5sZW5ndGg7YzxzOysrYyl1LnZhbHVlKz1mW2NdLnZhbHVlO3UuZGljZT9uYSh1LGUscixpLHIrPShvLXIpKnUudmFsdWUvZCk6c2EodSxlLHIsZSs9KGktZSkqdS52YWx1ZS9kLG8pLGQtPXUudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1hPWxhKG4sdCxlLHIsaSxvKSxhLnJhdGlvPW59cmV0dXJuIGUucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIHQoKG49K24pPjE/bjoxKX0sZX0oYnYpLHd2PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSwxPT09YXJndW1lbnRzLmxlbmd0aD8oZT10LHQ9MCk6ZS09dCxmdW5jdGlvbigpe3JldHVybiBuKCkqZSt0fX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh2YSksTXY9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3QsZT1udWxsPT1lPzE6K2UsZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1yKW89cixyPW51bGw7ZWxzZSBkb3tyPTIqbigpLTEsbz0yKm4oKS0xLGk9cipyK28qb313aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh2YSksQXY9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKCl7dmFyIHQ9TXYuc291cmNlKG4pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIGUuc291cmNlPXQsZX0odmEpLFR2PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxyPTA7cjx0OysrcillKz1uKCk7cmV0dXJuIGV9fXJldHVybiBlLnNvdXJjZT10LGV9KHZhKSxOdj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7dmFyIGU9VHYuc291cmNlKG4pKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKCkvdH19cmV0dXJuIGUuc291cmNlPXQsZX0odmEpLFN2PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1uKCkpL3R9fXJldHVybiBlLnNvdXJjZT10LGV9KHZhKSxFdj1BcnJheS5wcm90b3R5cGUsa3Y9RXYubWFwLEN2PUV2LnNsaWNlLFB2PXtuYW1lOlwiaW1wbGljaXRcIn0senY9WzAsMV0sUnY9bmV3IERhdGUsTHY9bmV3IERhdGUsRHY9SWEoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLXR9KTtEdi5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP0lhKGZ1bmN0aW9uKG4pe24uc2V0VGltZShNYXRoLmZsb29yKG4vdCkqdCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRUaW1lKCtuK2UqdCl9LGZ1bmN0aW9uKG4sZSl7cmV0dXJuKGUtbikvdH0pOkR2Om51bGx9O3ZhciBVdj1Edi5yYW5nZSxxdj02ZTQsT3Y9NjA0OGU1LFl2PUlhKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSgxZTMqTWF0aC5mbG9vcih0LzFlMykpfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCsxZTMqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMWUzfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSxCdj1Zdi5yYW5nZSxGdj1JYShmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L3F2KSpxdil9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qcXYpfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3F2fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxJdj1Gdi5yYW5nZSxqdj1JYShmdW5jdGlvbih0KXt2YXIgbj10LmdldFRpbWV6b25lT2Zmc2V0KCkqcXYlMzZlNTtuPDAmJihuKz0zNmU1KSx0LnNldFRpbWUoMzZlNSpNYXRoLmZsb29yKCgrdC1uKS8zNmU1KStuKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrMzZlNSpuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksSHY9anYucmFuZ2UsWHY9SWEoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdC0obi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqcXYpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLEd2PVh2LnJhbmdlLFZ2PWphKDApLCR2PWphKDEpLFd2PWphKDIpLFp2PWphKDMpLFF2PWphKDQpLEp2PWphKDUpLEt2PWphKDYpLHRnPVZ2LnJhbmdlLG5nPSR2LnJhbmdlLGVnPVd2LnJhbmdlLHJnPVp2LnJhbmdlLGlnPVF2LnJhbmdlLG9nPUp2LnJhbmdlLGFnPUt2LnJhbmdlLHVnPUlhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0TW9udGgodC5nZXRNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihuLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLGZnPXVnLnJhbmdlLGNnPUlhKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSk7Y2cuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9JYShmdW5jdGlvbihuKXtuLnNldEZ1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRGdWxsWWVhcigpL3QpKnQpLG4uc2V0TW9udGgoMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgc2c9Y2cucmFuZ2UsbGc9SWEoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qcXYpfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3F2fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSxoZz1sZy5yYW5nZSxkZz1JYShmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCszNmU1Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSxwZz1kZy5yYW5nZSx2Zz1JYShmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSxnZz12Zy5yYW5nZSx5Zz1IYSgwKSxfZz1IYSgxKSxiZz1IYSgyKSxtZz1IYSgzKSx4Zz1IYSg0KSx3Zz1IYSg1KSxNZz1IYSg2KSxBZz15Zy5yYW5nZSxUZz1fZy5yYW5nZSxOZz1iZy5yYW5nZSxTZz1tZy5yYW5nZSxFZz14Zy5yYW5nZSxrZz13Zy5yYW5nZSxDZz1NZy5yYW5nZSxQZz1JYShmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMioobi5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSx6Zz1QZy5yYW5nZSxSZz1JYShmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pO1JnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/SWEoZnVuY3Rpb24obil7bi5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKG4uZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxuLnNldFVUQ01vbnRoKDAsMSksbi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obixlKXtuLnNldFVUQ0Z1bGxZZWFyKG4uZ2V0VVRDRnVsbFllYXIoKStlKnQpfSk6bnVsbH07dmFyIExnLERnPVJnLnJhbmdlLFVnPXtcIi1cIjpcIlwiLF86XCIgXCIsMDpcIjBcIn0scWc9L15cXHMqXFxkKy8sT2c9L14lLyxZZz0vW1xcXFxeJCorP3xbXFxdKCkue31dL2c7bmYoe2RhdGVUaW1lOlwiJXgsICVYXCIsZGF0ZTpcIiUtbS8lLWQvJVlcIix0aW1lOlwiJS1JOiVNOiVTICVwXCIscGVyaW9kczpbXCJBTVwiLFwiUE1cIl0sZGF5czpbXCJTdW5kYXlcIixcIk1vbmRheVwiLFwiVHVlc2RheVwiLFwiV2VkbmVzZGF5XCIsXCJUaHVyc2RheVwiLFwiRnJpZGF5XCIsXCJTYXR1cmRheVwiXSxzaG9ydERheXM6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLG1vbnRoczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sc2hvcnRNb250aHM6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXX0pO3ZhciBCZz1cIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiLEZnPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP2Z1bmN0aW9uKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9OnQudXRjRm9ybWF0KEJnKSxJZz0rbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIik/ZnVuY3Rpb24odCl7dmFyIG49bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKG4pP251bGw6bn06dC51dGNQYXJzZShCZyksamc9MWUzLEhnPTYwKmpnLFhnPTYwKkhnLEdnPTI0KlhnLFZnPTcqR2csJGc9MzAqR2csV2c9MzY1KkdnLFpnPWZmKFwiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmXCIpLFFnPWZmKFwiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2XCIpLEpnPWZmKFwiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2XCIpLEtnPWZmKFwiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4XCIpLHR5PWZmKFwiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyXCIpLG55PWZmKFwiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjXCIpLGV5PWZmKFwiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5XCIpLHJ5PWZmKFwiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzXCIpLGl5PWZmKFwiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmXCIpLG95PW5ldyBBcnJheSgzKS5jb25jYXQoXCJkOGIzNjVmNWY1ZjU1YWI0YWNcIixcImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MVwiLFwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxXCIsXCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWVcIixcIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZVwiLFwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlXCIsXCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWVcIixcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiLFwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwXCIpLm1hcChmZiksYXk9Y2Yob3kpLHV5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJhZjhkYzNmN2Y3Zjc3ZmJmN2JcIixcIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzN1wiLFwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3XCIsXCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzdcIixcIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzN1wiLFwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3XCIsXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYlwiLFwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiXCIpLm1hcChmZiksZnk9Y2YodXkpLGN5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJlOWEzYzlmN2Y3ZjdhMWQ3NmFcIixcImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNlwiLFwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2XCIsXCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjFcIixcImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMVwiLFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjFcIixcIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOVwiLFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCIpLm1hcChmZiksc3k9Y2YoY3kpLGx5PW5ldyBBcnJheSgzKS5jb25jYXQoXCI5OThlYzNmN2Y3ZjdmMWEzNDBcIixcIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMVwiLFwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxXCIsXCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDZcIixcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNlwiLFwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2XCIsXCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDZcIixcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiLFwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4XCIpLm1hcChmZiksaHk9Y2YobHkpLGR5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJlZjhhNjJmN2Y3Zjc2N2E5Y2ZcIixcImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMFwiLFwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwXCIsXCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhY1wiLFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjXCIsXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MVwiLFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxXCIpLm1hcChmZikscHk9Y2YoZHkpLHZ5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJlZjhhNjJmZmZmZmY5OTk5OTlcIixcImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MFwiLFwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwXCIsXCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGRcIixcImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZFwiLFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGRcIixcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYVwiLFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCIpLm1hcChmZiksZ3k9Y2YodnkpLHl5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJmYzhkNTlmZmZmYmY5MWJmZGJcIixcImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNlwiLFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkOWU5MmM3YmI2XCIsXCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjRcIixcImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNFwiLFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0XCIsXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjRcIixcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiLFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1XCIpLm1hcChmZiksX3k9Y2YoeXkpLGJ5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJmYzhkNTlmZmZmYmY5MWNmNjBcIixcImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MVwiLFwiZDcxOTFjZmRhZTYxZmZmZmJmYTZkOTZhMWE5NjQxXCIsXCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTBcIixcImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MFwiLFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwXCIsXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzN1wiLFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3XCIpLm1hcChmZiksbXk9Y2YoYnkpLHh5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJmYzhkNTlmZmZmYmY5OWQ1OTRcIixcImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYVwiLFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmRcIixcImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZFwiLFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmRcIixcIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMlwiLFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIpLm1hcChmZiksd3k9Y2YoeHkpLE15PW5ldyBBcnJheSgzKS5jb25jYXQoXCJlNWY1Zjk5OWQ4YzkyY2EyNWZcIixcImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NVwiLFwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjXCIsXCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmNcIixcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0XCIsXCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWJcIikubWFwKGZmKSxBeT1jZihNeSksVHk9bmV3IEFycmF5KDMpLmNvbmNhdChcImUwZWNmNDllYmNkYTg4NTZhN1wiLFwiZWRmOGZiYjNjZGUzOGM5NmM2ODg0MTlkXCIsXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2NcIixcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3Y1wiLFwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiXCIsXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YlwiKS5tYXAoZmYpLE55PWNmKFR5KSxTeT1uZXcgQXJyYXkoMykuY29uY2F0KFwiZTBmM2RiYThkZGI1NDNhMmNhXCIsXCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmVcIixcImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhY1wiLFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjXCIsXCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWVcIixcImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZVwiLFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxXCIpLm1hcChmZiksRXk9Y2YoU3kpLGt5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJmZWU4YzhmZGJiODRlMzRhMzNcIixcImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZlwiLFwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwXCIsXCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDBcIixcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwXCIsXCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDBcIikubWFwKGZmKSxDeT1jZihreSksUHk9bmV3IEFycmF5KDMpLmNvbmNhdChcImVjZTJmMGE2YmRkYjFjOTA5OVwiLFwiZjZlZmY3YmRjOWUxNjdhOWNmMDI4MThhXCIsXCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTlcIixcImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OVwiLFwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwXCIsXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNlwiKS5tYXAoZmYpLHp5PWNmKFB5KSxSeT1uZXcgQXJyYXkoMykuY29uY2F0KFwiZWNlN2YyYTZiZGRiMmI4Y2JlXCIsXCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjBcIixcImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZFwiLFwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkXCIsXCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2JcIixcImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YlwiLFwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4XCIpLm1hcChmZiksTHk9Y2YoUnkpLER5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJlN2UxZWZjOTk0YzdkZDFjNzdcIixcImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NlwiLFwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzXCIsXCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDNcIixcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmXCIsXCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWZcIikubWFwKGZmKSxVeT1jZihEeSkscXk9bmV3IEFycmF5KDMpLmNvbmNhdChcImZkZTBkZGZhOWZiNWM1MWI4YVwiLFwiZmVlYmUyZmJiNGI5Zjc2OGExYWUwMTdlXCIsXCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzdcIixcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3N1wiLFwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3XCIsXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YVwiKS5tYXAoZmYpLE95PWNmKHF5KSxZeT1uZXcgQXJyYXkoMykuY29uY2F0KFwiZWRmOGIxN2ZjZGJiMmM3ZmI4XCIsXCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYThcIixcImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NFwiLFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0XCIsXCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODRcIixcImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NFwiLFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4XCIpLm1hcChmZiksQnk9Y2YoWXkpLEZ5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJmN2ZjYjlhZGRkOGUzMWEzNTRcIixcImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0M1wiLFwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3XCIsXCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzdcIixcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyXCIsXCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjlcIikubWFwKGZmKSxJeT1jZihGeSksank9bmV3IEFycmF5KDMpLmNvbmNhdChcImZmZjdiY2ZlYzQ0ZmQ5NWYwZVwiLFwiZmZmZmQ0ZmVkOThlZmU5OTI5Y2M0YzAyXCIsXCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDRcIixcImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNFwiLFwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0XCIsXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNlwiKS5tYXAoZmYpLEh5PWNmKGp5KSxYeT1uZXcgQXJyYXkoMykuY29uY2F0KFwiZmZlZGEwZmViMjRjZjAzYjIwXCIsXCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWNcIixcImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNlwiLFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNlwiLFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2XCIpLm1hcChmZiksR3k9Y2YoWHkpLFZ5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJkZWViZjc5ZWNhZTEzMTgyYmRcIixcImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNVwiLFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljXCIsXCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWNcIixcImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NFwiLFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmJcIikubWFwKGZmKSwkeT1jZihWeSksV3k9bmV3IEFycmF5KDMpLmNvbmNhdChcImU1ZjVlMGExZDk5YjMxYTM1NFwiLFwiZWRmOGU5YmFlNGIzNzRjNDc2MjM4YjQ1XCIsXCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmNcIixcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyY1wiLFwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyXCIsXCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzJcIixcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYlwiKS5tYXAoZmYpLFp5PWNmKFd5KSxReT1uZXcgQXJyYXkoMykuY29uY2F0KFwiZjBmMGYwYmRiZGJkNjM2MzYzXCIsXCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTJcIixcImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNVwiLFwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1XCIsXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNVwiLFwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwXCIpLm1hcChmZiksSnk9Y2YoUXkpLEt5PW5ldyBBcnJheSgzKS5jb25jYXQoXCJlZmVkZjViY2JkZGM3NTZiYjFcIixcImYyZjBmN2NiYzllMjllOWFjODZhNTFhM1wiLFwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmXCIsXCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGZcIixcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2XCIsXCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2RcIikubWFwKGZmKSx0Xz1jZihLeSksbl89bmV3IEFycmF5KDMpLmNvbmNhdChcImZlZTBkMmZjOTI3MmRlMmQyNlwiLFwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkXCIsXCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTVcIixcImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNVwiLFwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkXCIsXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZFwiKS5tYXAoZmYpLGVfPWNmKG5fKSxyXz1uZXcgQXJyYXkoMykuY29uY2F0KFwiZmVlNmNlZmRhZTZiZTY1NTBkXCIsXCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDFcIixcImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwM1wiLFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDRcIixcImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNFwiLFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0XCIpLm1hcChmZiksaV89Y2Yocl8pLG9fPXhsKFp0KDMwMCwuNSwwKSxadCgtMjQwLC41LDEpKSxhXz14bChadCgtMTAwLC43NSwuMzUpLFp0KDgwLDEuNSwuOCkpLHVfPXhsKFp0KDI2MCwuNzUsLjM1KSxadCg4MCwxLjUsLjgpKSxmXz1adCgpLGNfPVJ0KCksc189TWF0aC5QSS8zLGxfPTIqTWF0aC5QSS8zLGhfPXNmKGZmKFwiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1XCIpKSxkXz1zZihmZihcIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZlwiKSkscF89c2YoZmYoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTRcIikpLHZfPXNmKGZmKFwiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxXCIpKSxnXz1NYXRoLmFicyx5Xz1NYXRoLmF0YW4yLF9fPU1hdGguY29zLGJfPU1hdGgubWF4LG1fPU1hdGgubWluLHhfPU1hdGguc2luLHdfPU1hdGguc3FydCxNXz0xZS0xMixBXz1NYXRoLlBJLFRfPUFfLzIsTl89MipBXztiZi5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKX19fTt2YXIgU189RWYobWYpO1NmLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX2N1cnZlLnBvaW50KG4qTWF0aC5zaW4odCksbiotTWF0aC5jb3ModCkpfX07dmFyIEVfPUFycmF5LnByb3RvdHlwZS5zbGljZSxrXz17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuL0FfKTt0Lm1vdmVUbyhlLDApLHQuYXJjKDAsMCxlLDAsTl8pfX0sQ189e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi81KS8yO3QubW92ZVRvKC0zKmUsLWUpLHQubGluZVRvKC1lLC1lKSx0LmxpbmVUbygtZSwtMyplKSx0LmxpbmVUbyhlLC0zKmUpLHQubGluZVRvKGUsLWUpLHQubGluZVRvKDMqZSwtZSksdC5saW5lVG8oMyplLGUpLHQubGluZVRvKGUsZSksdC5saW5lVG8oZSwzKmUpLHQubGluZVRvKC1lLDMqZSksdC5saW5lVG8oLWUsZSksdC5saW5lVG8oLTMqZSxlKSx0LmNsb3NlUGF0aCgpfX0sUF89TWF0aC5zcXJ0KDEvMyksel89MipQXyxSXz17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuL3pfKSxyPWUqUF87dC5tb3ZlVG8oMCwtZSksdC5saW5lVG8ociwwKSx0LmxpbmVUbygwLGUpLHQubGluZVRvKC1yLDApLHQuY2xvc2VQYXRoKCl9fSxMXz1NYXRoLnNpbihBXy8xMCkvTWF0aC5zaW4oNypBXy8xMCksRF89TWF0aC5zaW4oTl8vMTApKkxfLFVfPS1NYXRoLmNvcyhOXy8xMCkqTF8scV89e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqbikscj1EXyplLGk9VV8qZTt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU5fKm8vNSx1PU1hdGguY29zKGEpLGY9TWF0aC5zaW4oYSk7dC5saW5lVG8oZiplLC11KmUpLHQubGluZVRvKHUqci1mKmksZipyK3UqaSl9dC5jbG9zZVBhdGgoKX19LE9fPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4pLHI9LWUvMjt0LnJlY3QocixyLGUsZSl9fSxZXz1NYXRoLnNxcnQoMyksQl89e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT0tTWF0aC5zcXJ0KG4vKDMqWV8pKTt0Lm1vdmVUbygwLDIqZSksdC5saW5lVG8oLVlfKmUsLWUpLHQubGluZVRvKFlfKmUsLWUpLHQuY2xvc2VQYXRoKCl9fSxGXz1NYXRoLnNxcnQoMykvMixJXz0xL01hdGguc3FydCgxMiksal89MyooSV8vMisxKSxIXz17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuL2pfKSxyPWUvMixpPWUqSV8sbz1yLGE9ZSpJXytlLHU9LW8sZj1hO3QubW92ZVRvKHIsaSksdC5saW5lVG8obyxhKSx0LmxpbmVUbyh1LGYpLHQubGluZVRvKC0uNSpyLUZfKmksRl8qcistLjUqaSksdC5saW5lVG8oLS41Km8tRl8qYSxGXypvKy0uNSphKSx0LmxpbmVUbygtLjUqdS1GXypmLEZfKnUrLS41KmYpLHQubGluZVRvKC0uNSpyK0ZfKmksLS41KmktRl8qciksdC5saW5lVG8oLS41Km8rRl8qYSwtLjUqYS1GXypvKSx0LmxpbmVUbygtLjUqdStGXypmLC0uNSpmLUZfKnUpLHQuY2xvc2VQYXRoKCl9fSxYXz1ba18sQ18sUl8sT18scV8sQl8sSF9dO0ZmLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6QmYodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6QmYodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19LElmLnByb3RvdHlwZT17YXJlYVN0YXJ0OllmLGFyZWFFbmQ6WWYsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PW4sdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStuKS82KTticmVhaztkZWZhdWx0OkJmKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fSxqZi5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgZT0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErbikvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUscik6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSxyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkJmKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fSxIZi5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsbj10aGlzLl95LGU9dC5sZW5ndGgtMTtpZihlPjApZm9yKHZhciByLGk9dFswXSxvPW5bMF0sYT10W2VdLWksdT1uW2VdLW8sZj0tMTsrK2Y8PWU7KXI9Zi9lLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtmXSsoMS10aGlzLl9iZXRhKSooaStyKmEpLHRoaXMuX2JldGEqbltmXSsoMS10aGlzLl9iZXRhKSoobytyKnUpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX07dmFyIEdfPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMT09PW4/bmV3IEZmKHQpOm5ldyBIZih0LG4pfXJldHVybiBlLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguODUpO0dmLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpYZih0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1uO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6WGYodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBWXz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBHZih0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtWZi5wcm90b3R5cGU9e2FyZWFTdGFydDpZZixhcmVhRW5kOllmLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6WGYodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciAkXz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBWZih0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTskZi5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpYZih0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFdfPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3ICRmKHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO1pmLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6V2YodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgWl89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyBaZih0LG4pOm5ldyBHZih0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO1FmLnByb3RvdHlwZT17YXJlYVN0YXJ0OllmLGFyZWFFbmQ6WWYsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6V2YodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgUV89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyBRZih0LG4pOm5ldyBWZih0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO0pmLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpXZih0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBKXz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IEpmKHQsbik6bmV3ICRmKHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7S2YucHJvdG90eXBlPXthcmVhU3RhcnQ6WWYsYXJlYUVuZDpZZixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dD0rdCxuPStuLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSl9fSxpYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6cmModGhpcyx0aGlzLl90MCxlYyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3ZhciBlPU5hTjtpZih0PSt0LG49K24sdCE9PXRoaXMuX3gxfHxuIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMscmModGhpcyxlYyh0aGlzLGU9bmModGhpcyx0LG4pKSxlKTticmVhaztkZWZhdWx0OnJjKHRoaXMsdGhpcy5fdDAsZT1uYyh0aGlzLHQsbikpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bix0aGlzLl90MD1lfX19LChvYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpYy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LG4pe2ljLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsbix0KX0sYWMucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8obix0LHIsZSxvLGkpfX0sdWMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aDtpZihlKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxuWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLG5bMF0pLDI9PT1lKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sblsxXSk7ZWxzZSBmb3IodmFyIHI9ZmModCksaT1mYyhuKSxvPTAsYT0xO2E8ZTsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW29dLGlbMF1bb10sclsxXVtvXSxpWzFdW29dLHRbYV0sblthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09ZSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX0sY2MucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxuKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2Vsc2V7dmFyIGU9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhlLG4pfX10aGlzLl94PXQsdGhpcy5feT1ufX0sX2MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpfYyxpbnNlcnQ6ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7aWYodCl7aWYobi5QPXQsbi5OPXQuTix0Lk4mJih0Lk4uUD1uKSx0Lk49bix0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1ufWVsc2UgdC5SPW47ZT10fWVsc2UgdGhpcy5fPyh0PXdjKHRoaXMuXyksbi5QPW51bGwsbi5OPXQsdC5QPXQuTD1uLGU9dCk6KG4uUD1uLk49bnVsbCx0aGlzLl89bixlPW51bGwpO2ZvcihuLkw9bi5SPW51bGwsbi5VPWUsbi5DPSEwLHQ9bjtlJiZlLkM7KWU9PT0ocj1lLlUpLkw/KGk9ci5SKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5SJiYobWModGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAseGModGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5MJiYoeGModGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAsbWModGhpcyxyKSksZT10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBuLGUscixpPXQuVSxvPXQuTCxhPXQuUjtpZihlPW8/YT93YyhhKTpvOmEsaT9pLkw9PT10P2kuTD1lOmkuUj1lOnRoaXMuXz1lLG8mJmE/KHI9ZS5DLGUuQz10LkMsZS5MPW8sby5VPWUsZSE9PWE/KGk9ZS5VLGUuVT10LlUsdD1lLlIsaS5MPXQsZS5SPWEsYS5VPWUpOihlLlU9aSxpPWUsdD1lLlIpKToocj10LkMsdD1lKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChuPWkuUikuQyYmKG4uQz0hMSxpLkM9ITAsbWModGhpcyxpKSxuPWkuUiksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5SJiZuLlIuQ3x8KG4uTC5DPSExLG4uQz0hMCx4Yyh0aGlzLG4pLG49aS5SKSxuLkM9aS5DLGkuQz1uLlIuQz0hMSxtYyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChuPWkuTCkuQyYmKG4uQz0hMSxpLkM9ITAseGModGhpcyxpKSxuPWkuTCksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5MJiZuLkwuQ3x8KG4uUi5DPSExLG4uQz0hMCxtYyh0aGlzLG4pLG49aS5MKSxuLkM9aS5DLGkuQz1uLkwuQz0hMSx4Yyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfW4uQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIEtfLHRiLG5iLGViLHJiLGliPVtdLG9iPVtdLGFiPTFlLTYsdWI9MWUtMTI7QmMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCYyxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKG4pe3ZhciBlPW4uaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4ga2Mobix0W2VdKX0pO3JldHVybiBlLmRhdGE9bi5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG89KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIGksbyxhLHU9ZS5zaXRlLGY9LTEsYz1uW2lbby0xXV0scz1jLmxlZnQ9PT11P2MucmlnaHQ6Yy5sZWZ0OysrZjxvOylhPXMscz0oYz1uW2lbZl1dKS5sZWZ0PT09dT9jLnJpZ2h0OmMubGVmdCxhJiZzJiZyPGEuaW5kZXgmJnI8cy5pbmRleCYmT2ModSxhLHMpPDAmJnQucHVzaChbdS5kYXRhLGEuZGF0YSxzLmRhdGFdKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJpZ2h0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByLGksbz10aGlzLGE9by5fZm91bmR8fDAsdT1vLmNlbGxzLmxlbmd0aDshKGk9by5jZWxsc1thXSk7KWlmKCsrYT49dSlyZXR1cm4gbnVsbDt2YXIgZj10LWkuc2l0ZVswXSxjPW4taS5zaXRlWzFdLHM9ZipmK2MqYztkb3tpPW8uY2VsbHNbcj1hXSxhPW51bGwsaS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1vLmVkZ2VzW2VdLHU9ci5sZWZ0O2lmKHUhPT1pLnNpdGUmJnV8fCh1PXIucmlnaHQpKXt2YXIgZj10LXVbMF0sYz1uLXVbMV0sbD1mKmYrYypjO2w8cyYmKHM9bCxhPXUuaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9cixudWxsPT1lfHxzPD1lKmU/aS5zaXRlOm51bGx9fSxJYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkljLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBJYyh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIDA9PT10JjA9PT1uP3RoaXM6bmV3IEljKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuaypuKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cInRyYW5zbGF0ZShcIit0aGlzLngrXCIsXCIrdGhpcy55K1wiKSBzY2FsZShcIit0aGlzLmsrXCIpXCJ9fTt2YXIgZmI9bmV3IEljKDEsMCwwKTtqYy5wcm90b3R5cGU9SWMucHJvdG90eXBlLHQudmVyc2lvbj1cIjUuNS4wXCIsdC5iaXNlY3Q9S2MsdC5iaXNlY3RSaWdodD1LYyx0LmJpc2VjdExlZnQ9dHMsdC5hc2NlbmRpbmc9bix0LmJpc2VjdG9yPWUsdC5jcm9zcz1mdW5jdGlvbih0LG4sZSl7dmFyIGksbyxhLHUsZj10Lmxlbmd0aCxjPW4ubGVuZ3RoLHM9bmV3IEFycmF5KGYqYyk7Zm9yKG51bGw9PWUmJihlPXIpLGk9YT0wO2k8ZjsrK2kpZm9yKHU9dFtpXSxvPTA7bzxjOysrbywrK2Epc1thXT1lKHUsbltvXSk7cmV0dXJuIHN9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn0sdC5kZXZpYXRpb249YSx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxvLGE9dC5sZW5ndGgsdT1uZXcgQXJyYXkoYSk7Zm9yKGk9MDtpPGE7KytpKXVbaV09bih0W2ldLGksdCk7dmFyIGY9ZSh1KSxjPWZbMF0sbD1mWzFdLGg9cih1LGMsbCk7QXJyYXkuaXNBcnJheShoKXx8KGg9ZChjLGwsaCksaD1zKE1hdGguY2VpbChjL2gpKmgsTWF0aC5mbG9vcihsL2gpKmgsaCkpO2Zvcih2YXIgcD1oLmxlbmd0aDtoWzBdPD1jOyloLnNoaWZ0KCksLS1wO2Zvcig7aFtwLTFdPmw7KWgucG9wKCksLS1wO3ZhciB2LGc9bmV3IEFycmF5KHArMSk7Zm9yKGk9MDtpPD1wOysraSkodj1nW2ldPVtdKS54MD1pPjA/aFtpLTFdOmMsdi54MT1pPHA/aFtpXTpsO2ZvcihpPTA7aTxhOysraSljPD0obz11W2ldKSYmbzw9bCYmZ1tLYyhoLG8sMCxwKV0ucHVzaCh0W2ldKTtyZXR1cm4gZ312YXIgbj1jLGU9dSxyPXA7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmYoZSksdCk6bn0sdC5kb21haW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmYoW25bMF0sblsxXV0pLHQpOmV9LHQudGhyZXNob2xkcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246QXJyYXkuaXNBcnJheShuKT9mKGVzLmNhbGwobikpOmYobiksdCk6cn0sdH0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD1ycy5jYWxsKHQsaSkuc29ydChuKSxNYXRoLmNlaWwoKHItZSkvKDIqKHYodCwuNzUpLXYodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFNjb3R0PWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygzLjUqYSh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFN0dXJnZXM9cCx0Lm1heD1nLHQubWVhbj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9dC5sZW5ndGgsbz1yLGE9LTEsdT0wO2lmKG51bGw9PW4pZm9yKDsrK2E8cjspaXNOYU4oZT1pKHRbYV0pKT8tLW86dSs9ZTtlbHNlIGZvcig7KythPHI7KWlzTmFOKGU9aShuKHRbYV0sYSx0KSkpPy0tbzp1Kz1lO2lmKG8pcmV0dXJuIHUvb30sdC5tZWRpYW49ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQubGVuZ3RoLGE9LTEsdT1bXTtpZihudWxsPT1lKWZvcig7KythPG87KWlzTmFOKHI9aSh0W2FdKSl8fHUucHVzaChyKTtlbHNlIGZvcig7KythPG87KWlzTmFOKHI9aShlKHRbYV0sYSx0KSkpfHx1LnB1c2gocik7cmV0dXJuIHYodS5zb3J0KG4pLC41KX0sdC5tZXJnZT15LHQubWluPV8sdC5wYWlycz1mdW5jdGlvbih0LG4pe251bGw9PW4mJihuPXIpO2Zvcih2YXIgZT0wLGk9dC5sZW5ndGgtMSxvPXRbMF0sYT1uZXcgQXJyYXkoaTwwPzA6aSk7ZTxpOylhW2VdPW4obyxvPXRbKytlXSk7cmV0dXJuIGF9LHQucGVybXV0ZT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtuW2VdXTtyZXR1cm4gcn0sdC5xdWFudGlsZT12LHQucmFuZ2U9cyx0LnNjYW49ZnVuY3Rpb24odCxlKXtpZihyPXQubGVuZ3RoKXt2YXIgcixpLG89MCxhPTAsdT10W2FdO2ZvcihudWxsPT1lJiYoZT1uKTsrK288cjspKGUoaT10W29dLHUpPDB8fDAhPT1lKHUsdSkpJiYodT1pLGE9byk7cmV0dXJuIDA9PT1lKHUsdSk/YTp2b2lkIDB9fSx0LnNodWZmbGU9ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89KG51bGw9PWU/dC5sZW5ndGg6ZSktKG49bnVsbD09bj8wOituKTtvOylpPU1hdGgucmFuZG9tKCkqby0tfDAscj10W28rbl0sdFtvK25dPXRbaStuXSx0W2krbl09cjtyZXR1cm4gdH0sdC5zdW09ZnVuY3Rpb24odCxuKXt2YXIgZSxyPXQubGVuZ3RoLGk9LTEsbz0wO2lmKG51bGw9PW4pZm9yKDsrK2k8cjspKGU9K3RbaV0pJiYobys9ZSk7ZWxzZSBmb3IoOysraTxyOykoZT0rbih0W2ldLGksdCkpJiYobys9ZSk7cmV0dXJuIG99LHQudGlja3M9bCx0LnRpY2tJbmNyZW1lbnQ9aCx0LnRpY2tTdGVwPWQsdC50cmFuc3Bvc2U9Yix0LnZhcmlhbmNlPW8sdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gYihhcmd1bWVudHMpfSx0LmF4aXNUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIFQoZnMsdCl9LHQuYXhpc1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBUKGNzLHQpfSx0LmF4aXNCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIFQoc3MsdCl9LHQuYXhpc0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIFQobHMsdCl9LHQuYnJ1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gZWUoYmgpfSx0LmJydXNoWD1mdW5jdGlvbigpe3JldHVybiBlZSh5aCl9LHQuYnJ1c2hZPWZ1bmN0aW9uKCl7cmV0dXJuIGVlKF9oKX0sdC5icnVzaFNlbGVjdGlvbj1mdW5jdGlvbih0KXt2YXIgbj10Ll9fYnJ1c2g7cmV0dXJuIG4/bi5kaW0ub3V0cHV0KG4uc2VsZWN0aW9uKTpudWxsfSx0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbyxhLHUsZixjLGwsaD10Lmxlbmd0aCxkPVtdLHA9cyhoKSx2PVtdLGc9W10seT1nLmdyb3Vwcz1uZXcgQXJyYXkoaCksXz1uZXcgQXJyYXkoaCpoKTtmb3Iobz0wLGM9LTE7KytjPGg7KXtmb3IoYT0wLGw9LTE7KytsPGg7KWErPXRbY11bbF07ZC5wdXNoKGEpLHYucHVzaChzKGgpKSxvKz1hfWZvcihlJiZwLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShkW3RdLGRbbl0pfSksciYmdi5mb3JFYWNoKGZ1bmN0aW9uKG4sZSl7bi5zb3J0KGZ1bmN0aW9uKG4saSl7cmV0dXJuIHIodFtlXVtuXSx0W2VdW2ldKX0pfSksZj0obz1DaCgwLGtoLW4qaCkvbyk/bjpraC9oLGE9MCxjPS0xOysrYzxoOyl7Zm9yKHU9YSxsPS0xOysrbDxoOyl7dmFyIGI9cFtjXSxtPXZbYl1bbF0seD10W2JdW21dLHc9YSxNPWErPXgqbztfW20qaCtiXT17aW5kZXg6YixzdWJpbmRleDptLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTpNLHZhbHVlOnh9fXlbYl09e2luZGV4OmIsc3RhcnRBbmdsZTp1LGVuZEFuZ2xlOmEsdmFsdWU6ZFtiXX0sYSs9Zn1mb3IoYz0tMTsrK2M8aDspZm9yKGw9Yy0xOysrbDxoOyl7dmFyIEE9X1tsKmgrY10sVD1fW2MqaCtsXTsoQS52YWx1ZXx8VC52YWx1ZSkmJmcucHVzaChBLnZhbHVlPFQudmFsdWU/e3NvdXJjZTpULHRhcmdldDpBfTp7c291cmNlOkEsdGFyZ2V0OlR9KX1yZXR1cm4gaT9nLnNvcnQoaSk6Z312YXIgbj0wLGU9bnVsbCxyPW51bGwsaT1udWxsO3JldHVybiB0LnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUNoKDAsZSksdCk6bn0sdC5zb3J0R3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdC5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP2k9bnVsbDooaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gdChuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSxlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSl9fShuKSkuXz1uLHQpOmkmJmkuX30sdH0sdC5yaWJib249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQsdT1QaC5jYWxsKGFyZ3VtZW50cyksZj1uLmFwcGx5KHRoaXMsdSksYz1lLmFwcGx5KHRoaXMsdSkscz0rci5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLGw9aS5hcHBseSh0aGlzLHUpLUVoLGg9by5hcHBseSh0aGlzLHUpLUVoLGQ9cypUaChsKSxwPXMqTmgobCksdj0rci5hcHBseSh0aGlzLCh1WzBdPWMsdSkpLGc9aS5hcHBseSh0aGlzLHUpLUVoLHk9by5hcHBseSh0aGlzLHUpLUVoO2lmKGF8fChhPXQ9b2UoKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAscyxsLGgpLGw9PT1nJiZoPT09eXx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAsdipUaChnKSx2Kk5oKGcpKSxhLmFyYygwLDAsdixnLHkpKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSx0KXJldHVybiBhPW51bGwsdCtcIlwifHxudWxsfXZhciBuPWFlLGU9dWUscj1mZSxpPWNlLG89c2UsYT1udWxsO3JldHVybiB0LnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246cmUoK24pLHQpOnJ9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246cmUoK24pLHQpOml9LHQuZW5kQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOnJlKCtuKSx0KTpvfSx0LnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHQudGFyZ2V0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PW4/bnVsbDpuLHQpOmF9LHR9LHQubmVzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobixpLGEsdSl7aWYoaT49by5sZW5ndGgpcmV0dXJuIG51bGwhPWUmJm4uc29ydChlKSxudWxsIT1yP3Iobik6bjtmb3IodmFyIGYsYyxzLGw9LTEsaD1uLmxlbmd0aCxkPW9baSsrXSxwPWhlKCksdj1hKCk7KytsPGg7KShzPXAuZ2V0KGY9ZChjPW5bbF0pK1wiXCIpKT9zLnB1c2goYyk6cC5zZXQoZixbY10pO3JldHVybiBwLmVhY2goZnVuY3Rpb24obixlKXt1KHYsZSx0KG4saSxhLHUpKX0pLHZ9ZnVuY3Rpb24gbih0LGUpe2lmKCsrZT5vLmxlbmd0aClyZXR1cm4gdDt2YXIgaSx1PWFbZS0xXTtyZXR1cm4gbnVsbCE9ciYmZT49by5sZW5ndGg/aT10LmVudHJpZXMoKTooaT1bXSx0LmVhY2goZnVuY3Rpb24odCxyKXtpLnB1c2goe2tleTpyLHZhbHVlczpuKHQsZSl9KX0pKSxudWxsIT11P2kuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiB1KHQua2V5LG4ua2V5KX0pOml9dmFyIGUscixpLG89W10sYT1bXTtyZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKG4pe3JldHVybiB0KG4sMCxkZSxwZSl9LG1hcDpmdW5jdGlvbihuKXtyZXR1cm4gdChuLDAsdmUsZ2UpfSxlbnRyaWVzOmZ1bmN0aW9uKGUpe3JldHVybiBuKHQoZSwwLHZlLGdlKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBvLnB1c2godCksaX0sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGFbby5sZW5ndGgtMV09dCxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsaX0scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiByPXQsaX19fSx0LnNldD1fZSx0Lm1hcD1oZSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKGUpO3JldHVybiBufSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2godFtlXSk7cmV0dXJuIG59LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goe2tleTplLHZhbHVlOnRbZV19KTtyZXR1cm4gbn0sdC5jb2xvcj1rdCx0LnJnYj1SdCx0LmhzbD1xdCx0LmxhYj1GdCx0LmhjbD0kdCx0LmxjaD1mdW5jdGlvbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/VnQodCk6bmV3IFd0KGUsbix0LG51bGw9PXI/MTpyKX0sdC5ncmF5PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBJdCh0LDAsMCxudWxsPT1uPzE6bil9LHQuY3ViZWhlbGl4PVp0LHQuY29udG91cnM9TWUsdC5jb250b3VyRGVuc2l0eT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSh2KnkpLHI9bmV3IEZsb2F0MzJBcnJheSh2KnkpO3QuZm9yRWFjaChmdW5jdGlvbih0LG4scil7dmFyIGk9YSh0LG4scikrcD4+aCxvPXUodCxuLHIpK3A+Pmg7aT49MCYmaTx2JiZvPj0wJiZvPHkmJisrZVtpK28qdl19KSxBZSh7d2lkdGg6dixoZWlnaHQ6eSxkYXRhOmV9LHt3aWR0aDp2LGhlaWdodDp5LGRhdGE6cn0sbD4+aCksVGUoe3dpZHRoOnYsaGVpZ2h0OnksZGF0YTpyfSx7d2lkdGg6dixoZWlnaHQ6eSxkYXRhOmV9LGw+PmgpLEFlKHt3aWR0aDp2LGhlaWdodDp5LGRhdGE6ZX0se3dpZHRoOnYsaGVpZ2h0OnksZGF0YTpyfSxsPj5oKSxUZSh7d2lkdGg6dixoZWlnaHQ6eSxkYXRhOnJ9LHt3aWR0aDp2LGhlaWdodDp5LGRhdGE6ZX0sbD4+aCksQWUoe3dpZHRoOnYsaGVpZ2h0OnksZGF0YTplfSx7d2lkdGg6dixoZWlnaHQ6eSxkYXRhOnJ9LGw+PmgpLFRlKHt3aWR0aDp2LGhlaWdodDp5LGRhdGE6cn0se3dpZHRoOnYsaGVpZ2h0OnksZGF0YTplfSxsPj5oKTt2YXIgaT1fKGUpO2lmKCFBcnJheS5pc0FycmF5KGkpKXt2YXIgbz1nKGUpO2k9ZCgwLG8saSksKGk9cygwLE1hdGguZmxvb3Ioby9pKSppLGkpKS5zaGlmdCgpfXJldHVybiBNZSgpLnRocmVzaG9sZHMoaSkuc2l6ZShbdix5XSkoZSkubWFwKG4pfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqaCksdC5jb29yZGluYXRlcy5mb3JFYWNoKGUpLHR9ZnVuY3Rpb24gZSh0KXt0LmZvckVhY2gocil9ZnVuY3Rpb24gcih0KXt0LmZvckVhY2goaSl9ZnVuY3Rpb24gaSh0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixoKS1wLHRbMV09dFsxXSpNYXRoLnBvdygyLGgpLXB9ZnVuY3Rpb24gbygpe3JldHVybiBwPTMqbCx2PWYrMipwPj5oLHk9YysyKnA+PmgsdH12YXIgYT1OZSx1PVNlLGY9OTYwLGM9NTAwLGw9MjAsaD0yLHA9MypsLHY9ZisyKnA+PmgseT1jKzIqcD4+aCxfPW1lKDIwKTtyZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjptZSgrbiksdCk6YX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjptZSgrbiksdCk6dX0sdC5zaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltmLGNdO3ZhciBuPU1hdGguY2VpbCh0WzBdKSxlPU1hdGguY2VpbCh0WzFdKTtpZighKG4+PTB8fG4+PTApKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2l6ZVwiKTtyZXR1cm4gZj1uLGM9ZSxvKCl9LHQuY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PGg7aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2VsbCBzaXplXCIpO3JldHVybiBoPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLG8oKX0sdC50aHJlc2hvbGRzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpBcnJheS5pc0FycmF5KG4pP21lKFVoLmNhbGwobikpOm1lKG4pLHQpOl99LHQuYmFuZHdpZHRoPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobCoobCsxKSk7aWYoISgodD0rdCk+PTApKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgYmFuZHdpZHRoXCIpO3JldHVybiBsPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSxvKCl9LHR9LHQuZGlzcGF0Y2g9Tix0LmRyYWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3Qub24oXCJtb3VzZWRvd24uZHJhZ1wiLGUpLmZpbHRlcihnKS5vbihcInRvdWNoc3RhcnQuZHJhZ1wiLG8pLm9uKFwidG91Y2htb3ZlLmRyYWdcIixhKS5vbihcInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZ1wiLHUpLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsXCJub25lXCIpLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsXCJyZ2JhKDAsMCwwLDApXCIpfWZ1bmN0aW9uIGUoKXtpZighaCYmZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuPWYoXCJtb3VzZVwiLHAuYXBwbHkodGhpcyxhcmd1bWVudHMpLHB0LHRoaXMsYXJndW1lbnRzKTtuJiYoY3QodC5ldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnXCIsciwhMCkub24oXCJtb3VzZXVwLmRyYWdcIixpLCEwKSxfdCh0LmV2ZW50LnZpZXcpLGd0KCksbD0hMSxjPXQuZXZlbnQuY2xpZW50WCxzPXQuZXZlbnQuY2xpZW50WSxuKFwic3RhcnRcIikpfX1mdW5jdGlvbiByKCl7aWYoeXQoKSwhbCl7dmFyIG49dC5ldmVudC5jbGllbnRYLWMsZT10LmV2ZW50LmNsaWVudFktcztsPW4qbitlKmU+bX15Lm1vdXNlKFwiZHJhZ1wiKX1mdW5jdGlvbiBpKCl7Y3QodC5ldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZ1wiLG51bGwpLGJ0KHQuZXZlbnQudmlldyxsKSx5dCgpLHkubW91c2UoXCJlbmRcIil9ZnVuY3Rpb24gbygpe2lmKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixlLHI9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxpPXAuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89ci5sZW5ndGg7Zm9yKG49MDtuPG87KytuKShlPWYocltuXS5pZGVudGlmaWVyLGksdnQsdGhpcyxhcmd1bWVudHMpKSYmKGd0KCksZShcInN0YXJ0XCIpKX19ZnVuY3Rpb24gYSgpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKG49MDtuPGk7KytuKShlPXlbcltuXS5pZGVudGlmaWVyXSkmJih5dCgpLGUoXCJkcmFnXCIpKX1mdW5jdGlvbiB1KCl7dmFyIG4sZSxyPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT1yLmxlbmd0aDtmb3IoaCYmY2xlYXJUaW1lb3V0KGgpLGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0sNTAwKSxuPTA7bjxpOysrbikoZT15W3Jbbl0uaWRlbnRpZmllcl0pJiYoZ3QoKSxlKFwiZW5kXCIpKX1mdW5jdGlvbiBmKGUscixpLG8sYSl7dmFyIHUsZixjLHM9aShyLGUpLGw9Xy5jb3B5KCk7aWYob3QobmV3IHh0KG4sXCJiZWZvcmVzdGFydFwiLHUsZSxiLHNbMF0sc1sxXSwwLDAsbCksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHQuZXZlbnQuc3ViamVjdD11PXYuYXBwbHkobyxhKSkmJihmPXUueC1zWzBdfHwwLGM9dS55LXNbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIHQoaCl7dmFyIGQscD1zO3N3aXRjaChoKXtjYXNlXCJzdGFydFwiOnlbZV09dCxkPWIrKzticmVhaztjYXNlXCJlbmRcIjpkZWxldGUgeVtlXSwtLWI7Y2FzZVwiZHJhZ1wiOnM9aShyLGUpLGQ9Yn1vdChuZXcgeHQobixoLHUsZSxkLHNbMF0rZixzWzFdK2Msc1swXS1wWzBdLHNbMV0tcFsxXSxsKSxsLmFwcGx5LGwsW2gsbyxhXSl9fXZhciBjLHMsbCxoLGQ9d3QscD1NdCx2PUF0LGc9VHQseT17fSxfPU4oXCJzdGFydFwiLFwiZHJhZ1wiLFwiZW5kXCIpLGI9MCxtPTA7cmV0dXJuIG4uZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDptdCghIXQpLG4pOmR9LG4uY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDptdCh0KSxuKTpwfSxuLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om10KHQpLG4pOnZ9LG4udG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDptdCghIXQpLG4pOmd9LG4ub249ZnVuY3Rpb24oKXt2YXIgdD1fLm9uLmFwcGx5KF8sYXJndW1lbnRzKTtyZXR1cm4gdD09PV8/bjp0fSxuLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09KHQ9K3QpKnQsbik6TWF0aC5zcXJ0KG0pfSxufSx0LmRyYWdEaXNhYmxlPV90LHQuZHJhZ0VuYWJsZT1idCx0LmRzdkZvcm1hdD1rZSx0LmNzdlBhcnNlPUhoLHQuY3N2UGFyc2VSb3dzPVhoLHQuY3N2Rm9ybWF0PUdoLHQuY3N2Rm9ybWF0Um93cz1WaCx0LnRzdlBhcnNlPVdoLHQudHN2UGFyc2VSb3dzPVpoLHQudHN2Rm9ybWF0PVFoLHQudHN2Rm9ybWF0Um93cz1KaCx0LmVhc2VMaW5lYXI9ZnVuY3Rpb24odCl7cmV0dXJuK3R9LHQuZWFzZVF1YWQ9Rm4sdC5lYXNlUXVhZEluPWZ1bmN0aW9uKHQpe3JldHVybiB0KnR9LHQuZWFzZVF1YWRPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQqKDItdCl9LHQuZWFzZVF1YWRJbk91dD1Gbix0LmVhc2VDdWJpYz1Jbix0LmVhc2VDdWJpY0luPWZ1bmN0aW9uKHQpe3JldHVybiB0KnQqdH0sdC5lYXNlQ3ViaWNPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuLS10KnQqdCsxfSx0LmVhc2VDdWJpY0luT3V0PUluLHQuZWFzZVBvbHk9WGwsdC5lYXNlUG9seUluPWpsLHQuZWFzZVBvbHlPdXQ9SGwsdC5lYXNlUG9seUluT3V0PVhsLHQuZWFzZVNpbj1qbix0LmVhc2VTaW5Jbj1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KlZsKX0sdC5lYXNlU2luT3V0PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpbih0KlZsKX0sdC5lYXNlU2luSW5PdXQ9am4sdC5lYXNlRXhwPUhuLHQuZWFzZUV4cEluPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKnQtMTApfSx0LmVhc2VFeHBPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9LHQuZWFzZUV4cEluT3V0PUhuLHQuZWFzZUNpcmNsZT1Ybix0LmVhc2VDaXJjbGVJbj1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfSx0LmVhc2VDaXJjbGVPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9LHQuZWFzZUNpcmNsZUluT3V0PVhuLHQuZWFzZUJvdW5jZT1Hbix0LmVhc2VCb3VuY2VJbj1mdW5jdGlvbih0KXtyZXR1cm4gMS1HbigxLXQpfSx0LmVhc2VCb3VuY2VPdXQ9R24sdC5lYXNlQm91bmNlSW5PdXQ9ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT8xLUduKDEtdCk6R24odC0xKSsxKS8yfSx0LmVhc2VCYWNrPWFoLHQuZWFzZUJhY2tJbj1paCx0LmVhc2VCYWNrT3V0PW9oLHQuZWFzZUJhY2tJbk91dD1haCx0LmVhc2VFbGFzdGljPWNoLHQuZWFzZUVsYXN0aWNJbj1maCx0LmVhc2VFbGFzdGljT3V0PWNoLHQuZWFzZUVsYXN0aWNJbk91dD1zaCx0LmJsb2I9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZmV0Y2godCxuKS50aGVuKENlKX0sdC5idWZmZXI9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZmV0Y2godCxuKS50aGVuKFBlKX0sdC5kc3Y9ZnVuY3Rpb24odCxuLGUscil7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUsZT12b2lkIDApO3ZhciBpPWtlKHQpO3JldHVybiBSZShuLGUpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pfSx0LmNzdj1LaCx0LnRzdj10ZCx0LmltYWdlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiBuKWlbb109bltvXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe2UoaSl9LGkuc3JjPXR9KX0sdC5qc29uPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihEZSl9LHQudGV4dD1SZSx0LnhtbD1uZCx0Lmh0bWw9ZWQsdC5zdmc9cmQsdC5mb3JjZUNlbnRlcj1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoKXt2YXIgZSxpLG89ci5sZW5ndGgsYT0wLHU9MDtmb3IoZT0wO2U8bzsrK2UpYSs9KGk9cltlXSkueCx1Kz1pLnk7Zm9yKGE9YS9vLXQsdT11L28tbixlPTA7ZTxvOysrZSkoaT1yW2VdKS54LT1hLGkueS09dX12YXIgcjtyZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09biYmKG49MCksZS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dH0sZS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLGUpOnR9LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxlKTpufSxlfSx0LmZvcmNlQ29sbGlkZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7Zm9yKHZhciB0LG4scixmLGMscyxsLGg9aS5sZW5ndGgsZD0wO2Q8dTsrK2QpZm9yKG49amUoaSxHZSxWZSkudmlzaXRBZnRlcihlKSx0PTA7dDxoOysrdClyPWlbdF0scz1vW3IuaW5kZXhdLGw9cypzLGY9ci54K3IudngsYz1yLnkrci52eSxuLnZpc2l0KGZ1bmN0aW9uKHQsbixlLGksbyl7dmFyIHU9dC5kYXRhLGg9dC5yLGQ9cytoO2lmKCF1KXJldHVybiBuPmYrZHx8aTxmLWR8fGU+YytkfHxvPGMtZDtpZih1LmluZGV4PnIuaW5kZXgpe3ZhciBwPWYtdS54LXUudngsdj1jLXUueS11LnZ5LGc9cCpwK3YqdjtnPGQqZCYmKDA9PT1wJiYocD1PZSgpLGcrPXAqcCksMD09PXYmJih2PU9lKCksZys9dip2KSxnPShkLShnPU1hdGguc3FydChnKSkpL2cqYSxyLnZ4Kz0ocCo9ZykqKGQ9KGgqPWgpLyhsK2gpKSxyLnZ5Kz0odio9ZykqZCx1LnZ4LT1wKihkPTEtZCksdS52eS09dipkKX19KX1mdW5jdGlvbiBlKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW9bdC5kYXRhLmluZGV4XTtmb3IodmFyIG49dC5yPTA7bjw0Oysrbil0W25dJiZ0W25dLnI+dC5yJiYodC5yPXRbbl0ucil9ZnVuY3Rpb24gcigpe2lmKGkpe3ZhciBuLGUscj1pLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkociksbj0wO248cjsrK24pZT1pW25dLG9bZS5pbmRleF09K3QoZSxuLGkpfX12YXIgaSxvLGE9MSx1PTE7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9cWUobnVsbD09dD8xOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxyKCl9LG4uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxuKTp1fSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LG4pOmF9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpxZSgrZSkscigpLG4pOnR9LG59LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4obil7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPGQ7KytlKWZvcih2YXIgaSx1LGYscyxsLGgscCx2PTA7djxyOysrdil1PShpPXRbdl0pLnNvdXJjZSxzPShmPWkudGFyZ2V0KS54K2YudngtdS54LXUudnh8fE9lKCksbD1mLnkrZi52eS11LnktdS52eXx8T2UoKSxzKj1oPSgoaD1NYXRoLnNxcnQocypzK2wqbCkpLWFbdl0pL2gqbipvW3ZdLGwqPWgsZi52eC09cyoocD1jW3ZdKSxmLnZ5LT1sKnAsdS52eCs9cyoocD0xLXApLHUudnkrPWwqcH1mdW5jdGlvbiBlKCl7aWYodSl7dmFyIG4sZSxsPXUubGVuZ3RoLGg9dC5sZW5ndGgsZD1oZSh1LHMpO2ZvcihuPTAsZj1uZXcgQXJyYXkobCk7bjxoOysrbikoZT10W25dKS5pbmRleD1uLFwib2JqZWN0XCIhPXR5cGVvZiBlLnNvdXJjZSYmKGUuc291cmNlPVdlKGQsZS5zb3VyY2UpKSxcIm9iamVjdFwiIT10eXBlb2YgZS50YXJnZXQmJihlLnRhcmdldD1XZShkLGUudGFyZ2V0KSksZltlLnNvdXJjZS5pbmRleF09KGZbZS5zb3VyY2UuaW5kZXhdfHwwKSsxLGZbZS50YXJnZXQuaW5kZXhdPShmW2UudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iobj0wLGM9bmV3IEFycmF5KGgpO248aDsrK24pZT10W25dLGNbbl09ZltlLnNvdXJjZS5pbmRleF0vKGZbZS5zb3VyY2UuaW5kZXhdK2ZbZS50YXJnZXQuaW5kZXhdKTtvPW5ldyBBcnJheShoKSxyKCksYT1uZXcgQXJyYXkoaCksaSgpfX1mdW5jdGlvbiByKCl7aWYodSlmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pb1tuXT0rbCh0W25dLG4sdCl9ZnVuY3Rpb24gaSgpe2lmKHUpZm9yKHZhciBuPTAsZT10Lmxlbmd0aDtuPGU7KytuKWFbbl09K2godFtuXSxuLHQpfXZhciBvLGEsdSxmLGMscz0kZSxsPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGZbdC5zb3VyY2UuaW5kZXhdLGZbdC50YXJnZXQuaW5kZXhdKX0saD1xZSgzMCksZD0xO3JldHVybiBudWxsPT10JiYodD1bXSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3U9dCxlKCl9LG4ubGlua3M9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cixlKCksbik6dH0sbi5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LG4pOnN9LG4uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxuKTpkfSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpxZSgrdCkscigpLG4pOmx9LG4uZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnFlKCt0KSxpKCksbik6aH0sbn0sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbix1PWkubGVuZ3RoLGY9amUoaSxaZSxRZSkudmlzaXRBZnRlcihlKTtmb3IoYT10LG49MDtuPHU7KytuKW89aVtuXSxmLnZpc2l0KHIpfWZ1bmN0aW9uIG4oKXtpZihpKXt2YXIgdCxuLGU9aS5sZW5ndGg7Zm9yKHU9bmV3IEFycmF5KGUpLHQ9MDt0PGU7Kyt0KW49aVt0XSx1W24uaW5kZXhdPStmKG4sdCxpKX19ZnVuY3Rpb24gZSh0KXt2YXIgbixlLHIsaSxvLGE9MCxmPTA7aWYodC5sZW5ndGgpe2ZvcihyPWk9bz0wO288NDsrK28pKG49dFtvXSkmJihlPU1hdGguYWJzKG4udmFsdWUpKSYmKGErPW4udmFsdWUsZis9ZSxyKz1lKm4ueCxpKz1lKm4ueSk7dC54PXIvZix0Lnk9aS9mfWVsc2V7KG49dCkueD1uLmRhdGEueCxuLnk9bi5kYXRhLnk7ZG97YSs9dVtuLmRhdGEuaW5kZXhdfXdoaWxlKG49bi5uZXh0KX10LnZhbHVlPWF9ZnVuY3Rpb24gcih0LG4sZSxyKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgaT10Lngtby54LGY9dC55LW8ueSxoPXItbixkPWkqaStmKmY7aWYoaCpoL2w8ZClyZXR1cm4gZDxzJiYoMD09PWkmJihpPU9lKCksZCs9aSppKSwwPT09ZiYmKGY9T2UoKSxkKz1mKmYpLGQ8YyYmKGQ9TWF0aC5zcXJ0KGMqZCkpLG8udngrPWkqdC52YWx1ZSphL2Qsby52eSs9Zip0LnZhbHVlKmEvZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49cykpeyh0LmRhdGEhPT1vfHx0Lm5leHQpJiYoMD09PWkmJihpPU9lKCksZCs9aSppKSwwPT09ZiYmKGY9T2UoKSxkKz1mKmYpLGQ8YyYmKGQ9TWF0aC5zcXJ0KGMqZCkpKTtkb3t0LmRhdGEhPT1vJiYoaD11W3QuZGF0YS5pbmRleF0qYS9kLG8udngrPWkqaCxvLnZ5Kz1mKmgpfXdoaWxlKHQ9dC5uZXh0KX19dmFyIGksbyxhLHUsZj1xZSgtMzApLGM9MSxzPTEvMCxsPS44MTtyZXR1cm4gdC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxuKCl9LHQuc3RyZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnFlKCtlKSxuKCksdCk6Zn0sdC5kaXN0YW5jZU1pbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uKm4sdCk6TWF0aC5zcXJ0KGMpfSx0LmRpc3RhbmNlTWF4PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4qbix0KTpNYXRoLnNxcnQocyl9LHQudGhldGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bipuLHQpOk1hdGguc3FydChsKX0sdH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LG4sZSl7ZnVuY3Rpb24gcih0KXtmb3IodmFyIHI9MCxpPW8ubGVuZ3RoO3I8aTsrK3Ipe3ZhciBmPW9bcl0sYz1mLngtbnx8MWUtNixzPWYueS1lfHwxZS02LGw9TWF0aC5zcXJ0KGMqYytzKnMpLGg9KHVbcl0tbCkqYVtyXSp0L2w7Zi52eCs9YypoLGYudnkrPXMqaH19ZnVuY3Rpb24gaSgpe2lmKG8pe3ZhciBuLGU9by5sZW5ndGg7Zm9yKGE9bmV3IEFycmF5KGUpLHU9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXVbbl09K3Qob1tuXSxuLG8pLGFbbl09aXNOYU4odVtuXSk/MDorZihvW25dLG4sbyl9fXZhciBvLGEsdSxmPXFlKC4xKTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1xZSgrdCkpLG51bGw9PW4mJihuPTApLG51bGw9PWUmJihlPTApLHIuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtvPXQsaSgpfSxyLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpxZSgrdCksaSgpLHIpOmZ9LHIucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpxZSgrbiksaSgpLHIpOnR9LHIueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscik6ZX0scn0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe2UoKSxkLmNhbGwoXCJ0aWNrXCIsbyksYTx1JiYoaC5zdG9wKCksZC5jYWxsKFwiZW5kXCIsbykpfWZ1bmN0aW9uIGUoKXt2YXIgbixlLHI9dC5sZW5ndGg7Zm9yKGErPShjLWEpKmYsbC5lYWNoKGZ1bmN0aW9uKHQpe3QoYSl9KSxuPTA7bjxyOysrbiludWxsPT0oZT10W25dKS5meD9lLngrPWUudngqPXM6KGUueD1lLmZ4LGUudng9MCksbnVsbD09ZS5meT9lLnkrPWUudnkqPXM6KGUueT1lLmZ5LGUudnk9MCl9ZnVuY3Rpb24gcigpe2Zvcih2YXIgbixlPTAscj10Lmxlbmd0aDtlPHI7KytlKXtpZihuPXRbZV0sbi5pbmRleD1lLGlzTmFOKG4ueCl8fGlzTmFOKG4ueSkpe3ZhciBpPW9kKk1hdGguc3FydChlKSxvPWUqYWQ7bi54PWkqTWF0aC5jb3Mobyksbi55PWkqTWF0aC5zaW4obyl9KGlzTmFOKG4udngpfHxpc05hTihuLnZ5KSkmJihuLnZ4PW4udnk9MCl9fWZ1bmN0aW9uIGkobil7cmV0dXJuIG4uaW5pdGlhbGl6ZSYmbi5pbml0aWFsaXplKHQpLG59dmFyIG8sYT0xLHU9LjAwMSxmPTEtTWF0aC5wb3codSwxLzMwMCksYz0wLHM9LjYsbD1oZSgpLGg9VG4obiksZD1OKFwidGlja1wiLFwiZW5kXCIpO3JldHVybiBudWxsPT10JiYodD1bXSkscigpLG89e3RpY2s6ZSxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdGFydChuKSxvfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3RvcCgpLG99LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scigpLGwuZWFjaChpKSxvKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKTphfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxvKTp1fSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0LG8pOitmfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxvKTpjfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTEtdCxvKToxLXN9LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9sLnJlbW92ZSh0KTpsLnNldCh0LGkobikpLG8pOmwuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKG4sZSxyKXt2YXIgaSxvLGEsdSxmLGM9MCxzPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsYz0wO2M8czsrK2MpKGE9KGk9bi0odT10W2NdKS54KSppKyhvPWUtdS55KSpvKTxyJiYoZj11LHI9YSk7cmV0dXJuIGZ9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZC5vbih0LG4pLG8pOmQub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG4sZT0wLGE9ci5sZW5ndGg7ZTxhOysrZSkobj1yW2VdKS52eCs9KG9bZV0tbi54KSppW2VdKnR9ZnVuY3Rpb24gZSgpe2lmKHIpe3ZhciBuLGU9ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKWlbbl09aXNOYU4ob1tuXT0rdChyW25dLG4scikpPzA6K2EocltuXSxuLHIpfX12YXIgcixpLG8sYT1xZSguMSk7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9cWUobnVsbD09dD8wOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxlKCl9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnFlKCt0KSxlKCksbik6YX0sbi54PWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpxZSgrciksZSgpLG4pOnR9LG59LHQuZm9yY2VZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuLGU9MCxhPXIubGVuZ3RoO2U8YTsrK2UpKG49cltlXSkudnkrPShvW2VdLW4ueSkqaVtlXSp0fWZ1bmN0aW9uIGUoKXtpZihyKXt2YXIgbixlPXIubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilpW25dPWlzTmFOKG9bbl09K3QocltuXSxuLHIpKT8wOithKHJbbl0sbixyKX19dmFyIHIsaSxvLGE9cWUoLjEpO3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PXFlKG51bGw9PXQ/MDordCkpLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZSgpfSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpxZSgrdCksZSgpLG4pOmF9LG4ueT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6cWUoK3IpLGUoKSxuKTp0fSxufSx0LmZvcm1hdERlZmF1bHRMb2NhbGU9b3IsdC5mb3JtYXRMb2NhbGU9aXIsdC5mb3JtYXRTcGVjaWZpZXI9dHIsdC5wcmVjaXNpb25GaXhlZD1hcix0LnByZWNpc2lvblByZWZpeD11cix0LnByZWNpc2lvblJvdW5kPWZyLHQuZ2VvQXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gZHAucmVzZXQoKSxicih0LHBwKSwyKmRwfSx0Lmdlb0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLGEsdTtpZihtZD1iZD0tKHlkPV9kPTEvMCksVGQ9W10sYnIodCxncCksZT1UZC5sZW5ndGgpe2ZvcihUZC5zb3J0KFlyKSxuPTEsbz1bcj1UZFswXV07bjxlOysrbilCcihyLChpPVRkW25dKVswXSl8fEJyKHIsaVsxXSk/KE9yKHJbMF0saVsxXSk+T3IoclswXSxyWzFdKSYmKHJbMV09aVsxXSksT3IoaVswXSxyWzFdKT5PcihyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6by5wdXNoKHI9aSk7Zm9yKGE9LTEvMCxuPTAscj1vW2U9by5sZW5ndGgtMV07bjw9ZTtyPWksKytuKWk9b1tuXSwodT1PcihyWzFdLGlbMF0pKT5hJiYoYT11LHlkPWlbMF0sYmQ9clsxXSl9cmV0dXJuIFRkPU5kPW51bGwseWQ9PT0xLzB8fF9kPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3lkLF9kXSxbYmQsbWRdXX0sdC5nZW9DZW50cm9pZD1mdW5jdGlvbih0KXtTZD1FZD1rZD1DZD1QZD16ZD1SZD1MZD1EZD1VZD1xZD0wLGJyKHQseXApO3ZhciBuPURkLGU9VWQscj1xZCxpPW4qbitlKmUrcipyO3JldHVybiBpPFhkJiYobj16ZCxlPVJkLHI9TGQsRWQ8SGQmJihuPWtkLGU9Q2Qscj1QZCksKGk9bipuK2UqZStyKnIpPFhkKT9bTmFOLE5hTl06W3RwKGUsbikqWmQsZHIoci9mcChpKSkqWmRdfSx0Lmdlb0NpcmNsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKlFkLGY9by5hcHBseSh0aGlzLGFyZ3VtZW50cykqUWQ7cmV0dXJuIG49W10sZT10aSgtdFswXSpRZCwtdFsxXSpRZCwwKS5pbnZlcnQsb2koYSx1LGYsMSksdD17dHlwZTpcIlBvbHlnb25cIixjb29yZGluYXRlczpbbl19LG49ZT1udWxsLHR9dmFyIG4sZSxyPVFyKFswLDBdKSxpPVFyKDkwKSxvPVFyKDYpLGE9e3BvaW50OmZ1bmN0aW9uKHQscil7bi5wdXNoKHQ9ZSh0LHIpKSx0WzBdKj1aZCx0WzFdKj1aZH19O3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246UXIoWytuWzBdLCtuWzFdXSksdCk6cn0sdC5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOlFyKCtuKSx0KTppfSx0LnByZWNpc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246UXIoK24pLHQpOm99LHR9LHQuZ2VvQ2xpcEFudGltZXJpZGlhbj1DcCx0Lmdlb0NsaXBDaXJjbGU9Z2ksdC5nZW9DbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHI9MCxpPTAsbz05NjAsYT01MDA7cmV0dXJuIGU9e3N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gdCYmbj09PWU/dDp0PXlpKHIsaSxvLGEpKG49ZSl9LGV4dGVudDpmdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdVswXVswXSxpPSt1WzBdWzFdLG89K3VbMV1bMF0sYT0rdVsxXVsxXSx0PW49bnVsbCxlKTpbW3IsaV0sW28sYV1dfX19LHQuZ2VvQ2xpcFJlY3RhbmdsZT15aSx0Lmdlb0NvbnRhaW5zPWZ1bmN0aW9uKHQsbil7cmV0dXJuKHQmJnFwLmhhc093blByb3BlcnR5KHQudHlwZSk/cXBbdC50eXBlXTpNaSkodCxuKX0sdC5nZW9EaXN0YW5jZT13aSx0Lmdlb0dyYXRpY3VsZT1QaSx0Lmdlb0dyYXRpY3VsZTEwPWZ1bmN0aW9uKCl7cmV0dXJuIFBpKCkoKX0sdC5nZW9JbnRlcnBvbGF0ZT1mdW5jdGlvbih0LG4pe3ZhciBlPXRbMF0qUWQscj10WzFdKlFkLGk9blswXSpRZCxvPW5bMV0qUWQsYT1ucChyKSx1PWFwKHIpLGY9bnAobyksYz1hcChvKSxzPWEqbnAoZSksbD1hKmFwKGUpLGg9ZipucChpKSxkPWYqYXAoaSkscD0yKmRyKGZwKHByKG8tcikrYSpmKnByKGktZSkpKSx2PWFwKHApLGc9cD9mdW5jdGlvbih0KXt2YXIgbj1hcCh0Kj1wKS92LGU9YXAocC10KS92LHI9ZSpzK24qaCxpPWUqbCtuKmQsbz1lKnUrbipjO3JldHVyblt0cChpLHIpKlpkLHRwKG8sZnAocipyK2kqaSkpKlpkXX06ZnVuY3Rpb24oKXtyZXR1cm5bZSpaZCxyKlpkXX07cmV0dXJuIGcuZGlzdGFuY2U9cCxnfSx0Lmdlb0xlbmd0aD14aSx0Lmdlb1BhdGg9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cygrby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGJyKHQscihpKSkpLGkucmVzdWx0KCl9dmFyIHIsaSxvPTQuNTtyZXR1cm4gZS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBicih0LHIoRnApKSxGcC5yZXN1bHQoKX0sZS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBicih0LHIoY3YpKSxjdi5yZXN1bHQoKX0sZS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGJyKHQscihHcCkpLEdwLnJlc3VsdCgpfSxlLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBicih0LHIoZXYpKSxldi5yZXN1bHQoKX0sZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/KHQ9bnVsbCx6aSk6KHQ9bikuc3RyZWFtLGUpOnR9LGUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10PyhuPW51bGwsbmV3IFdpKTpuZXcgR2kobj10KSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvJiZpLnBvaW50UmFkaXVzKG8pLGUpOm59LGUucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVzKCt0KSwrdCksZSk6b30sZS5wcm9qZWN0aW9uKHQpLmNvbnRleHQobil9LHQuZ2VvQWxiZXJzPWxvLHQuZ2VvQWxiZXJzVXNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbj10WzBdLGU9dFsxXTtyZXR1cm4gdT1udWxsLGkucG9pbnQobixlKSx1fHwoby5wb2ludChuLGUpLHUpfHwoYS5wb2ludChuLGUpLHUpfWZ1bmN0aW9uIG4oKXtyZXR1cm4gZT1yPW51bGwsdH12YXIgZSxyLGksbyxhLHUsZj1sbygpLGM9c28oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHM9c28oKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksbD17cG9pbnQ6ZnVuY3Rpb24odCxuKXt1PVt0LG5dfX07cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBuPWYuc2NhbGUoKSxlPWYudHJhbnNsYXRlKCkscj0odFswXS1lWzBdKS9uLGk9KHRbMV0tZVsxXSkvbjtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJnI+PS0uNDI1JiZyPC0uMjE0P2M6aT49LjE2NiYmaTwuMjM0JiZyPj0tLjIxNCYmcjwtLjExNT9zOmYpLmludmVydCh0KX0sdC5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGUmJnI9PT10P2U6ZT1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIGk9LTE7KytpPG47KXRbaV0ucG9pbnQoZSxyKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPS0xOysrZTxuOyl0W2VdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ucG9seWdvbkVuZCgpfX19KFtmLnN0cmVhbShyPXQpLGMuc3RyZWFtKHQpLHMuc3RyZWFtKHQpXSl9LHQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmLnByZWNpc2lvbih0KSxjLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSxuKCkpOmYucHJlY2lzaW9uKCl9LHQuc2NhbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGYuc2NhbGUobiksYy5zY2FsZSguMzUqbikscy5zY2FsZShuKSx0LnRyYW5zbGF0ZShmLnRyYW5zbGF0ZSgpKSk6Zi5zY2FsZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZi50cmFuc2xhdGUoKTt2YXIgZT1mLnNjYWxlKCkscj0rdFswXSx1PSt0WzFdO3JldHVybiBpPWYudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tyLS40NTUqZSx1LS4yMzgqZV0sW3IrLjQ1NSplLHUrLjIzOCplXV0pLnN0cmVhbShsKSxvPWMudHJhbnNsYXRlKFtyLS4zMDcqZSx1Ky4yMDEqZV0pLmNsaXBFeHRlbnQoW1tyLS40MjUqZStIZCx1Ky4xMiplK0hkXSxbci0uMjE0KmUtSGQsdSsuMjM0KmUtSGRdXSkuc3RyZWFtKGwpLGE9cy50cmFuc2xhdGUoW3ItLjIwNSplLHUrLjIxMiplXSkuY2xpcEV4dGVudChbW3ItLjIxNCplK0hkLHUrLjE2NiplK0hkXSxbci0uMTE1KmUtSGQsdSsuMjM0KmUtSGRdXSkuc3RyZWFtKGwpLG4oKX0sdC5maXRFeHRlbnQ9ZnVuY3Rpb24obixlKXtyZXR1cm4gdG8odCxuLGUpfSx0LmZpdFNpemU9ZnVuY3Rpb24obixlKXtyZXR1cm4gbm8odCxuLGUpfSx0LmZpdFdpZHRoPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIGVvKHQsbixlKX0sdC5maXRIZWlnaHQ9ZnVuY3Rpb24obixlKXtyZXR1cm4gcm8odCxuLGUpfSx0LnNjYWxlKDEwNzApfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBhbyhkdikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3PWR2LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYW8ocHYpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdz1wdix0Lmdlb0NvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIGZvKF9vKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSx0Lmdlb0NvbmljQ29uZm9ybWFsUmF3PV9vLHQuZ2VvQ29uaWNFcXVhbEFyZWE9c28sdC5nZW9Db25pY0VxdWFsQXJlYVJhdz1jbyx0Lmdlb0NvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZm8obW8pLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LHQuZ2VvQ29uaWNFcXVpZGlzdGFudFJhdz1tbyx0Lmdlb0VxdWlyZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBhbyhibykuc2NhbGUoMTUyLjYzKX0sdC5nZW9FcXVpcmVjdGFuZ3VsYXJSYXc9Ym8sdC5nZW9Hbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBhbyh4bykuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDYwKX0sdC5nZW9Hbm9tb25pY1Jhdz14byx0Lmdlb0lkZW50aXR5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybiBpPW89bnVsbCxhfXZhciBuLGUscixpLG8sYSx1PTEsZj0wLGM9MCxzPTEsbD0xLGg9emksZD1udWxsLHA9emk7cmV0dXJuIGE9e3N0cmVhbTpmdW5jdGlvbih0KXtyZXR1cm4gaSYmbz09PXQ/aTppPWgocChvPXQpKX0scG9zdGNsaXA6ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9aSxkPW49ZT1yPW51bGwsdCgpKTpwfSxjbGlwRXh0ZW50OmZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPW51bGw9PWk/KGQ9bj1lPXI9bnVsbCx6aSk6eWkoZD0raVswXVswXSxuPStpWzBdWzFdLGU9K2lbMV1bMF0scj0raVsxXVsxXSksdCgpKTpudWxsPT1kP251bGw6W1tkLG5dLFtlLHJdXX0sc2NhbGU6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9d28oKHU9K24pKnMsdSpsLGYsYyksdCgpKTp1fSx0cmFuc2xhdGU6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9d28odSpzLHUqbCxmPStuWzBdLGM9K25bMV0pLHQoKSk6W2YsY119LHJlZmxlY3RYOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXdvKHUqKHM9bj8tMToxKSx1KmwsZixjKSx0KCkpOnM8MH0scmVmbGVjdFk6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9d28odSpzLHUqKGw9bj8tMToxKSxmLGMpLHQoKSk6bDwwfSxmaXRFeHRlbnQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdG8oYSx0LG4pfSxmaXRTaXplOmZ1bmN0aW9uKHQsbil7cmV0dXJuIG5vKGEsdCxuKX0sZml0V2lkdGg6ZnVuY3Rpb24odCxuKXtyZXR1cm4gZW8oYSx0LG4pfSxmaXRIZWlnaHQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gcm8oYSx0LG4pfX19LHQuZ2VvUHJvamVjdGlvbj1hbyx0Lmdlb1Byb2plY3Rpb25NdXRhdG9yPXVvLHQuZ2VvTWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZ28odm8pLnNjYWxlKDk2MS9XZCl9LHQuZ2VvTWVyY2F0b3JSYXc9dm8sdC5nZW9OYXR1cmFsRWFydGgxPWZ1bmN0aW9uKCl7cmV0dXJuIGFvKE1vKS5zY2FsZSgxNzUuMjk1KX0sdC5nZW9OYXR1cmFsRWFydGgxUmF3PU1vLHQuZ2VvT3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIGFvKEFvKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK0hkKX0sdC5nZW9PcnRob2dyYXBoaWNSYXc9QW8sdC5nZW9TdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIGFvKFRvKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfSx0Lmdlb1N0ZXJlb2dyYXBoaWNSYXc9VG8sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgdD1nbyhObyksbj10LmNlbnRlcixlPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFstdFsxXSx0WzBdXSk6KHQ9bigpLFt0WzFdLC10WzBdXSl9LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKToodD1lKCksW3RbMF0sdFsxXSx0WzJdLTkwXSl9LGUoWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfSx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdz1Obyx0Lmdlb1JvdGF0aW9uPWlpLHQuZ2VvU3RyZWFtPWJyLHQuZ2VvVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06UWkodCl9fSx0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBvLGE9MDt0LmVhY2hBZnRlcihmdW5jdGlvbih0KXt2YXIgZT10LmNoaWxkcmVuO2U/KHQueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoRW8sMCkvdC5sZW5ndGh9KGUpLHQueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShrbywwKX0oZSkpOih0Lng9bz9hKz1uKHQsbyk6MCx0Lnk9MCxvPXQpfSk7dmFyIHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uWzBdO3JldHVybiB0fSh0KSxmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbjtuPXQuY2hpbGRyZW47KXQ9bltuLmxlbmd0aC0xXTtyZXR1cm4gdH0odCksYz11Lngtbih1LGYpLzIscz1mLngrbihmLHUpLzI7cmV0dXJuIHQuZWFjaEFmdGVyKGk/ZnVuY3Rpb24obil7bi54PShuLngtdC54KSplLG4ueT0odC55LW4ueSkqcn06ZnVuY3Rpb24obil7bi54PShuLngtYykvKHMtYykqZSxuLnk9KDEtKHQueT9uLnkvdC55OjEpKSpyfSl9dmFyIG49U28sZT0xLHI9MSxpPSExO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rblswXSxyPStuWzFdLHQpOmk/bnVsbDpbZSxyXX0sdC5ub2RlU2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPStuWzBdLHI9K25bMV0sdCk6aT9bZSxyXTpudWxsfSx0fSx0LmhpZXJhcmNoeT1Qbyx0LnBhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0Lng9ZS8yLHQueT1yLzIsbj90LmVhY2hCZWZvcmUoUW8obikpLmVhY2hBZnRlcihKbyhpLC41KSkuZWFjaEJlZm9yZShLbygxKSk6dC5lYWNoQmVmb3JlKFFvKFpvKSkuZWFjaEFmdGVyKEpvKCRvLDEpKS5lYWNoQWZ0ZXIoSm8oaSx0LnIvTWF0aC5taW4oZSxyKSkpLmVhY2hCZWZvcmUoS28oTWF0aC5taW4oZSxyKS8oMip0LnIpKSksdH12YXIgbj1udWxsLGU9MSxyPTEsaT0kbztyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpWbyh0KX0oZSksdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdLHI9K25bMV0sdCk6W2Uscl19LHQucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246V28oK24pLHQpOml9LHR9LHQucGFja1NpYmxpbmdzPWZ1bmN0aW9uKHQpe3JldHVybiBHbyh0KSx0fSx0LnBhY2tFbmNsb3NlPVVvLHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbz10LmhlaWdodCsxO3JldHVybiB0LngwPXQueTA9cix0LngxPW4sdC55MT1lL28sdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJm5hKGUsZS54MCx0KihlLmRlcHRoKzEpL24sZS54MSx0KihlLmRlcHRoKzIpL24pO3ZhciBpPWUueDAsbz1lLnkwLGE9ZS54MS1yLHU9ZS55MS1yO2E8aSYmKGk9YT0oaSthKS8yKSx1PG8mJihvPXU9KG8rdSkvMiksZS54MD1pLGUueTA9byxlLngxPWEsZS55MT11fX0oZSxvKSksaSYmdC5lYWNoQmVmb3JlKHRhKSx0fXZhciBuPTEsZT0xLHI9MCxpPSExO3JldHVybiB0LnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhbix0KTppfSx0LnNpemU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3JbMF0sZT0rclsxXSx0KTpbbixlXX0sdC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStuLHQpOnJ9LHR9LHQuc3RyYXRpZnk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciByLGksbyxhLHUsZixjLHM9dC5sZW5ndGgsbD1uZXcgQXJyYXkocyksaD17fTtmb3IoaT0wO2k8czsrK2kpcj10W2ldLHU9bFtpXT1uZXcgRG8ociksbnVsbCE9KGY9bihyLGksdCkpJiYoZis9XCJcIikmJihoW2M9Z3YrKHUuaWQ9ZildPWMgaW4gaD9fdjp1KTtmb3IoaT0wO2k8czsrK2kpaWYodT1sW2ldLG51bGwhPShmPWUodFtpXSxpLHQpKSYmKGYrPVwiXCIpKXtpZighKGE9aFtnditmXSkpdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIrZik7aWYoYT09PV92KXRocm93IG5ldyBFcnJvcihcImFtYmlndW91czogXCIrZik7YS5jaGlsZHJlbj9hLmNoaWxkcmVuLnB1c2godSk6YS5jaGlsZHJlbj1bdV0sdS5wYXJlbnQ9YX1lbHNle2lmKG8pdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwbGUgcm9vdHNcIik7bz11fWlmKCFvKXRocm93IG5ldyBFcnJvcihcIm5vIHJvb3RcIik7aWYoby5wYXJlbnQ9eXYsby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLXN9KS5lYWNoQmVmb3JlKExvKSxvLnBhcmVudD1udWxsLHM+MCl0aHJvdyBuZXcgRXJyb3IoXCJjeWNsZVwiKTtyZXR1cm4gb312YXIgbj1lYSxlPXJhO3JldHVybiB0LmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVZvKGUpLHQpOm59LHQucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Vm8obiksdCk6ZX0sdH0sdC50cmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZj1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGksbyxhPW5ldyBjYSh0LDApLHU9W2FdO249dS5wb3AoKTspaWYocj1uLl8uY2hpbGRyZW4pZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KG89ci5sZW5ndGgpLGk9by0xO2k+PTA7LS1pKXUucHVzaChlPW4uY2hpbGRyZW5baV09bmV3IGNhKHJbaV0saSkpLGUucGFyZW50PW47cmV0dXJuKGEucGFyZW50PW5ldyBjYShudWxsLDApKS5jaGlsZHJlbj1bYV0sYX0odCk7aWYoZi5lYWNoQWZ0ZXIobiksZi5wYXJlbnQubT0tZi56LGYuZWFjaEJlZm9yZShlKSx1KXQuZWFjaEJlZm9yZShyKTtlbHNle3ZhciBjPXQscz10LGw9dDt0LmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PGMueCYmKGM9dCksdC54PnMueCYmKHM9dCksdC5kZXB0aD5sLmRlcHRoJiYobD10KX0pO3ZhciBoPWM9PT1zPzE6aShjLHMpLzIsZD1oLWMueCxwPW8vKHMueCtoK2QpLHY9YS8obC5kZXB0aHx8MSk7dC5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueD0odC54K2QpKnAsdC55PXQuZGVwdGgqdn0pfXJldHVybiB0fWZ1bmN0aW9uIG4odCl7dmFyIG49dC5jaGlsZHJlbixlPXQucGFyZW50LmNoaWxkcmVuLHI9dC5pP2VbdC5pLTFdOm51bGw7aWYobil7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPTAscj0wLGk9dC5jaGlsZHJlbixvPWkubGVuZ3RoOy0tbz49MDspKG49aVtvXSkueis9ZSxuLm0rPWUsZSs9bi5zKyhyKz1uLmMpfSkodCk7dmFyIG89KG5bMF0ueituW24ubGVuZ3RoLTFdLnopLzI7cj8odC56PXIueitpKHQuXyxyLl8pLHQubT10Lnotbyk6dC56PW99ZWxzZSByJiYodC56PXIueitpKHQuXyxyLl8pKTt0LnBhcmVudC5BPWZ1bmN0aW9uKHQsbixlKXtpZihuKXtmb3IodmFyIHIsbz10LGE9dCx1PW4sZj1vLnBhcmVudC5jaGlsZHJlblswXSxjPW8ubSxzPWEubSxsPXUubSxoPWYubTt1PWFhKHUpLG89b2EobyksdSYmbzspZj1vYShmKSwoYT1hYShhKSkuYT10LChyPXUueitsLW8uei1jK2kodS5fLG8uXykpPjAmJih1YShmYSh1LHQsZSksdCxyKSxjKz1yLHMrPXIpLGwrPXUubSxjKz1vLm0saCs9Zi5tLHMrPWEubTt1JiYhYWEoYSkmJihhLnQ9dSxhLm0rPWwtcyksbyYmIW9hKGYpJiYoZi50PW8sZi5tKz1jLWgsZT10KX1yZXR1cm4gZX0odCxyLHQucGFyZW50LkF8fGVbMF0pfWZ1bmN0aW9uIGUodCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHIodCl7dC54Kj1vLHQueT10LmRlcHRoKmF9dmFyIGk9aWEsbz0xLGE9MSx1PW51bGw7cmV0dXJuIHQuc2VwYXJhdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLHQpOml9LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hMSxvPStuWzBdLGE9K25bMV0sdCk6dT9udWxsOltvLGFdfSx0Lm5vZGVTaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSEwLG89K25bMF0sYT0rblsxXSx0KTp1P1tvLGFdOm51bGx9LHR9LHQudHJlZW1hcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9aSx0LnkxPW8sdC5lYWNoQmVmb3JlKG4pLGE9WzBdLHImJnQuZWFjaEJlZm9yZSh0YSksdH1mdW5jdGlvbiBuKHQpe3ZhciBuPWFbdC5kZXB0aF0scj10LngwK24saT10LnkwK24sbz10LngxLW4saD10LnkxLW47bzxyJiYocj1vPShyK28pLzIpLGg8aSYmKGk9aD0oaStoKS8yKSx0LngwPXIsdC55MD1pLHQueDE9byx0LnkxPWgsdC5jaGlsZHJlbiYmKG49YVt0LmRlcHRoKzFdPXUodCkvMixyKz1sKHQpLW4saSs9Zih0KS1uLG8tPWModCktbixoLT1zKHQpLW4sbzxyJiYocj1vPShyK28pLzIpLGg8aSYmKGk9aD0oaStoKS8yKSxlKHQscixpLG8saCkpfXZhciBlPW12LHI9ITEsaT0xLG89MSxhPVswXSx1PSRvLGY9JG8sYz0kbyxzPSRvLGw9JG87cmV0dXJuIHQucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISFuLHQpOnJ9LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rblswXSxvPStuWzFdLHQpOltpLG9dfSx0LnRpbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Vm8obiksdCk6ZX0sdC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QucGFkZGluZ0lubmVyKG4pLnBhZGRpbmdPdXRlcihuKTp0LnBhZGRpbmdJbm5lcigpfSx0LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246V28oK24pLHQpOnV9LHQucGFkZGluZ091dGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QucGFkZGluZ1RvcChuKS5wYWRkaW5nUmlnaHQobikucGFkZGluZ0JvdHRvbShuKS5wYWRkaW5nTGVmdChuKTp0LnBhZGRpbmdUb3AoKX0sdC5wYWRkaW5nVG9wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpXbygrbiksdCk6Zn0sdC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOldvKCtuKSx0KTpjfSx0LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOldvKCtuKSx0KTpzfSx0LnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpXbygrbiksdCk6bH0sdH0sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsbixlLHIsaSl7ZnVuY3Rpb24gbyh0LG4sZSxyLGksYSx1KXtpZih0Pj1uLTEpe3ZhciBjPWZbdF07cmV0dXJuIGMueDA9cixjLnkwPWksYy54MT1hLHZvaWQoYy55MT11KX1mb3IodmFyIGw9c1t0XSxoPWUvMitsLGQ9dCsxLHA9bi0xO2Q8cDspe3ZhciB2PWQrcD4+PjE7c1t2XTxoP2Q9disxOnA9dn1oLXNbZC0xXTxzW2RdLWgmJnQrMTxkJiYtLWQ7dmFyIGc9c1tkXS1sLHk9ZS1nO2lmKGEtcj51LWkpe3ZhciBfPShyKnkrYSpnKS9lO28odCxkLGcscixpLF8sdSksbyhkLG4seSxfLGksYSx1KX1lbHNle3ZhciBiPShpKnkrdSpnKS9lO28odCxkLGcscixpLGEsYiksbyhkLG4seSxyLGIsYSx1KX19dmFyIGEsdSxmPXQuY2hpbGRyZW4sYz1mLmxlbmd0aCxzPW5ldyBBcnJheShjKzEpO2ZvcihzWzBdPXU9YT0wO2E8YzsrK2Epc1thKzFdPXUrPWZbYV0udmFsdWU7bygwLGMsdC52YWx1ZSxuLGUscixpKX0sdC50cmVlbWFwRGljZT1uYSx0LnRyZWVtYXBTbGljZT1zYSx0LnRyZWVtYXBTbGljZURpY2U9ZnVuY3Rpb24odCxuLGUscixpKXsoMSZ0LmRlcHRoP3NhOm5hKSh0LG4sZSxyLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1tdix0LnRyZWVtYXBSZXNxdWFyaWZ5PXh2LHQuaW50ZXJwb2xhdGU9ZG4sdC5pbnRlcnBvbGF0ZUFycmF5PWZuLHQuaW50ZXJwb2xhdGVCYXNpcz1LdCx0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9dG4sdC5pbnRlcnBvbGF0ZURhdGU9Y24sdC5pbnRlcnBvbGF0ZU51bWJlcj1zbix0LmludGVycG9sYXRlT2JqZWN0PWxuLHQuaW50ZXJwb2xhdGVSb3VuZD1wbix0LmludGVycG9sYXRlU3RyaW5nPWhuLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9c2wsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz1sbCx0LmludGVycG9sYXRlWm9vbT1fbix0LmludGVycG9sYXRlUmdiPXJsLHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1pbCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9b2wsdC5pbnRlcnBvbGF0ZUhzbD1nbCx0LmludGVycG9sYXRlSHNsTG9uZz15bCx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQsbil7dmFyIGU9YW4oKHQ9RnQodCkpLmwsKG49RnQobikpLmwpLHI9YW4odC5hLG4uYSksaT1hbih0LmIsbi5iKSxvPWFuKHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5sPWUobiksdC5hPXIobiksdC5iPWkobiksdC5vcGFjaXR5PW8obiksdCtcIlwifX0sdC5pbnRlcnBvbGF0ZUhjbD1fbCx0LmludGVycG9sYXRlSGNsTG9uZz1ibCx0LmludGVycG9sYXRlQ3ViZWhlbGl4PW1sLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPXhsLHQucGllY2V3aXNlPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPTAscj1uLmxlbmd0aC0xLGk9blswXSxvPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KW9bZV09dChpLGk9blsrK2VdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49TWF0aC5tYXgoMCxNYXRoLm1pbihyLTEsTWF0aC5mbG9vcih0Kj1yKSkpO3JldHVybiBvW25dKHQtbil9fSx0LnF1YW50aXplPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcillW3JdPXQoci8obi0xKSk7cmV0dXJuIGV9LHQucGF0aD1vZSx0LnBvbHlnb25BcmVhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sbz0wOysrZTxyOyluPWksaT10W2VdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn0sdC5wb2x5Z29uQ2VudHJvaWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj0tMSxpPXQubGVuZ3RoLG89MCxhPTAsdT10W2ktMV0sZj0wOysrcjxpOyluPXUsdT10W3JdLGYrPWU9blswXSp1WzFdLXVbMF0qblsxXSxvKz0oblswXSt1WzBdKSplLGErPShuWzFdK3VbMV0pKmU7cmV0dXJuIGYqPTMsW28vZixhL2ZdfSx0LnBvbHlnb25IdWxsPWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBuLGUscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSk7Zm9yKG49MDtuPGU7KytuKXJbbl09Wyt0W25dWzBdLCt0W25dWzFdLG5dO2ZvcihyLnNvcnQoZGEpLG49MDtuPGU7KytuKWlbbl09W3Jbbl1bMF0sLXJbbl1bMV1dO3ZhciBvPXBhKHIpLGE9cGEoaSksdT1hWzBdPT09b1swXSxmPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKG49by5sZW5ndGgtMTtuPj0wOy0tbiljLnB1c2godFtyW29bbl1dWzJdXSk7Zm9yKG49K3U7bjxhLmxlbmd0aC1mOysrbiljLnB1c2godFtyW2Fbbl1dWzJdXSk7cmV0dXJuIGN9LHQucG9seWdvbkNvbnRhaW5zPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHIsaT10Lmxlbmd0aCxvPXRbaS0xXSxhPW5bMF0sdT1uWzFdLGY9b1swXSxjPW9bMV0scz0hMSxsPTA7bDxpOysrbCllPShvPXRbbF0pWzBdLChyPW9bMV0pPnUhPWM+dSYmYTwoZi1lKSoodS1yKS8oYy1yKStlJiYocz0hcyksZj1lLGM9cjtyZXR1cm4gc30sdC5wb2x5Z29uTGVuZ3RoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9LTEsaT10Lmxlbmd0aCxvPXRbaS0xXSxhPW9bMF0sdT1vWzFdLGY9MDsrK3I8aTspbj1hLGU9dSxuLT1hPShvPXRbcl0pWzBdLGUtPXU9b1sxXSxmKz1NYXRoLnNxcnQobipuK2UqZSk7cmV0dXJuIGZ9LHQucXVhZHRyZWU9amUsdC5yYW5kb21Vbmlmb3JtPXd2LHQucmFuZG9tTm9ybWFsPU12LHQucmFuZG9tTG9nTm9ybWFsPUF2LHQucmFuZG9tQmF0ZXM9TnYsdC5yYW5kb21JcndpbkhhbGw9VHYsdC5yYW5kb21FeHBvbmVudGlhbD1Tdix0LnNjYWxlQmFuZD15YSx0LnNjYWxlUG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gX2EoeWEoKS5wYWRkaW5nSW5uZXIoMSkpfSx0LnNjYWxlSWRlbnRpdHk9RWEsdC5zY2FsZUxpbmVhcj1TYSx0LnNjYWxlTG9nPVVhLHQuc2NhbGVPcmRpbmFsPWdhLHQuc2NhbGVJbXBsaWNpdD1Qdix0LnNjYWxlUG93PU9hLHQuc2NhbGVTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIE9hKCkuZXhwb25lbnQoLjUpfSx0LnNjYWxlUXVhbnRpbGU9WWEsdC5zY2FsZVF1YW50aXplPUJhLHQuc2NhbGVUaHJlc2hvbGQ9RmEsdC5zY2FsZVRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gb2YoY2csdWcsVnYsWHYsanYsRnYsWXYsRHYsdC50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LHQuc2NhbGVVdGM9ZnVuY3Rpb24oKXtyZXR1cm4gb2YoUmcsUGcseWcsdmcsZGcsbGcsWXYsRHYsdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX0sdC5zY2FsZVNlcXVlbnRpYWw9YWYsdC5zY2FsZURpdmVyZ2luZz11Zix0LnNjaGVtZUNhdGVnb3J5MTA9WmcsdC5zY2hlbWVBY2NlbnQ9UWcsdC5zY2hlbWVEYXJrMj1KZyx0LnNjaGVtZVBhaXJlZD1LZyx0LnNjaGVtZVBhc3RlbDE9dHksdC5zY2hlbWVQYXN0ZWwyPW55LHQuc2NoZW1lU2V0MT1leSx0LnNjaGVtZVNldDI9cnksdC5zY2hlbWVTZXQzPWl5LHQuaW50ZXJwb2xhdGVCckJHPWF5LHQuc2NoZW1lQnJCRz1veSx0LmludGVycG9sYXRlUFJHbj1meSx0LnNjaGVtZVBSR249dXksdC5pbnRlcnBvbGF0ZVBpWUc9c3ksdC5zY2hlbWVQaVlHPWN5LHQuaW50ZXJwb2xhdGVQdU9yPWh5LHQuc2NoZW1lUHVPcj1seSx0LmludGVycG9sYXRlUmRCdT1weSx0LnNjaGVtZVJkQnU9ZHksdC5pbnRlcnBvbGF0ZVJkR3k9Z3ksdC5zY2hlbWVSZEd5PXZ5LHQuaW50ZXJwb2xhdGVSZFlsQnU9X3ksdC5zY2hlbWVSZFlsQnU9eXksdC5pbnRlcnBvbGF0ZVJkWWxHbj1teSx0LnNjaGVtZVJkWWxHbj1ieSx0LmludGVycG9sYXRlU3BlY3RyYWw9d3ksdC5zY2hlbWVTcGVjdHJhbD14eSx0LmludGVycG9sYXRlQnVHbj1BeSx0LnNjaGVtZUJ1R249TXksdC5pbnRlcnBvbGF0ZUJ1UHU9TnksdC5zY2hlbWVCdVB1PVR5LHQuaW50ZXJwb2xhdGVHbkJ1PUV5LHQuc2NoZW1lR25CdT1TeSx0LmludGVycG9sYXRlT3JSZD1DeSx0LnNjaGVtZU9yUmQ9a3ksdC5pbnRlcnBvbGF0ZVB1QnVHbj16eSx0LnNjaGVtZVB1QnVHbj1QeSx0LmludGVycG9sYXRlUHVCdT1MeSx0LnNjaGVtZVB1QnU9UnksdC5pbnRlcnBvbGF0ZVB1UmQ9VXksdC5zY2hlbWVQdVJkPUR5LHQuaW50ZXJwb2xhdGVSZFB1PU95LHQuc2NoZW1lUmRQdT1xeSx0LmludGVycG9sYXRlWWxHbkJ1PUJ5LHQuc2NoZW1lWWxHbkJ1PVl5LHQuaW50ZXJwb2xhdGVZbEduPUl5LHQuc2NoZW1lWWxHbj1GeSx0LmludGVycG9sYXRlWWxPckJyPUh5LHQuc2NoZW1lWWxPckJyPWp5LHQuaW50ZXJwb2xhdGVZbE9yUmQ9R3ksdC5zY2hlbWVZbE9yUmQ9WHksdC5pbnRlcnBvbGF0ZUJsdWVzPSR5LHQuc2NoZW1lQmx1ZXM9VnksdC5pbnRlcnBvbGF0ZUdyZWVucz1aeSx0LnNjaGVtZUdyZWVucz1XeSx0LmludGVycG9sYXRlR3JleXM9SnksdC5zY2hlbWVHcmV5cz1ReSx0LmludGVycG9sYXRlUHVycGxlcz10Xyx0LnNjaGVtZVB1cnBsZXM9S3ksdC5pbnRlcnBvbGF0ZVJlZHM9ZV8sdC5zY2hlbWVSZWRzPW5fLHQuaW50ZXJwb2xhdGVPcmFuZ2VzPWlfLHQuc2NoZW1lT3Jhbmdlcz1yXyx0LmludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdD1vXyx0LmludGVycG9sYXRlUmFpbmJvdz1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIG49TWF0aC5hYnModC0uNSk7cmV0dXJuIGZfLmg9MzYwKnQtMTAwLGZfLnM9MS41LTEuNSpuLGZfLmw9LjgtLjkqbixmXytcIlwifSx0LmludGVycG9sYXRlV2FybT1hXyx0LmludGVycG9sYXRlQ29vbD11Xyx0LmludGVycG9sYXRlU2luZWJvdz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxjXy5yPTI1NSoobj1NYXRoLnNpbih0KSkqbixjXy5nPTI1NSoobj1NYXRoLnNpbih0K3NfKSkqbixjXy5iPTI1NSoobj1NYXRoLnNpbih0K2xfKSkqbixjXytcIlwifSx0LmludGVycG9sYXRlVmlyaWRpcz1oXyx0LmludGVycG9sYXRlTWFnbWE9ZF8sdC5pbnRlcnBvbGF0ZUluZmVybm89cF8sdC5pbnRlcnBvbGF0ZVBsYXNtYT12Xyx0LmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gY3QoQyh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSx0LmNyZWF0b3I9Qyx0LmxvY2FsPXN0LHQubWF0Y2hlcj1icyx0Lm1vdXNlPXB0LHQubmFtZXNwYWNlPWssdC5uYW1lc3BhY2VzPXZzLHQuY2xpZW50UG9pbnQ9ZHQsdC5zZWxlY3Q9Y3QsdC5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/bmV3IHV0KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHV0KFtudWxsPT10P1tdOnRdLHdzKX0sdC5zZWxlY3Rpb249ZnQsdC5zZWxlY3Rvcj16LHQuc2VsZWN0b3JBbGw9TCx0LnN0eWxlPUYsdC50b3VjaD12dCx0LnRvdWNoZXM9ZnVuY3Rpb24odCxuKXtudWxsPT1uJiYobj1odCgpLnRvdWNoZXMpO2Zvcih2YXIgZT0wLHI9bj9uLmxlbmd0aDowLGk9bmV3IEFycmF5KHIpO2U8cjsrK2UpaVtlXT1kdCh0LG5bZV0pO3JldHVybiBpfSx0LndpbmRvdz1CLHQuY3VzdG9tRXZlbnQ9b3QsdC5hcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQsYyxzPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLVRfLGQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktVF8scD1nXyhkLWgpLHY9ZD5oO2lmKGZ8fChmPXQ9b2UoKSksbDxzJiYoYz1sLGw9cyxzPWMpLGw+TV8paWYocD5OXy1NXylmLm1vdmVUbyhsKl9fKGgpLGwqeF8oaCkpLGYuYXJjKDAsMCxsLGgsZCwhdikscz5NXyYmKGYubW92ZVRvKHMqX18oZCkscyp4XyhkKSksZi5hcmMoMCwwLHMsZCxoLHYpKTtlbHNle3ZhciBnLHksXz1oLGI9ZCxtPWgseD1kLHc9cCxNPXAsQT11LmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLFQ9QT5NXyYmKGk/K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOndfKHMqcytsKmwpKSxOPW1fKGdfKGwtcykvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFM9TixFPU47aWYoVD5NXyl7dmFyIGs9aGYoVC9zKnhfKEEpKSxDPWhmKFQvbCp4XyhBKSk7KHctPTIqayk+TV8/KGsqPXY/MTotMSxtKz1rLHgtPWspOih3PTAsbT14PShoK2QpLzIpLChNLT0yKkMpPk1fPyhDKj12PzE6LTEsXys9QyxiLT1DKTooTT0wLF89Yj0oaCtkKS8yKX12YXIgUD1sKl9fKF8pLHo9bCp4XyhfKSxSPXMqX18oeCksTD1zKnhfKHgpO2lmKE4+TV8pe3ZhciBEPWwqX18oYiksVT1sKnhfKGIpLHE9cypfXyhtKSxPPXMqeF8obSk7aWYocDxBXyl7dmFyIFk9dz5NXz9mdW5jdGlvbih0LG4sZSxyLGksbyxhLHUpe3ZhciBmPWUtdCxjPXItbixzPWEtaSxsPXUtbyxoPShzKihuLW8pLWwqKHQtaSkpLyhsKmYtcypjKTtyZXR1cm5bdCtoKmYsbitoKmNdfShQLHoscSxPLEQsVSxSLEwpOltSLExdLEI9UC1ZWzBdLEY9ei1ZWzFdLEk9RC1ZWzBdLGo9VS1ZWzFdLEg9MS94XyhmdW5jdGlvbih0KXtyZXR1cm4gdD4xPzA6dDwtMT9BXzpNYXRoLmFjb3ModCl9KChCKkkrRipqKS8od18oQipCK0YqRikqd18oSSpJK2oqaikpKS8yKSxYPXdfKFlbMF0qWVswXStZWzFdKllbMV0pO1M9bV8oTiwocy1YKS8oSC0xKSksRT1tXyhOLChsLVgpLyhIKzEpKX19TT5NXz9FPk1fPyhnPV9mKHEsTyxQLHosbCxFLHYpLHk9X2YoRCxVLFIsTCxsLEUsdiksZi5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxFPE4/Zi5hcmMoZy5jeCxnLmN5LEUseV8oZy55MDEsZy54MDEpLHlfKHkueTAxLHkueDAxKSwhdik6KGYuYXJjKGcuY3gsZy5jeSxFLHlfKGcueTAxLGcueDAxKSx5XyhnLnkxMSxnLngxMSksIXYpLGYuYXJjKDAsMCxsLHlfKGcuY3krZy55MTEsZy5jeCtnLngxMSkseV8oeS5jeSt5LnkxMSx5LmN4K3kueDExKSwhdiksZi5hcmMoeS5jeCx5LmN5LEUseV8oeS55MTEseS54MTEpLHlfKHkueTAxLHkueDAxKSwhdikpKTooZi5tb3ZlVG8oUCx6KSxmLmFyYygwLDAsbCxfLGIsIXYpKTpmLm1vdmVUbyhQLHopLHM+TV8mJnc+TV8/Uz5NXz8oZz1fZihSLEwsRCxVLHMsLVMsdikseT1fZihQLHoscSxPLHMsLVMsdiksZi5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxTPE4/Zi5hcmMoZy5jeCxnLmN5LFMseV8oZy55MDEsZy54MDEpLHlfKHkueTAxLHkueDAxKSwhdik6KGYuYXJjKGcuY3gsZy5jeSxTLHlfKGcueTAxLGcueDAxKSx5XyhnLnkxMSxnLngxMSksIXYpLGYuYXJjKDAsMCxzLHlfKGcuY3krZy55MTEsZy5jeCtnLngxMSkseV8oeS5jeSt5LnkxMSx5LmN4K3kueDExKSx2KSxmLmFyYyh5LmN4LHkuY3ksUyx5Xyh5LnkxMSx5LngxMSkseV8oeS55MDEseS54MDEpLCF2KSkpOmYuYXJjKDAsMCxzLHgsbSx2KTpmLmxpbmVUbyhSLEwpfWVsc2UgZi5tb3ZlVG8oMCwwKTtpZihmLmNsb3NlUGF0aCgpLHQpcmV0dXJuIGY9bnVsbCx0K1wiXCJ8fG51bGx9dmFyIG49ZGYsZT1wZixyPWxmKDApLGk9bnVsbCxvPXZmLGE9Z2YsdT15ZixmPW51bGw7cmV0dXJuIHQuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgdD0oK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItQV8vMjtyZXR1cm5bX18ocikqdCx4XyhyKSp0XX0sdC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bGYoK2UpLHQpOm59LHQub3V0ZXJSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmxmKCtuKSx0KTplfSx0LmNvcm5lclJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoK24pLHQpOnJ9LHQucGFkUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PW4/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoK24pLHQpOml9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoK24pLHQpOm99LHQuZW5kQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmxmKCtuKSx0KTphfSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpsZigrbiksdCk6dX0sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPW51bGw9PW4/bnVsbDpuLHQpOmZ9LHR9LHQuYXJlYT1BZix0LmxpbmU9TWYsdC5waWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciB1LGYsYyxzLGwsaD10Lmxlbmd0aCxkPTAscD1uZXcgQXJyYXkoaCksdj1uZXcgQXJyYXkoaCksZz0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihOXyxNYXRoLm1heCgtTl8sby5hcHBseSh0aGlzLGFyZ3VtZW50cyktZykpLF89TWF0aC5taW4oTWF0aC5hYnMoeSkvaCxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj1fKih5PDA/LTE6MSk7Zm9yKHU9MDt1PGg7Kyt1KShsPXZbcFt1XT11XT0rbih0W3VdLHUsdCkpPjAmJihkKz1sKTtmb3IobnVsbCE9ZT9wLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh2W3RdLHZbbl0pfSk6bnVsbCE9ciYmcC5zb3J0KGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHIodFtuXSx0W2VdKX0pLHU9MCxjPWQ/KHktaCpiKS9kOjA7dTxoOysrdSxnPXMpZj1wW3VdLHM9ZysoKGw9dltmXSk+MD9sKmM6MCkrYix2W2ZdPXtkYXRhOnRbZl0saW5kZXg6dSx2YWx1ZTpsLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpzLHBhZEFuZ2xlOl99O3JldHVybiB2fXZhciBuPU5mLGU9VGYscj1udWxsLGk9bGYoMCksbz1sZihOXyksYT1sZigwKTtyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bGYoK2UpLHQpOm59LHQuc29ydFZhbHVlcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHI9bnVsbCx0KTplfSx0LnNvcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bixlPW51bGwsdCk6cn0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpsZigrbiksdCk6aX0sdC5lbmRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246bGYoK24pLHQpOm99LHQucGFkQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmxmKCtuKSx0KTphfSx0fSx0LmFyZWFSYWRpYWw9UGYsdC5yYWRpYWxBcmVhPVBmLHQubGluZVJhZGlhbD1DZix0LnJhZGlhbExpbmU9Q2YsdC5wb2ludFJhZGlhbD16Zix0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIERmKFVmKX0sdC5saW5rVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gRGYocWYpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1EZihPZik7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5zeW1ib2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ7aWYocnx8KHI9dD1vZSgpKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx0KXJldHVybiByPW51bGwsdCtcIlwifHxudWxsfXZhciBuPWxmKGtfKSxlPWxmKDY0KSxyPW51bGw7cmV0dXJuIHQudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bGYoZSksdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpsZigrbiksdCk6ZX0sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/bnVsbDpuLHQpOnJ9LHR9LHQuc3ltYm9scz1YXyx0LnN5bWJvbENpcmNsZT1rXyx0LnN5bWJvbENyb3NzPUNfLHQuc3ltYm9sRGlhbW9uZD1SXyx0LnN5bWJvbFNxdWFyZT1PXyx0LnN5bWJvbFN0YXI9cV8sdC5zeW1ib2xUcmlhbmdsZT1CXyx0LnN5bWJvbFd5ZT1IXyx0LmN1cnZlQmFzaXNDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJZih0KX0sdC5jdXJ2ZUJhc2lzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGpmKHQpfSx0LmN1cnZlQmFzaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGZih0KX0sdC5jdXJ2ZUJ1bmRsZT1HXyx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9JF8sdC5jdXJ2ZUNhcmRpbmFsT3Blbj1XXyx0LmN1cnZlQ2FyZGluYWw9Vl8sdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9UV8sdC5jdXJ2ZUNhdG11bGxSb21PcGVuPUpfLHQuY3VydmVDYXRtdWxsUm9tPVpfLHQuY3VydmVMaW5lYXJDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLZih0KX0sdC5jdXJ2ZUxpbmVhcj1tZix0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaWModCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvYyh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1Yyh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjYyh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGNjKHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY2ModCwwKX0sdC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG8sYSx1PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9dC5sZW5ndGgsYz11Lmxlbmd0aCxzPW5ldyBBcnJheShjKTtmb3Iobz0wO288YzsrK28pe2Zvcih2YXIgbCxoPXVbb10sZD1zW29dPW5ldyBBcnJheShmKSxwPTA7cDxmOysrcClkW3BdPWw9WzAsK2kodFtwXSxoLHAsdCldLGwuZGF0YT10W3BdO2Qua2V5PWh9Zm9yKG89MCxhPWUocyk7bzxjOysrbylzW2Fbb11dLmluZGV4PW87cmV0dXJuIHIocyxhKSxzfXZhciBuPWxmKFtdKSxlPWxjLHI9c2MsaT1oYztyZXR1cm4gdC5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpsZihFXy5jYWxsKGUpKSx0KTpufSx0LnZhbHVlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpsZigrbiksdCk6aX0sdC5vcmRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT1uP2xjOlwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpsZihFXy5jYWxsKG4pKSx0KTplfSx0Lm9mZnNldD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP3NjOm4sdCk6cn0sdH0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LG4pe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscixpLG89MCxhPXRbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihpPWU9MDtlPHI7KytlKWkrPXRbZV1bb11bMV18fDA7aWYoaSlmb3IoZT0wO2U8cjsrK2UpdFtlXVtvXVsxXS89aX1zYyh0LG4pfX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LG4pe2lmKCh1PXQubGVuZ3RoKT4xKWZvcih2YXIgZSxyLGksbyxhLHUsZj0wLGM9dFtuWzBdXS5sZW5ndGg7ZjxjOysrZilmb3Iobz1hPTAsZT0wO2U8dTsrK2UpKGk9KHI9dFtuW2VdXVtmXSlbMV0tclswXSk+PTA/KHJbMF09byxyWzFdPW8rPWkpOmk8MD8oclsxXT1hLHJbMF09YSs9aSk6clswXT1vfSx0LnN0YWNrT2Zmc2V0Tm9uZT1zYyx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LG4pe2lmKChlPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscj0wLGk9dFtuWzBdXSxvPWkubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHU9MDthPGU7KythKXUrPXRbYV1bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tdS8yfXNjKHQsbil9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsbil7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShlPXRbblswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsYT0xO2E8cjsrK2Epe2Zvcih2YXIgdT0wLGY9MCxjPTA7dTxpOysrdSl7Zm9yKHZhciBzPXRbblt1XV0sbD1zW2FdWzFdfHwwLGg9KGwtKHNbYS0xXVsxXXx8MCkpLzIsZD0wO2Q8dTsrK2Qpe3ZhciBwPXRbbltkXV07aCs9KHBbYV1bMV18fDApLShwW2EtMV1bMV18fDApfWYrPWwsYys9aCpsfWVbYS0xXVsxXSs9ZVthLTFdWzBdPW8sZiYmKG8tPWMvZil9ZVthLTFdWzFdKz1lW2EtMV1bMF09byxzYyh0LG4pfX0sdC5zdGFja09yZGVyQXNjZW5kaW5nPWRjLHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGRjKHQpLnJldmVyc2UoKX0sdC5zdGFja09yZGVySW5zaWRlT3V0PWZ1bmN0aW9uKHQpe3ZhciBuLGUscj10Lmxlbmd0aCxpPXQubWFwKHBjKSxvPWxjKHQpLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gaVtuXS1pW3RdfSksYT0wLHU9MCxmPVtdLGM9W107Zm9yKG49MDtuPHI7KytuKWU9b1tuXSxhPHU/KGErPWlbZV0sZi5wdXNoKGUpKToodSs9aVtlXSxjLnB1c2goZSkpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQoZil9LHQuc3RhY2tPcmRlck5vbmU9bGMsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gbGModCkucmV2ZXJzZSgpfSx0LnRpbWVJbnRlcnZhbD1JYSx0LnRpbWVNaWxsaXNlY29uZD1Edix0LnRpbWVNaWxsaXNlY29uZHM9VXYsdC51dGNNaWxsaXNlY29uZD1Edix0LnV0Y01pbGxpc2Vjb25kcz1Vdix0LnRpbWVTZWNvbmQ9WXYsdC50aW1lU2Vjb25kcz1Cdix0LnV0Y1NlY29uZD1Zdix0LnV0Y1NlY29uZHM9QnYsdC50aW1lTWludXRlPUZ2LHQudGltZU1pbnV0ZXM9SXYsdC50aW1lSG91cj1qdix0LnRpbWVIb3Vycz1Idix0LnRpbWVEYXk9WHYsdC50aW1lRGF5cz1Hdix0LnRpbWVXZWVrPVZ2LHQudGltZVdlZWtzPXRnLHQudGltZVN1bmRheT1Wdix0LnRpbWVTdW5kYXlzPXRnLHQudGltZU1vbmRheT0kdix0LnRpbWVNb25kYXlzPW5nLHQudGltZVR1ZXNkYXk9V3YsdC50aW1lVHVlc2RheXM9ZWcsdC50aW1lV2VkbmVzZGF5PVp2LHQudGltZVdlZG5lc2RheXM9cmcsdC50aW1lVGh1cnNkYXk9UXYsdC50aW1lVGh1cnNkYXlzPWlnLHQudGltZUZyaWRheT1Kdix0LnRpbWVGcmlkYXlzPW9nLHQudGltZVNhdHVyZGF5PUt2LHQudGltZVNhdHVyZGF5cz1hZyx0LnRpbWVNb250aD11Zyx0LnRpbWVNb250aHM9ZmcsdC50aW1lWWVhcj1jZyx0LnRpbWVZZWFycz1zZyx0LnV0Y01pbnV0ZT1sZyx0LnV0Y01pbnV0ZXM9aGcsdC51dGNIb3VyPWRnLHQudXRjSG91cnM9cGcsdC51dGNEYXk9dmcsdC51dGNEYXlzPWdnLHQudXRjV2Vlaz15Zyx0LnV0Y1dlZWtzPUFnLHQudXRjU3VuZGF5PXlnLHQudXRjU3VuZGF5cz1BZyx0LnV0Y01vbmRheT1fZyx0LnV0Y01vbmRheXM9VGcsdC51dGNUdWVzZGF5PWJnLHQudXRjVHVlc2RheXM9TmcsdC51dGNXZWRuZXNkYXk9bWcsdC51dGNXZWRuZXNkYXlzPVNnLHQudXRjVGh1cnNkYXk9eGcsdC51dGNUaHVyc2RheXM9RWcsdC51dGNGcmlkYXk9d2csdC51dGNGcmlkYXlzPWtnLHQudXRjU2F0dXJkYXk9TWcsdC51dGNTYXR1cmRheXM9Q2csdC51dGNNb250aD1QZyx0LnV0Y01vbnRocz16Zyx0LnV0Y1llYXI9UmcsdC51dGNZZWFycz1EZyx0LnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPW5mLHQudGltZUZvcm1hdExvY2FsZT0kYSx0Lmlzb0Zvcm1hdD1GZyx0Lmlzb1BhcnNlPUlnLHQubm93PXduLHQudGltZXI9VG4sdC50aW1lckZsdXNoPU5uLHQudGltZW91dD1Dbix0LmludGVydmFsPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj1uZXcgQW4saT1uO3JldHVybiBudWxsPT1uPyhyLnJlc3RhcnQodCxuLGUpLHIpOihuPStuLGU9bnVsbD09ZT93bigpOitlLHIucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksci5yZXN0YXJ0KG8saSs9bixlKSx0KGEpfSxuLGUpLHIpfSx0LnRyYW5zaXRpb249WW4sdC5hY3RpdmU9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dC5fX3RyYW5zaXRpb247aWYoaSl7bj1udWxsPT1uP251bGw6bitcIlwiO2ZvcihyIGluIGkpaWYoKGU9aVtyXSkuc3RhdGU+TGwmJmUubmFtZT09PW4pcmV0dXJuIG5ldyBPbihbW3RdXSxoaCxuLCtyKX1yZXR1cm4gbnVsbH0sdC5pbnRlcnJ1cHQ9RG4sdC52b3Jvbm9pPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gbmV3IEJjKHQubWFwKGZ1bmN0aW9uKHIsaSl7dmFyIG89W01hdGgucm91bmQobihyLGksdCkvYWIpKmFiLE1hdGgucm91bmQoZShyLGksdCkvYWIpKmFiXTtyZXR1cm4gby5pbmRleD1pLG8uZGF0YT1yLG99KSxyKX12YXIgbj1nYyxlPXljLHI9bnVsbDtyZXR1cm4gdC5wb2x5Z29ucz1mdW5jdGlvbihuKXtyZXR1cm4gdChuKS5wb2x5Z29ucygpfSx0LmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4pLmxpbmtzKCl9LHQudHJpYW5nbGVzPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4pLnRyaWFuZ2xlcygpfSx0Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnZjKCtlKSx0KTpufSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOnZjKCtuKSx0KTplfSx0LmV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP251bGw6W1srblswXVswXSwrblswXVsxXV0sWytuWzFdWzBdLCtuWzFdWzFdXV0sdCk6ciYmW1tyWzBdWzBdLHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dXX0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/bnVsbDpbWzAsMF0sWytuWzBdLCtuWzFdXV0sdCk6ciYmW3JbMV1bMF0tclswXVswXSxyWzFdWzFdLXJbMF1bMV1dfSx0fSx0Lnpvb209ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3QucHJvcGVydHkoXCJfX3pvb21cIiwkYykub24oXCJ3aGVlbC56b29tXCIsZikub24oXCJtb3VzZWRvd24uem9vbVwiLGMpLm9uKFwiZGJsY2xpY2suem9vbVwiLHMpLmZpbHRlcihtKS5vbihcInRvdWNoc3RhcnQuem9vbVwiLGwpLm9uKFwidG91Y2htb3ZlLnpvb21cIixoKS5vbihcInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbVwiLGQpLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsXCJub25lXCIpLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsXCJyZ2JhKDAsMCwwLDApXCIpfWZ1bmN0aW9uIGUodCxuKXtyZXR1cm4obj1NYXRoLm1heCh4WzBdLE1hdGgubWluKHhbMV0sbikpKT09PXQuaz90Om5ldyBJYyhuLHQueCx0LnkpfWZ1bmN0aW9uIHIodCxuLGUpe3ZhciByPW5bMF0tZVswXSp0LmssaT1uWzFdLWVbMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IEljKHQuayxyLGkpfWZ1bmN0aW9uIGkodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gbyh0LG4sZSl7dC5vbihcInN0YXJ0Lnpvb21cIixmdW5jdGlvbigpe2EodGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbihcImludGVycnVwdC56b29tIGVuZC56b29tXCIsZnVuY3Rpb24oKXthKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKFwiem9vbVwiLGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLHI9YSh0aGlzLHQpLG89eS5hcHBseSh0aGlzLHQpLHU9ZXx8aShvKSxmPU1hdGgubWF4KG9bMV1bMF0tb1swXVswXSxvWzFdWzFdLW9bMF1bMV0pLGM9dGhpcy5fX3pvb20scz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyx0KTpuLGw9QShjLmludmVydCh1KS5jb25jYXQoZi9jLmspLHMuaW52ZXJ0KHUpLmNvbmNhdChmL3MuaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PXM7ZWxzZXt2YXIgbj1sKHQpLGU9Zi9uWzJdO3Q9bmV3IEljKGUsdVswXS1uWzBdKmUsdVsxXS1uWzFdKmUpfXIuem9vbShudWxsLHQpfX0pfWZ1bmN0aW9uIGEodCxuKXtmb3IodmFyIGUscj0wLGk9VC5sZW5ndGg7cjxpOysrcilpZigoZT1UW3JdKS50aGF0PT09dClyZXR1cm4gZTtyZXR1cm4gbmV3IHUodCxuKX1mdW5jdGlvbiB1KHQsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPW4sdGhpcy5pbmRleD0tMSx0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXkuYXBwbHkodCxuKX1mdW5jdGlvbiBmKCl7aWYoZy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PWEodGhpcyxhcmd1bWVudHMpLG49dGhpcy5fX3pvb20saT1NYXRoLm1heCh4WzBdLE1hdGgubWluKHhbMV0sbi5rKk1hdGgucG93KDIsYi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksbz1wdCh0aGlzKTtpZih0LndoZWVsKXQubW91c2VbMF1bMF09PT1vWzBdJiZ0Lm1vdXNlWzBdWzFdPT09b1sxXXx8KHQubW91c2VbMV09bi5pbnZlcnQodC5tb3VzZVswXT1vKSksY2xlYXJUaW1lb3V0KHQud2hlZWwpO2Vsc2V7aWYobi5rPT09aSlyZXR1cm47dC5tb3VzZT1bbyxuLmludmVydChvKV0sRG4odGhpcyksdC5zdGFydCgpfVhjKCksdC53aGVlbD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC53aGVlbD1udWxsLHQuZW5kKCl9LGspLHQuem9vbShcIm1vdXNlXCIsXyhyKGUobixpKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LHcpKX19ZnVuY3Rpb24gYygpe2lmKCF2JiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG49YSh0aGlzLGFyZ3VtZW50cyksZT1jdCh0LmV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLnpvb21cIixmdW5jdGlvbigpe2lmKFhjKCksIW4ubW92ZWQpe3ZhciBlPXQuZXZlbnQuY2xpZW50WC1vLGk9dC5ldmVudC5jbGllbnRZLXU7bi5tb3ZlZD1lKmUraSppPkN9bi56b29tKFwibW91c2VcIixfKHIobi50aGF0Ll9fem9vbSxuLm1vdXNlWzBdPXB0KG4udGhhdCksbi5tb3VzZVsxXSksbi5leHRlbnQsdykpfSwhMCkub24oXCJtb3VzZXVwLnpvb21cIixmdW5jdGlvbigpe2Uub24oXCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb21cIixudWxsKSxidCh0LmV2ZW50LnZpZXcsbi5tb3ZlZCksWGMoKSxuLmVuZCgpfSwhMCksaT1wdCh0aGlzKSxvPXQuZXZlbnQuY2xpZW50WCx1PXQuZXZlbnQuY2xpZW50WTtfdCh0LmV2ZW50LnZpZXcpLEhjKCksbi5tb3VzZT1baSx0aGlzLl9fem9vbS5pbnZlcnQoaSldLERuKHRoaXMpLG4uc3RhcnQoKX19ZnVuY3Rpb24gcygpe2lmKGcuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgaT10aGlzLl9fem9vbSxhPXB0KHRoaXMpLHU9aS5pbnZlcnQoYSksZj1pLmsqKHQuZXZlbnQuc2hpZnRLZXk/LjU6MiksYz1fKHIoZShpLGYpLGEsdSkseS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdyk7WGMoKSxNPjA/Y3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0pLmNhbGwobyxjLGEpOmN0KHRoaXMpLmNhbGwobi50cmFuc2Zvcm0sYyl9fWZ1bmN0aW9uIGwoKXtpZihnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4sZSxyLGksbz1hKHRoaXMsYXJndW1lbnRzKSx1PXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsZj11Lmxlbmd0aDtmb3IoSGMoKSxlPTA7ZTxmOysrZSlpPVtpPXZ0KHRoaXMsdSwocj11W2VdKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQoaSksci5pZGVudGlmaWVyXSxvLnRvdWNoMD9vLnRvdWNoMXx8KG8udG91Y2gxPWkpOihvLnRvdWNoMD1pLG49ITApO2lmKHAmJihwPWNsZWFyVGltZW91dChwKSwhby50b3VjaDEpKXJldHVybiBvLmVuZCgpLHZvaWQoKGk9Y3QodGhpcykub24oXCJkYmxjbGljay56b29tXCIpKSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO24mJihwPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtwPW51bGx9LEUpLERuKHRoaXMpLG8uc3RhcnQoKSl9fWZ1bmN0aW9uIGgoKXt2YXIgbixpLG8sdSxmPWEodGhpcyxhcmd1bWVudHMpLGM9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxzPWMubGVuZ3RoO2ZvcihYYygpLHAmJihwPWNsZWFyVGltZW91dChwKSksbj0wO248czsrK24pbz12dCh0aGlzLGMsKGk9Y1tuXSkuaWRlbnRpZmllciksZi50b3VjaDAmJmYudG91Y2gwWzJdPT09aS5pZGVudGlmaWVyP2YudG91Y2gwWzBdPW86Zi50b3VjaDEmJmYudG91Y2gxWzJdPT09aS5pZGVudGlmaWVyJiYoZi50b3VjaDFbMF09byk7aWYoaT1mLnRoYXQuX196b29tLGYudG91Y2gxKXt2YXIgbD1mLnRvdWNoMFswXSxoPWYudG91Y2gwWzFdLGQ9Zi50b3VjaDFbMF0sdj1mLnRvdWNoMVsxXSxnPShnPWRbMF0tbFswXSkqZysoZz1kWzFdLWxbMV0pKmcseT0oeT12WzBdLWhbMF0pKnkrKHk9dlsxXS1oWzFdKSp5O2k9ZShpLE1hdGguc3FydChnL3kpKSxvPVsobFswXStkWzBdKS8yLChsWzFdK2RbMV0pLzJdLHU9WyhoWzBdK3ZbMF0pLzIsKGhbMV0rdlsxXSkvMl19ZWxzZXtpZighZi50b3VjaDApcmV0dXJuO289Zi50b3VjaDBbMF0sdT1mLnRvdWNoMFsxXX1mLnpvb20oXCJ0b3VjaFwiLF8ocihpLG8sdSksZi5leHRlbnQsdykpfWZ1bmN0aW9uIGQoKXt2YXIgbixlLHI9YSh0aGlzLGFyZ3VtZW50cyksaT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89aS5sZW5ndGg7Zm9yKEhjKCksdiYmY2xlYXJUaW1lb3V0KHYpLHY9c2V0VGltZW91dChmdW5jdGlvbigpe3Y9bnVsbH0sRSksbj0wO248bzsrK24pZT1pW25dLHIudG91Y2gwJiZyLnRvdWNoMFsyXT09PWUuaWRlbnRpZmllcj9kZWxldGUgci50b3VjaDA6ci50b3VjaDEmJnIudG91Y2gxWzJdPT09ZS5pZGVudGlmaWVyJiZkZWxldGUgci50b3VjaDE7ci50b3VjaDEmJiFyLnRvdWNoMCYmKHIudG91Y2gwPXIudG91Y2gxLGRlbGV0ZSByLnRvdWNoMSksci50b3VjaDA/ci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHIudG91Y2gwWzBdKTpyLmVuZCgpfXZhciBwLHYsZz1HYyx5PVZjLF89UWMsYj1XYyxtPVpjLHg9WzAsMS8wXSx3PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLE09MjUwLEE9X24sVD1bXSxTPU4oXCJzdGFydFwiLFwiem9vbVwiLFwiZW5kXCIpLEU9NTAwLGs9MTUwLEM9MDtyZXR1cm4gbi50cmFuc2Zvcm09ZnVuY3Rpb24odCxuKXt2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ZS5wcm9wZXJ0eShcIl9fem9vbVwiLCRjKSx0IT09ZT9vKHQsbik6ZS5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7YSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKS5lbmQoKX0pfSxuLnNjYWxlQnk9ZnVuY3Rpb24odCxlKXtuLnNjYWxlVG8odCxmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpfSl9LG4uc2NhbGVUbz1mdW5jdGlvbih0LG8pe24udHJhbnNmb3JtKHQsZnVuY3Rpb24oKXt2YXIgdD15LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLGE9aSh0KSx1PW4uaW52ZXJ0KGEpLGY9XCJmdW5jdGlvblwiPT10eXBlb2Ygbz9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvO3JldHVybiBfKHIoZShuLGYpLGEsdSksdCx3KX0pfSxuLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKHQsZSxyKXtuLnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcy5fX3pvb20udHJhbnNsYXRlKFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpLHkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHcpfSl9LG4udHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLHIpe24udHJhbnNmb3JtKHQsZnVuY3Rpb24oKXt2YXIgdD15LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLG89aSh0KTtyZXR1cm4gXyhmYi50cmFuc2xhdGUob1swXSxvWzFdKS5zY2FsZShuLmspLnRyYW5zbGF0ZShcImZ1bmN0aW9uXCI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiByPy1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotciksdCx3KX0pfSx1LnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9VC5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KFwic3RhcnRcIikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5tb3VzZSYmXCJtb3VzZVwiIT09dCYmKHRoaXMubW91c2VbMV09bi5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZcInRvdWNoXCIhPT10JiYodGhpcy50b3VjaDBbMV09bi5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmXCJ0b3VjaFwiIT09dCYmKHRoaXMudG91Y2gxWzFdPW4uaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1uLHRoaXMuZW1pdChcInpvb21cIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihULnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KFwiZW5kXCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe290KG5ldyBmdW5jdGlvbih0LG4sZSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnRyYW5zZm9ybT1lfShuLHQsdGhpcy50aGF0Ll9fem9vbSksUy5hcHBseSxTLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LG4ud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6RmMoK3QpLG4pOmJ9LG4uZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGYyghIXQpLG4pOmd9LG4udG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGYyghIXQpLG4pOm19LG4uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGYyhbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSksbik6eX0sbi5zY2FsZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeFswXT0rdFswXSx4WzFdPSt0WzFdLG4pOlt4WzBdLHhbMV1dfSxuLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8od1swXVswXT0rdFswXVswXSx3WzFdWzBdPSt0WzFdWzBdLHdbMF1bMV09K3RbMF1bMV0sd1sxXVsxXT0rdFsxXVsxXSxuKTpbW3dbMF1bMF0sd1swXVsxXV0sW3dbMV1bMF0sd1sxXVsxXV1dfSxuLmNvbnN0cmFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LG4pOl99LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09K3Qsbik6TX0sbi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT10LG4pOkF9LG4ub249ZnVuY3Rpb24oKXt2YXIgdD1TLm9uLmFwcGx5KFMsYXJndW1lbnRzKTtyZXR1cm4gdD09PVM/bjp0fSxuLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9KHQ9K3QpKnQsbik6TWF0aC5zcXJ0KEMpfSxufSx0Lnpvb21UcmFuc2Zvcm09amMsdC56b29tSWRlbnRpdHk9ZmIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KTsiLCIvKiFcbiAqIExpZ2h0Ym94IGZvciBCb290c3RyYXAgYnkgQGFzaGxleWR3XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXNobGV5ZHcvbGlnaHRib3hcbiAqXG4gKiBMaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vYXNobGV5ZHcvbGlnaHRib3gvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG4rZnVuY3Rpb24gKCQpIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxudmFyIExpZ2h0Ym94ID0gKGZ1bmN0aW9uICgkKSB7XG5cblx0dmFyIE5BTUUgPSAnZWtrb0xpZ2h0Ym94Jztcblx0dmFyIEpRVUVSWV9OT19DT05GTElDVCA9ICQuZm5bTkFNRV07XG5cblx0dmFyIERlZmF1bHQgPSB7XG5cdFx0dGl0bGU6ICcnLFxuXHRcdGZvb3RlcjogJycsXG5cdFx0bWF4V2lkdGg6IDk5OTksXG5cdFx0bWF4SGVpZ2h0OiA5OTk5LFxuXHRcdHNob3dBcnJvd3M6IHRydWUsIC8vZGlzcGxheSB0aGUgbGVmdCAvIHJpZ2h0IGFycm93cyBvciBub3Rcblx0XHR3cmFwcGluZzogdHJ1ZSwgLy9pZiB0cnVlLCBnYWxsZXJ5IGxvb3BzIGluZmluaXRlbHlcblx0XHR0eXBlOiBudWxsLCAvL2ZvcmNlIHRoZSBsaWdodGJveCBpbnRvIGltYWdlIC8geW91dHViZSBtb2RlLiBpZiBudWxsLCBvciBub3QgaW1hZ2V8eW91dHViZXx2aW1lbzsgZGV0ZWN0IGl0XG5cdFx0YWx3YXlzU2hvd0Nsb3NlOiBmYWxzZSwgLy9hbHdheXMgc2hvdyB0aGUgY2xvc2UgYnV0dG9uLCBldmVuIGlmIHRoZXJlIGlzIG5vIHRpdGxlXG5cdFx0bG9hZGluZ01lc3NhZ2U6ICc8ZGl2IGNsYXNzPVwiZWtrby1saWdodGJveC1sb2FkZXJcIj48ZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj48L2Rpdj4nLCAvLyBodHRwOi8vdG9iaWFzYWhsaW4uY29tL3NwaW5raXQvXG5cdFx0bGVmdEFycm93OiAnPHNwYW4+JiMxMDA5NDs8L3NwYW4+Jyxcblx0XHRyaWdodEFycm93OiAnPHNwYW4+JiMxMDA5NTs8L3NwYW4+Jyxcblx0XHRzdHJpbmdzOiB7XG5cdFx0XHRjbG9zZTogJ0Nsb3NlJyxcblx0XHRcdGZhaWw6ICdGYWlsZWQgdG8gbG9hZCBpbWFnZTonLFxuXHRcdFx0dHlwZTogJ0NvdWxkIG5vdCBkZXRlY3QgcmVtb3RlIHRhcmdldCB0eXBlLiBGb3JjZSB0aGUgdHlwZSB1c2luZyBkYXRhLXR5cGUnXG5cdFx0fSxcblx0XHRkb2M6IGRvY3VtZW50LCAvLyBpZiBpbiBhbiBpZnJhbWUgY2FuIHNwZWNpZnkgdG9wLmRvY3VtZW50XG5cdFx0b25TaG93OiBmdW5jdGlvbiBvblNob3coKSB7fSxcblx0XHRvblNob3duOiBmdW5jdGlvbiBvblNob3duKCkge30sXG5cdFx0b25IaWRlOiBmdW5jdGlvbiBvbkhpZGUoKSB7fSxcblx0XHRvbkhpZGRlbjogZnVuY3Rpb24gb25IaWRkZW4oKSB7fSxcblx0XHRvbk5hdmlnYXRlOiBmdW5jdGlvbiBvbk5hdmlnYXRlKCkge30sXG5cdFx0b25Db250ZW50TG9hZGVkOiBmdW5jdGlvbiBvbkNvbnRlbnRMb2FkZWQoKSB7fVxuXHR9O1xuXG5cdHZhciBMaWdodGJveCA9IChmdW5jdGlvbiAoKSB7XG5cdFx0X2NyZWF0ZUNsYXNzKExpZ2h0Ym94LCBudWxsLCBbe1xuXHRcdFx0a2V5OiAnRGVmYXVsdCcsXG5cblx0XHRcdC8qKlxuICAgICAgIENsYXNzIHByb3BlcnRpZXM6XG4gICBcdCBfJGVsZW1lbnQ6IG51bGwgLT4gdGhlIDxhPiBlbGVtZW50IGN1cnJlbnRseSBiZWluZyBkaXNwbGF5ZWRcbiAgICBfJG1vZGFsOiBUaGUgYm9vdHN0cmFwIG1vZGFsIGdlbmVyYXRlZFxuICAgICAgIF8kbW9kYWxEaWFsb2c6IFRoZSAubW9kYWwtZGlhbG9nXG4gICAgICAgXyRtb2RhbENvbnRlbnQ6IFRoZSAubW9kYWwtY29udGVudFxuICAgICAgIF8kbW9kYWxCb2R5OiBUaGUgLm1vZGFsLWJvZHlcbiAgICAgICBfJG1vZGFsSGVhZGVyOiBUaGUgLm1vZGFsLWhlYWRlclxuICAgICAgIF8kbW9kYWxGb290ZXI6IFRoZSAubW9kYWwtZm9vdGVyXG4gICAgXyRsaWdodGJveENvbnRhaW5lck9uZTogQ29udGFpbmVyIG9mIHRoZSBmaXJzdCBsaWdodGJveCBlbGVtZW50XG4gICAgXyRsaWdodGJveENvbnRhaW5lclR3bzogQ29udGFpbmVyIG9mIHRoZSBzZWNvbmQgbGlnaHRib3ggZWxlbWVudFxuICAgIF8kbGlnaHRib3hCb2R5OiBGaXJzdCBlbGVtZW50IGluIHRoZSBjb250YWluZXJcbiAgICBfJG1vZGFsQXJyb3dzOiBUaGUgb3ZlcmxheWVkIGFycm93cyBjb250YWluZXJcbiAgIFx0IF8kZ2FsbGVyeUl0ZW1zOiBPdGhlciA8YT4ncyBhdmFpbGFibGUgZm9yIHRoaXMgZ2FsbGVyeVxuICAgIF9nYWxsZXJ5TmFtZTogTmFtZSBvZiB0aGUgY3VycmVudCBkYXRhKCdnYWxsZXJ5Jykgc2hvd2luZ1xuICAgIF9nYWxsZXJ5SW5kZXg6IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBfJGdhbGxlcnlJdGVtcyBiZWluZyBzaG93blxuICAgXHQgX2NvbmZpZzoge30gdGhlIG9wdGlvbnMgZm9yIHRoZSBtb2RhbFxuICAgIF9tb2RhbElkOiB1bmlxdWUgaWQgZm9yIHRoZSBjdXJyZW50IGxpZ2h0Ym94XG4gICAgX3BhZGRpbmcgLyBfYm9yZGVyOiBDU1MgcHJvcGVydGllcyBmb3IgdGhlIG1vZGFsIGNvbnRhaW5lcjsgdGhlc2UgYXJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgc3BhY2UgZm9yIHRoZSBjb250ZW50XG4gICBcdCAqL1xuXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIERlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fV0pO1xuXG5cdFx0ZnVuY3Rpb24gTGlnaHRib3goJGVsZW1lbnQsIGNvbmZpZykge1xuXHRcdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdFx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpZ2h0Ym94KTtcblxuXHRcdFx0dGhpcy5fY29uZmlnID0gJC5leHRlbmQoe30sIERlZmF1bHQsIGNvbmZpZyk7XG5cdFx0XHR0aGlzLl8kbW9kYWxBcnJvd3MgPSBudWxsO1xuXHRcdFx0dGhpcy5fZ2FsbGVyeUluZGV4ID0gMDtcblx0XHRcdHRoaXMuX2dhbGxlcnlOYW1lID0gbnVsbDtcblx0XHRcdHRoaXMuX3BhZGRpbmcgPSBudWxsO1xuXHRcdFx0dGhpcy5fYm9yZGVyID0gbnVsbDtcblx0XHRcdHRoaXMuX3RpdGxlSXNTaG93biA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fZm9vdGVySXNTaG93biA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fd2FudGVkV2lkdGggPSAwO1xuXHRcdFx0dGhpcy5fd2FudGVkSGVpZ2h0ID0gMDtcblx0XHRcdHRoaXMuX3RvdWNoc3RhcnRYID0gMDtcblx0XHRcdHRoaXMuX3RvdWNoZW5kWCA9IDA7XG5cblx0XHRcdHRoaXMuX21vZGFsSWQgPSAnZWtrb0xpZ2h0Ym94LScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwICsgMSk7XG5cdFx0XHR0aGlzLl8kZWxlbWVudCA9ICRlbGVtZW50IGluc3RhbmNlb2YgalF1ZXJ5ID8gJGVsZW1lbnQgOiAkKCRlbGVtZW50KTtcblxuXHRcdFx0dGhpcy5faXNCb290c3RyYXAzID0gJC5mbi5tb2RhbC5Db25zdHJ1Y3Rvci5WRVJTSU9OWzBdID09IDM7XG5cblx0XHRcdHZhciBoNCA9ICc8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPicgKyAodGhpcy5fY29uZmlnLnRpdGxlIHx8IFwiJm5ic3A7XCIpICsgJzwvaDQ+Jztcblx0XHRcdHZhciBidG4gPSAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIicgKyB0aGlzLl9jb25maWcuc3RyaW5ncy5jbG9zZSArICdcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPic7XG5cblx0XHRcdHZhciBoZWFkZXIgPSAnPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlcicgKyAodGhpcy5fY29uZmlnLnRpdGxlIHx8IHRoaXMuX2NvbmZpZy5hbHdheXNTaG93Q2xvc2UgPyAnJyA6ICcgaGlkZScpICsgJ1wiPicgKyAodGhpcy5faXNCb290c3RyYXAzID8gYnRuICsgaDQgOiBoNCArIGJ0bikgKyAnPC9kaXY+Jztcblx0XHRcdHZhciBmb290ZXIgPSAnPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlcicgKyAodGhpcy5fY29uZmlnLmZvb3RlciA/ICcnIDogJyBoaWRlJykgKyAnXCI+JyArICh0aGlzLl9jb25maWcuZm9vdGVyIHx8IFwiJm5ic3A7XCIpICsgJzwvZGl2Pic7XG5cdFx0XHR2YXIgYm9keSA9ICc8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPjxkaXYgY2xhc3M9XCJla2tvLWxpZ2h0Ym94LWNvbnRhaW5lclwiPjxkaXYgY2xhc3M9XCJla2tvLWxpZ2h0Ym94LWl0ZW0gZmFkZSBpbiBzaG93XCI+PC9kaXY+PGRpdiBjbGFzcz1cImVra28tbGlnaHRib3gtaXRlbSBmYWRlXCI+PC9kaXY+PC9kaXY+PC9kaXY+Jztcblx0XHRcdHZhciBkaWFsb2cgPSAnPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPjxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+JyArIGhlYWRlciArIGJvZHkgKyBmb290ZXIgKyAnPC9kaXY+PC9kaXY+Jztcblx0XHRcdCQodGhpcy5fY29uZmlnLmRvYy5ib2R5KS5hcHBlbmQoJzxkaXYgaWQ9XCInICsgdGhpcy5fbW9kYWxJZCArICdcIiBjbGFzcz1cImVra28tbGlnaHRib3ggbW9kYWwgZmFkZVwiIHRhYmluZGV4PVwiLTFcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPicgKyBkaWFsb2cgKyAnPC9kaXY+Jyk7XG5cblx0XHRcdHRoaXMuXyRtb2RhbCA9ICQoJyMnICsgdGhpcy5fbW9kYWxJZCwgdGhpcy5fY29uZmlnLmRvYyk7XG5cdFx0XHR0aGlzLl8kbW9kYWxEaWFsb2cgPSB0aGlzLl8kbW9kYWwuZmluZCgnLm1vZGFsLWRpYWxvZycpLmZpcnN0KCk7XG5cdFx0XHR0aGlzLl8kbW9kYWxDb250ZW50ID0gdGhpcy5fJG1vZGFsLmZpbmQoJy5tb2RhbC1jb250ZW50JykuZmlyc3QoKTtcblx0XHRcdHRoaXMuXyRtb2RhbEJvZHkgPSB0aGlzLl8kbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS5maXJzdCgpO1xuXHRcdFx0dGhpcy5fJG1vZGFsSGVhZGVyID0gdGhpcy5fJG1vZGFsLmZpbmQoJy5tb2RhbC1oZWFkZXInKS5maXJzdCgpO1xuXHRcdFx0dGhpcy5fJG1vZGFsRm9vdGVyID0gdGhpcy5fJG1vZGFsLmZpbmQoJy5tb2RhbC1mb290ZXInKS5maXJzdCgpO1xuXG5cdFx0XHR0aGlzLl8kbGlnaHRib3hDb250YWluZXIgPSB0aGlzLl8kbW9kYWxCb2R5LmZpbmQoJy5la2tvLWxpZ2h0Ym94LWNvbnRhaW5lcicpLmZpcnN0KCk7XG5cdFx0XHR0aGlzLl8kbGlnaHRib3hCb2R5T25lID0gdGhpcy5fJGxpZ2h0Ym94Q29udGFpbmVyLmZpbmQoJz4gZGl2OmZpcnN0LWNoaWxkJykuZmlyc3QoKTtcblx0XHRcdHRoaXMuXyRsaWdodGJveEJvZHlUd28gPSB0aGlzLl8kbGlnaHRib3hDb250YWluZXIuZmluZCgnPiBkaXY6bGFzdC1jaGlsZCcpLmZpcnN0KCk7XG5cblx0XHRcdHRoaXMuX2JvcmRlciA9IHRoaXMuX2NhbGN1bGF0ZUJvcmRlcnMoKTtcblx0XHRcdHRoaXMuX3BhZGRpbmcgPSB0aGlzLl9jYWxjdWxhdGVQYWRkaW5nKCk7XG5cblx0XHRcdHRoaXMuX2dhbGxlcnlOYW1lID0gdGhpcy5fJGVsZW1lbnQuZGF0YSgnZ2FsbGVyeScpO1xuXHRcdFx0aWYgKHRoaXMuX2dhbGxlcnlOYW1lKSB7XG5cdFx0XHRcdHRoaXMuXyRnYWxsZXJ5SXRlbXMgPSAkKGRvY3VtZW50LmJvZHkpLmZpbmQoJypbZGF0YS1nYWxsZXJ5PVwiJyArIHRoaXMuX2dhbGxlcnlOYW1lICsgJ1wiXScpO1xuXHRcdFx0XHR0aGlzLl9nYWxsZXJ5SW5kZXggPSB0aGlzLl8kZ2FsbGVyeUl0ZW1zLmluZGV4KHRoaXMuXyRlbGVtZW50KTtcblx0XHRcdFx0JChkb2N1bWVudCkub24oJ2tleWRvd24uZWtrb0xpZ2h0Ym94JywgdGhpcy5fbmF2aWdhdGlvbmFsQmluZGVyLmJpbmQodGhpcykpO1xuXG5cdFx0XHRcdC8vIGFkZCB0aGUgZGlyZWN0aW9uYWwgYXJyb3dzIHRvIHRoZSBtb2RhbFxuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLnNob3dBcnJvd3MgJiYgdGhpcy5fJGdhbGxlcnlJdGVtcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0dGhpcy5fJGxpZ2h0Ym94Q29udGFpbmVyLmFwcGVuZCgnPGRpdiBjbGFzcz1cImVra28tbGlnaHRib3gtbmF2LW92ZXJsYXlcIj48YSBocmVmPVwiI1wiPicgKyB0aGlzLl9jb25maWcubGVmdEFycm93ICsgJzwvYT48YSBocmVmPVwiI1wiPicgKyB0aGlzLl9jb25maWcucmlnaHRBcnJvdyArICc8L2E+PC9kaXY+Jyk7XG5cdFx0XHRcdFx0dGhpcy5fJG1vZGFsQXJyb3dzID0gdGhpcy5fJGxpZ2h0Ym94Q29udGFpbmVyLmZpbmQoJ2Rpdi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5JykuZmlyc3QoKTtcblx0XHRcdFx0XHR0aGlzLl8kbGlnaHRib3hDb250YWluZXIub24oJ2NsaWNrJywgJ2E6Zmlyc3QtY2hpbGQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gX3RoaXMubmF2aWdhdGVMZWZ0KCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5fJGxpZ2h0Ym94Q29udGFpbmVyLm9uKCdjbGljaycsICdhOmxhc3QtY2hpbGQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gX3RoaXMubmF2aWdhdGVSaWdodCgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlTmF2aWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuXyRtb2RhbC5vbignc2hvdy5icy5tb2RhbCcsIHRoaXMuX2NvbmZpZy5vblNob3cuYmluZCh0aGlzKSkub24oJ3Nob3duLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRfdGhpcy5fdG9nZ2xlTG9hZGluZyh0cnVlKTtcblx0XHRcdFx0X3RoaXMuX2hhbmRsZSgpO1xuXHRcdFx0XHRyZXR1cm4gX3RoaXMuX2NvbmZpZy5vblNob3duLmNhbGwoX3RoaXMpO1xuXHRcdFx0fSkub24oJ2hpZGUuYnMubW9kYWwnLCB0aGlzLl9jb25maWcub25IaWRlLmJpbmQodGhpcykpLm9uKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChfdGhpcy5fZ2FsbGVyeU5hbWUpIHtcblx0XHRcdFx0XHQkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24uZWtrb0xpZ2h0Ym94Jyk7XG5cdFx0XHRcdFx0JCh3aW5kb3cpLm9mZigncmVzaXplLmVra29MaWdodGJveCcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF90aGlzLl8kbW9kYWwucmVtb3ZlKCk7XG5cdFx0XHRcdHJldHVybiBfdGhpcy5fY29uZmlnLm9uSGlkZGVuLmNhbGwoX3RoaXMpO1xuXHRcdFx0fSkubW9kYWwodGhpcy5fY29uZmlnKTtcblxuXHRcdFx0JCh3aW5kb3cpLm9uKCdyZXNpemUuZWtrb0xpZ2h0Ym94JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRfdGhpcy5fcmVzaXplKF90aGlzLl93YW50ZWRXaWR0aCwgX3RoaXMuX3dhbnRlZEhlaWdodCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuXyRsaWdodGJveENvbnRhaW5lci5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0X3RoaXMuX3RvdWNoc3RhcnRYID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWDtcblx0XHRcdH0pLm9uKCd0b3VjaGVuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0X3RoaXMuX3RvdWNoZW5kWCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblg7XG5cdFx0XHRcdF90aGlzLl9zd2lwZUdlc3VyZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0X2NyZWF0ZUNsYXNzKExpZ2h0Ym94LCBbe1xuXHRcdFx0a2V5OiAnZWxlbWVudCcsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gZWxlbWVudCgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuXyRlbGVtZW50O1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ21vZGFsJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBtb2RhbCgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuXyRtb2RhbDtcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICduYXZpZ2F0ZVRvJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBuYXZpZ2F0ZVRvKGluZGV4KSB7XG5cblx0XHRcdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuXyRnYWxsZXJ5SXRlbXMubGVuZ3RoIC0gMSkgcmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0dGhpcy5fZ2FsbGVyeUluZGV4ID0gaW5kZXg7XG5cblx0XHRcdFx0dGhpcy51cGRhdGVOYXZpZ2F0aW9uKCk7XG5cblx0XHRcdFx0dGhpcy5fJGVsZW1lbnQgPSAkKHRoaXMuXyRnYWxsZXJ5SXRlbXMuZ2V0KHRoaXMuX2dhbGxlcnlJbmRleCkpO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGUoKTtcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICduYXZpZ2F0ZUxlZnQnLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIG5hdmlnYXRlTGVmdCgpIHtcblxuXHRcdFx0XHRpZiAoIXRoaXMuXyRnYWxsZXJ5SXRlbXMpIHJldHVybjtcblxuXHRcdFx0XHRpZiAodGhpcy5fJGdhbGxlcnlJdGVtcy5sZW5ndGggPT09IDEpIHJldHVybjtcblxuXHRcdFx0XHRpZiAodGhpcy5fZ2FsbGVyeUluZGV4ID09PSAwKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuX2NvbmZpZy53cmFwcGluZykgdGhpcy5fZ2FsbGVyeUluZGV4ID0gdGhpcy5fJGdhbGxlcnlJdGVtcy5sZW5ndGggLSAxO2Vsc2UgcmV0dXJuO1xuXHRcdFx0XHR9IGVsc2UgLy9jaXJjdWxhclxuXHRcdFx0XHRcdHRoaXMuX2dhbGxlcnlJbmRleC0tO1xuXG5cdFx0XHRcdHRoaXMuX2NvbmZpZy5vbk5hdmlnYXRlLmNhbGwodGhpcywgJ2xlZnQnLCB0aGlzLl9nYWxsZXJ5SW5kZXgpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHRoaXMuX2dhbGxlcnlJbmRleCk7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnbmF2aWdhdGVSaWdodCcsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gbmF2aWdhdGVSaWdodCgpIHtcblxuXHRcdFx0XHRpZiAoIXRoaXMuXyRnYWxsZXJ5SXRlbXMpIHJldHVybjtcblxuXHRcdFx0XHRpZiAodGhpcy5fJGdhbGxlcnlJdGVtcy5sZW5ndGggPT09IDEpIHJldHVybjtcblxuXHRcdFx0XHRpZiAodGhpcy5fZ2FsbGVyeUluZGV4ID09PSB0aGlzLl8kZ2FsbGVyeUl0ZW1zLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLndyYXBwaW5nKSB0aGlzLl9nYWxsZXJ5SW5kZXggPSAwO2Vsc2UgcmV0dXJuO1xuXHRcdFx0XHR9IGVsc2UgLy9jaXJjdWxhclxuXHRcdFx0XHRcdHRoaXMuX2dhbGxlcnlJbmRleCsrO1xuXG5cdFx0XHRcdHRoaXMuX2NvbmZpZy5vbk5hdmlnYXRlLmNhbGwodGhpcywgJ3JpZ2h0JywgdGhpcy5fZ2FsbGVyeUluZGV4KTtcblx0XHRcdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVUbyh0aGlzLl9nYWxsZXJ5SW5kZXgpO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ3VwZGF0ZU5hdmlnYXRpb24nLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb24oKSB7XG5cdFx0XHRcdGlmICghdGhpcy5fY29uZmlnLndyYXBwaW5nKSB7XG5cdFx0XHRcdFx0dmFyICRuYXYgPSB0aGlzLl8kbGlnaHRib3hDb250YWluZXIuZmluZCgnZGl2LmVra28tbGlnaHRib3gtbmF2LW92ZXJsYXknKTtcblx0XHRcdFx0XHRpZiAodGhpcy5fZ2FsbGVyeUluZGV4ID09PSAwKSAkbmF2LmZpbmQoJ2E6Zmlyc3QtY2hpbGQnKS5hZGRDbGFzcygnZGlzYWJsZWQnKTtlbHNlICRuYXYuZmluZCgnYTpmaXJzdC1jaGlsZCcpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMuX2dhbGxlcnlJbmRleCA9PT0gdGhpcy5fJGdhbGxlcnlJdGVtcy5sZW5ndGggLSAxKSAkbmF2LmZpbmQoJ2E6bGFzdC1jaGlsZCcpLmFkZENsYXNzKCdkaXNhYmxlZCcpO2Vsc2UgJG5hdi5maW5kKCdhOmxhc3QtY2hpbGQnKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ2Nsb3NlJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuXyRtb2RhbC5tb2RhbCgnaGlkZScpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBoZWxwZXIgcHJpdmF0ZSBtZXRob2RzXG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX25hdmlnYXRpb25hbEJpbmRlcicsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX25hdmlnYXRpb25hbEJpbmRlcihldmVudCkge1xuXHRcdFx0XHRldmVudCA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDtcblx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDM5KSByZXR1cm4gdGhpcy5uYXZpZ2F0ZVJpZ2h0KCk7XG5cdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSAzNykgcmV0dXJuIHRoaXMubmF2aWdhdGVMZWZ0KCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHR5cGUgZGV0ZWN0aW9uIHByaXZhdGUgbWV0aG9kc1xuXHRcdH0sIHtcblx0XHRcdGtleTogJ19kZXRlY3RSZW1vdGVUeXBlJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfZGV0ZWN0UmVtb3RlVHlwZShzcmMsIHR5cGUpIHtcblxuXHRcdFx0XHR0eXBlID0gdHlwZSB8fCBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIXR5cGUgJiYgdGhpcy5faXNJbWFnZShzcmMpKSB0eXBlID0gJ2ltYWdlJztcblx0XHRcdFx0aWYgKCF0eXBlICYmIHRoaXMuX2dldFlvdXR1YmVJZChzcmMpKSB0eXBlID0gJ3lvdXR1YmUnO1xuXHRcdFx0XHRpZiAoIXR5cGUgJiYgdGhpcy5fZ2V0VmltZW9JZChzcmMpKSB0eXBlID0gJ3ZpbWVvJztcblx0XHRcdFx0aWYgKCF0eXBlICYmIHRoaXMuX2dldEluc3RhZ3JhbUlkKHNyYykpIHR5cGUgPSAnaW5zdGFncmFtJztcblxuXHRcdFx0XHRpZiAoIXR5cGUgfHwgWydpbWFnZScsICd5b3V0dWJlJywgJ3ZpbWVvJywgJ2luc3RhZ3JhbScsICd2aWRlbycsICd1cmwnXS5pbmRleE9mKHR5cGUpIDwgMCkgdHlwZSA9ICd1cmwnO1xuXG5cdFx0XHRcdHJldHVybiB0eXBlO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ19pc0ltYWdlJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfaXNJbWFnZShzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHN0cmluZyAmJiBzdHJpbmcubWF0Y2goLyheZGF0YTppbWFnZVxcLy4qLCl8KFxcLihqcChlfGd8ZWcpfGdpZnxwbmd8Ym1wfHdlYnB8c3ZnKSgoXFw/fCMpLiopPyQpL2kpO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ19jb250YWluZXJUb1VzZScsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX2NvbnRhaW5lclRvVXNlKCkge1xuXHRcdFx0XHR2YXIgX3RoaXMyID0gdGhpcztcblxuXHRcdFx0XHQvLyBpZiBjdXJyZW50bHkgc2hvd2luZyBhbiBpbWFnZSwgZmFkZSBpdCBvdXQgYW5kIHJlbW92ZVxuXHRcdFx0XHR2YXIgJHRvVXNlID0gdGhpcy5fJGxpZ2h0Ym94Qm9keVR3bztcblx0XHRcdFx0dmFyICRjdXJyZW50ID0gdGhpcy5fJGxpZ2h0Ym94Qm9keU9uZTtcblxuXHRcdFx0XHRpZiAodGhpcy5fJGxpZ2h0Ym94Qm9keVR3by5oYXNDbGFzcygnaW4nKSkge1xuXHRcdFx0XHRcdCR0b1VzZSA9IHRoaXMuXyRsaWdodGJveEJvZHlPbmU7XG5cdFx0XHRcdFx0JGN1cnJlbnQgPSB0aGlzLl8kbGlnaHRib3hCb2R5VHdvO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JGN1cnJlbnQucmVtb3ZlQ2xhc3MoJ2luIHNob3cnKTtcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKCFfdGhpczIuXyRsaWdodGJveEJvZHlUd28uaGFzQ2xhc3MoJ2luJykpIF90aGlzMi5fJGxpZ2h0Ym94Qm9keVR3by5lbXB0eSgpO1xuXHRcdFx0XHRcdGlmICghX3RoaXMyLl8kbGlnaHRib3hCb2R5T25lLmhhc0NsYXNzKCdpbicpKSBfdGhpczIuXyRsaWdodGJveEJvZHlPbmUuZW1wdHkoKTtcblx0XHRcdFx0fSwgNTAwKTtcblxuXHRcdFx0XHQkdG9Vc2UuYWRkQ2xhc3MoJ2luIHNob3cnKTtcblx0XHRcdFx0cmV0dXJuICR0b1VzZTtcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICdfaGFuZGxlJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlKCkge1xuXG5cdFx0XHRcdHZhciAkdG9Vc2UgPSB0aGlzLl9jb250YWluZXJUb1VzZSgpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVUaXRsZUFuZEZvb3RlcigpO1xuXG5cdFx0XHRcdHZhciBjdXJyZW50UmVtb3RlID0gdGhpcy5fJGVsZW1lbnQuYXR0cignZGF0YS1yZW1vdGUnKSB8fCB0aGlzLl8kZWxlbWVudC5hdHRyKCdocmVmJyk7XG5cdFx0XHRcdHZhciBjdXJyZW50VHlwZSA9IHRoaXMuX2RldGVjdFJlbW90ZVR5cGUoY3VycmVudFJlbW90ZSwgdGhpcy5fJGVsZW1lbnQuYXR0cignZGF0YS10eXBlJykgfHwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChbJ2ltYWdlJywgJ3lvdXR1YmUnLCAndmltZW8nLCAnaW5zdGFncmFtJywgJ3ZpZGVvJywgJ3VybCddLmluZGV4T2YoY3VycmVudFR5cGUpIDwgMCkgcmV0dXJuIHRoaXMuX2Vycm9yKHRoaXMuX2NvbmZpZy5zdHJpbmdzLnR5cGUpO1xuXG5cdFx0XHRcdHN3aXRjaCAoY3VycmVudFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlICdpbWFnZSc6XG5cdFx0XHRcdFx0XHR0aGlzLl9wcmVsb2FkSW1hZ2UoY3VycmVudFJlbW90ZSwgJHRvVXNlKTtcblx0XHRcdFx0XHRcdHRoaXMuX3ByZWxvYWRJbWFnZUJ5SW5kZXgodGhpcy5fZ2FsbGVyeUluZGV4LCAzKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3lvdXR1YmUnOlxuXHRcdFx0XHRcdFx0dGhpcy5fc2hvd1lvdXR1YmVWaWRlbyhjdXJyZW50UmVtb3RlLCAkdG9Vc2UpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAndmltZW8nOlxuXHRcdFx0XHRcdFx0dGhpcy5fc2hvd1ZpbWVvVmlkZW8odGhpcy5fZ2V0VmltZW9JZChjdXJyZW50UmVtb3RlKSwgJHRvVXNlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2luc3RhZ3JhbSc6XG5cdFx0XHRcdFx0XHR0aGlzLl9zaG93SW5zdGFncmFtVmlkZW8odGhpcy5fZ2V0SW5zdGFncmFtSWQoY3VycmVudFJlbW90ZSksICR0b1VzZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd2aWRlbyc6XG5cdFx0XHRcdFx0XHR0aGlzLl9zaG93SHRtbDVWaWRlbyhjdXJyZW50UmVtb3RlLCAkdG9Vc2UpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdC8vIHVybFxuXHRcdFx0XHRcdFx0dGhpcy5fbG9hZFJlbW90ZUNvbnRlbnQoY3VycmVudFJlbW90ZSwgJHRvVXNlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX2dldFlvdXR1YmVJZCcsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX2dldFlvdXR1YmVJZChzdHJpbmcpIHtcblx0XHRcdFx0aWYgKCFzdHJpbmcpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0dmFyIG1hdGNoZXMgPSBzdHJpbmcubWF0Y2goL14uKih5b3V0dS5iZVxcL3x2XFwvfHVcXC9cXHdcXC98ZW1iZWRcXC98d2F0Y2hcXD92PXxcXCZ2PSkoW14jXFwmXFw/XSopLiovKTtcblx0XHRcdFx0cmV0dXJuIG1hdGNoZXMgJiYgbWF0Y2hlc1syXS5sZW5ndGggPT09IDExID8gbWF0Y2hlc1syXSA6IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ19nZXRWaW1lb0lkJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfZ2V0VmltZW9JZChzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHN0cmluZyAmJiBzdHJpbmcuaW5kZXhPZigndmltZW8nKSA+IDAgPyBzdHJpbmcgOiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICdfZ2V0SW5zdGFncmFtSWQnLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIF9nZXRJbnN0YWdyYW1JZChzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHN0cmluZyAmJiBzdHJpbmcuaW5kZXhPZignaW5zdGFncmFtJykgPiAwID8gc3RyaW5nIDogZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGxheW91dCBwcml2YXRlIG1ldGhvZHNcblx0XHR9LCB7XG5cdFx0XHRrZXk6ICdfdG9nZ2xlTG9hZGluZycsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3RvZ2dsZUxvYWRpbmcoc2hvdykge1xuXHRcdFx0XHRzaG93ID0gc2hvdyB8fCBmYWxzZTtcblx0XHRcdFx0aWYgKHNob3cpIHtcblx0XHRcdFx0XHR0aGlzLl8kbW9kYWxEaWFsb2cuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblx0XHRcdFx0XHR0aGlzLl8kbW9kYWwucmVtb3ZlQ2xhc3MoJ2luIHNob3cnKTtcblx0XHRcdFx0XHQkKCcubW9kYWwtYmFja2Ryb3AnKS5hcHBlbmQodGhpcy5fY29uZmlnLmxvYWRpbmdNZXNzYWdlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl8kbW9kYWxEaWFsb2cuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG5cdFx0XHRcdFx0dGhpcy5fJG1vZGFsLmFkZENsYXNzKCdpbiBzaG93Jyk7XG5cdFx0XHRcdFx0JCgnLm1vZGFsLWJhY2tkcm9wJykuZmluZCgnLmVra28tbGlnaHRib3gtbG9hZGVyJykucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX2NhbGN1bGF0ZUJvcmRlcnMnLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIF9jYWxjdWxhdGVCb3JkZXJzKCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRvcDogdGhpcy5fdG90YWxDc3NCeUF0dHJpYnV0ZSgnYm9yZGVyLXRvcC13aWR0aCcpLFxuXHRcdFx0XHRcdHJpZ2h0OiB0aGlzLl90b3RhbENzc0J5QXR0cmlidXRlKCdib3JkZXItcmlnaHQtd2lkdGgnKSxcblx0XHRcdFx0XHRib3R0b206IHRoaXMuX3RvdGFsQ3NzQnlBdHRyaWJ1dGUoJ2JvcmRlci1ib3R0b20td2lkdGgnKSxcblx0XHRcdFx0XHRsZWZ0OiB0aGlzLl90b3RhbENzc0J5QXR0cmlidXRlKCdib3JkZXItbGVmdC13aWR0aCcpXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX2NhbGN1bGF0ZVBhZGRpbmcnLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIF9jYWxjdWxhdGVQYWRkaW5nKCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRvcDogdGhpcy5fdG90YWxDc3NCeUF0dHJpYnV0ZSgncGFkZGluZy10b3AnKSxcblx0XHRcdFx0XHRyaWdodDogdGhpcy5fdG90YWxDc3NCeUF0dHJpYnV0ZSgncGFkZGluZy1yaWdodCcpLFxuXHRcdFx0XHRcdGJvdHRvbTogdGhpcy5fdG90YWxDc3NCeUF0dHJpYnV0ZSgncGFkZGluZy1ib3R0b20nKSxcblx0XHRcdFx0XHRsZWZ0OiB0aGlzLl90b3RhbENzc0J5QXR0cmlidXRlKCdwYWRkaW5nLWxlZnQnKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ190b3RhbENzc0J5QXR0cmlidXRlJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfdG90YWxDc3NCeUF0dHJpYnV0ZShhdHRyaWJ1dGUpIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMuXyRtb2RhbERpYWxvZy5jc3MoYXR0cmlidXRlKSwgMTApICsgcGFyc2VJbnQodGhpcy5fJG1vZGFsQ29udGVudC5jc3MoYXR0cmlidXRlKSwgMTApICsgcGFyc2VJbnQodGhpcy5fJG1vZGFsQm9keS5jc3MoYXR0cmlidXRlKSwgMTApO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ191cGRhdGVUaXRsZUFuZEZvb3RlcicsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZVRpdGxlQW5kRm9vdGVyKCkge1xuXHRcdFx0XHR2YXIgdGl0bGUgPSB0aGlzLl8kZWxlbWVudC5kYXRhKCd0aXRsZScpIHx8IFwiXCI7XG5cdFx0XHRcdHZhciBjYXB0aW9uID0gdGhpcy5fJGVsZW1lbnQuZGF0YSgnZm9vdGVyJykgfHwgXCJcIjtcblxuXHRcdFx0XHR0aGlzLl90aXRsZUlzU2hvd24gPSBmYWxzZTtcblx0XHRcdFx0aWYgKHRpdGxlIHx8IHRoaXMuX2NvbmZpZy5hbHdheXNTaG93Q2xvc2UpIHtcblx0XHRcdFx0XHR0aGlzLl90aXRsZUlzU2hvd24gPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuXyRtb2RhbEhlYWRlci5jc3MoJ2Rpc3BsYXknLCAnJykuZmluZCgnLm1vZGFsLXRpdGxlJykuaHRtbCh0aXRsZSB8fCBcIiZuYnNwO1wiKTtcblx0XHRcdFx0fSBlbHNlIHRoaXMuXyRtb2RhbEhlYWRlci5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG5cdFx0XHRcdHRoaXMuX2Zvb3RlcklzU2hvd24gPSBmYWxzZTtcblx0XHRcdFx0aWYgKGNhcHRpb24pIHtcblx0XHRcdFx0XHR0aGlzLl9mb290ZXJJc1Nob3duID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl8kbW9kYWxGb290ZXIuY3NzKCdkaXNwbGF5JywgJycpLmh0bWwoY2FwdGlvbik7XG5cdFx0XHRcdH0gZWxzZSB0aGlzLl8kbW9kYWxGb290ZXIuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICdfc2hvd1lvdXR1YmVWaWRlbycsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3Nob3dZb3V0dWJlVmlkZW8ocmVtb3RlLCAkY29udGFpbmVyRm9yRWxlbWVudCkge1xuXHRcdFx0XHR2YXIgaWQgPSB0aGlzLl9nZXRZb3V0dWJlSWQocmVtb3RlKTtcblx0XHRcdFx0dmFyIHF1ZXJ5ID0gcmVtb3RlLmluZGV4T2YoJyYnKSA+IDAgPyByZW1vdGUuc3Vic3RyKHJlbW90ZS5pbmRleE9mKCcmJykpIDogJyc7XG5cdFx0XHRcdHZhciB3aWR0aCA9IHRoaXMuXyRlbGVtZW50LmRhdGEoJ3dpZHRoJykgfHwgNTYwO1xuXHRcdFx0XHR2YXIgaGVpZ2h0ID0gdGhpcy5fJGVsZW1lbnQuZGF0YSgnaGVpZ2h0JykgfHwgd2lkdGggLyAoNTYwIC8gMzE1KTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX3Nob3dWaWRlb0lmcmFtZSgnLy93d3cueW91dHViZS5jb20vZW1iZWQvJyArIGlkICsgJz9iYWRnZT0wJmF1dG9wbGF5PTEmaHRtbDU9MScgKyBxdWVyeSwgd2lkdGgsIGhlaWdodCwgJGNvbnRhaW5lckZvckVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ19zaG93VmltZW9WaWRlbycsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3Nob3dWaW1lb1ZpZGVvKGlkLCAkY29udGFpbmVyRm9yRWxlbWVudCkge1xuXHRcdFx0XHR2YXIgd2lkdGggPSB0aGlzLl8kZWxlbWVudC5kYXRhKCd3aWR0aCcpIHx8IDUwMDtcblx0XHRcdFx0dmFyIGhlaWdodCA9IHRoaXMuXyRlbGVtZW50LmRhdGEoJ2hlaWdodCcpIHx8IHdpZHRoIC8gKDU2MCAvIDMxNSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9zaG93VmlkZW9JZnJhbWUoaWQgKyAnP2F1dG9wbGF5PTEnLCB3aWR0aCwgaGVpZ2h0LCAkY29udGFpbmVyRm9yRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX3Nob3dJbnN0YWdyYW1WaWRlbycsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3Nob3dJbnN0YWdyYW1WaWRlbyhpZCwgJGNvbnRhaW5lckZvckVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gaW5zdGFncmFtIGxvYWQgdGhlaXIgY29udGVudCBpbnRvIGlmcmFtZSdzIHNvIHRoaXMgY2FuIGJlIHB1dCBzdHJhaWdodCBpbnRvIHRoZSBlbGVtZW50XG5cdFx0XHRcdHZhciB3aWR0aCA9IHRoaXMuXyRlbGVtZW50LmRhdGEoJ3dpZHRoJykgfHwgNjEyO1xuXHRcdFx0XHR2YXIgaGVpZ2h0ID0gd2lkdGggKyA4MDtcblx0XHRcdFx0aWQgPSBpZC5zdWJzdHIoLTEpICE9PSAnLycgPyBpZCArICcvJyA6IGlkOyAvLyBlbnN1cmUgaWQgaGFzIHRyYWlsaW5nIHNsYXNoXG5cdFx0XHRcdCRjb250YWluZXJGb3JFbGVtZW50Lmh0bWwoJzxpZnJhbWUgd2lkdGg9XCInICsgd2lkdGggKyAnXCIgaGVpZ2h0PVwiJyArIGhlaWdodCArICdcIiBzcmM9XCInICsgaWQgKyAnZW1iZWQvXCIgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPicpO1xuXHRcdFx0XHR0aGlzLl9yZXNpemUod2lkdGgsIGhlaWdodCk7XG5cdFx0XHRcdHRoaXMuX2NvbmZpZy5vbkNvbnRlbnRMb2FkZWQuY2FsbCh0aGlzKTtcblx0XHRcdFx0aWYgKHRoaXMuXyRtb2RhbEFycm93cykgLy9oaWRlIHRoZSBhcnJvd3Mgd2hlbiBzaG93aW5nIHZpZGVvXG5cdFx0XHRcdFx0dGhpcy5fJG1vZGFsQXJyb3dzLmNzcygnZGlzcGxheScsICdub25lJyk7XG5cdFx0XHRcdHRoaXMuX3RvZ2dsZUxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICdfc2hvd1ZpZGVvSWZyYW1lJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfc2hvd1ZpZGVvSWZyYW1lKHVybCwgd2lkdGgsIGhlaWdodCwgJGNvbnRhaW5lckZvckVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIHVzZWQgZm9yIHZpZGVvcyBvbmx5LiBmb3IgcmVtb3RlIGNvbnRlbnQgdXNlIGxvYWRSZW1vdGVDb250ZW50IChkYXRhLXR5cGU9dXJsKVxuXHRcdFx0XHRoZWlnaHQgPSBoZWlnaHQgfHwgd2lkdGg7IC8vIGRlZmF1bHQgdG8gc3F1YXJlXG5cdFx0XHRcdCRjb250YWluZXJGb3JFbGVtZW50Lmh0bWwoJzxkaXYgY2xhc3M9XCJlbWJlZC1yZXNwb25zaXZlIGVtYmVkLXJlc3BvbnNpdmUtMTZieTlcIj48aWZyYW1lIHdpZHRoPVwiJyArIHdpZHRoICsgJ1wiIGhlaWdodD1cIicgKyBoZWlnaHQgKyAnXCIgc3JjPVwiJyArIHVybCArICdcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvd2Z1bGxzY3JlZW4gY2xhc3M9XCJlbWJlZC1yZXNwb25zaXZlLWl0ZW1cIj48L2lmcmFtZT48L2Rpdj4nKTtcblx0XHRcdFx0dGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXHRcdFx0XHR0aGlzLl9jb25maWcub25Db250ZW50TG9hZGVkLmNhbGwodGhpcyk7XG5cdFx0XHRcdGlmICh0aGlzLl8kbW9kYWxBcnJvd3MpIHRoaXMuXyRtb2RhbEFycm93cy5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOyAvL2hpZGUgdGhlIGFycm93cyB3aGVuIHNob3dpbmcgdmlkZW9cblx0XHRcdFx0dGhpcy5fdG9nZ2xlTG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ19zaG93SHRtbDVWaWRlbycsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3Nob3dIdG1sNVZpZGVvKHVybCwgJGNvbnRhaW5lckZvckVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIHVzZWQgZm9yIHZpZGVvcyBvbmx5LiBmb3IgcmVtb3RlIGNvbnRlbnQgdXNlIGxvYWRSZW1vdGVDb250ZW50IChkYXRhLXR5cGU9dXJsKVxuXHRcdFx0XHR2YXIgd2lkdGggPSB0aGlzLl8kZWxlbWVudC5kYXRhKCd3aWR0aCcpIHx8IDU2MDtcblx0XHRcdFx0dmFyIGhlaWdodCA9IHRoaXMuXyRlbGVtZW50LmRhdGEoJ2hlaWdodCcpIHx8IHdpZHRoIC8gKDU2MCAvIDMxNSk7XG5cdFx0XHRcdCRjb250YWluZXJGb3JFbGVtZW50Lmh0bWwoJzxkaXYgY2xhc3M9XCJlbWJlZC1yZXNwb25zaXZlIGVtYmVkLXJlc3BvbnNpdmUtMTZieTlcIj48dmlkZW8gd2lkdGg9XCInICsgd2lkdGggKyAnXCIgaGVpZ2h0PVwiJyArIGhlaWdodCArICdcIiBzcmM9XCInICsgdXJsICsgJ1wiIHByZWxvYWQ9XCJhdXRvXCIgYXV0b3BsYXkgY29udHJvbHMgY2xhc3M9XCJlbWJlZC1yZXNwb25zaXZlLWl0ZW1cIj48L3ZpZGVvPjwvZGl2PicpO1xuXHRcdFx0XHR0aGlzLl9yZXNpemUod2lkdGgsIGhlaWdodCk7XG5cdFx0XHRcdHRoaXMuX2NvbmZpZy5vbkNvbnRlbnRMb2FkZWQuY2FsbCh0aGlzKTtcblx0XHRcdFx0aWYgKHRoaXMuXyRtb2RhbEFycm93cykgdGhpcy5fJG1vZGFsQXJyb3dzLmNzcygnZGlzcGxheScsICdub25lJyk7IC8vaGlkZSB0aGUgYXJyb3dzIHdoZW4gc2hvd2luZyB2aWRlb1xuXHRcdFx0XHR0aGlzLl90b2dnbGVMb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX2xvYWRSZW1vdGVDb250ZW50Jyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfbG9hZFJlbW90ZUNvbnRlbnQodXJsLCAkY29udGFpbmVyRm9yRWxlbWVudCkge1xuXHRcdFx0XHR2YXIgX3RoaXMzID0gdGhpcztcblxuXHRcdFx0XHR2YXIgd2lkdGggPSB0aGlzLl8kZWxlbWVudC5kYXRhKCd3aWR0aCcpIHx8IDU2MDtcblx0XHRcdFx0dmFyIGhlaWdodCA9IHRoaXMuXyRlbGVtZW50LmRhdGEoJ2hlaWdodCcpIHx8IDU2MDtcblxuXHRcdFx0XHR2YXIgZGlzYWJsZUV4dGVybmFsQ2hlY2sgPSB0aGlzLl8kZWxlbWVudC5kYXRhKCdkaXNhYmxlRXh0ZXJuYWxDaGVjaycpIHx8IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl90b2dnbGVMb2FkaW5nKGZhbHNlKTtcblxuXHRcdFx0XHQvLyBleHRlcm5hbCB1cmxzIGFyZSBsb2FkaW5nIGludG8gYW4gaWZyYW1lXG5cdFx0XHRcdC8vIGxvY2FsIGFqYXggY2FuIGJlIGxvYWRlZCBpbnRvIHRoZSBjb250YWluZXIgaXRzZWxmXG5cdFx0XHRcdGlmICghZGlzYWJsZUV4dGVybmFsQ2hlY2sgJiYgIXRoaXMuX2lzRXh0ZXJuYWwodXJsKSkge1xuXHRcdFx0XHRcdCRjb250YWluZXJGb3JFbGVtZW50LmxvYWQodXJsLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBfdGhpczMuXyRlbGVtZW50LnRyaWdnZXIoJ2xvYWRlZC5icy5tb2RhbCcpO2w7XG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCRjb250YWluZXJGb3JFbGVtZW50Lmh0bWwoJzxpZnJhbWUgc3JjPVwiJyArIHVybCArICdcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+Jyk7XG5cdFx0XHRcdFx0dGhpcy5fY29uZmlnLm9uQ29udGVudExvYWRlZC5jYWxsKHRoaXMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMuXyRtb2RhbEFycm93cykgLy9oaWRlIHRoZSBhcnJvd3Mgd2hlbiByZW1vdGUgY29udGVudFxuXHRcdFx0XHRcdHRoaXMuXyRtb2RhbEFycm93cy5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG5cdFx0XHRcdHRoaXMuX3Jlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX2lzRXh0ZXJuYWwnLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIF9pc0V4dGVybmFsKHVybCkge1xuXHRcdFx0XHR2YXIgbWF0Y2ggPSB1cmwubWF0Y2goL14oW146XFwvPyNdKzopPyg/OlxcL1xcLyhbXlxcLz8jXSopKT8oW14/I10rKT8oXFw/W14jXSopPygjLiopPy8pO1xuXHRcdFx0XHRpZiAodHlwZW9mIG1hdGNoWzFdID09PSBcInN0cmluZ1wiICYmIG1hdGNoWzFdLmxlbmd0aCA+IDAgJiYgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSAhPT0gbG9jYXRpb24ucHJvdG9jb2wpIHJldHVybiB0cnVlO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgbWF0Y2hbMl0gPT09IFwic3RyaW5nXCIgJiYgbWF0Y2hbMl0ubGVuZ3RoID4gMCAmJiBtYXRjaFsyXS5yZXBsYWNlKG5ldyBSZWdFeHAoJzooJyArICh7XG5cdFx0XHRcdFx0XCJodHRwOlwiOiA4MCxcblx0XHRcdFx0XHRcImh0dHBzOlwiOiA0NDNcblx0XHRcdFx0fSlbbG9jYXRpb24ucHJvdG9jb2xdICsgJyk/JCcpLCBcIlwiKSAhPT0gbG9jYXRpb24uaG9zdCkgcmV0dXJuIHRydWU7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ19lcnJvcicsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX2Vycm9yKG1lc3NhZ2UpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihtZXNzYWdlKTtcblx0XHRcdFx0dGhpcy5fY29udGFpbmVyVG9Vc2UoKS5odG1sKG1lc3NhZ2UpO1xuXHRcdFx0XHR0aGlzLl9yZXNpemUoMzAwLCAzMDApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICdfcHJlbG9hZEltYWdlQnlJbmRleCcsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3ByZWxvYWRJbWFnZUJ5SW5kZXgoc3RhcnRJbmRleCwgbnVtYmVyT2ZUaW1lcykge1xuXG5cdFx0XHRcdGlmICghdGhpcy5fJGdhbGxlcnlJdGVtcykgcmV0dXJuO1xuXG5cdFx0XHRcdHZhciBuZXh0ID0gJCh0aGlzLl8kZ2FsbGVyeUl0ZW1zLmdldChzdGFydEluZGV4KSwgZmFsc2UpO1xuXHRcdFx0XHRpZiAodHlwZW9mIG5leHQgPT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuXHRcdFx0XHR2YXIgc3JjID0gbmV4dC5hdHRyKCdkYXRhLXJlbW90ZScpIHx8IG5leHQuYXR0cignaHJlZicpO1xuXHRcdFx0XHRpZiAobmV4dC5hdHRyKCdkYXRhLXR5cGUnKSA9PT0gJ2ltYWdlJyB8fCB0aGlzLl9pc0ltYWdlKHNyYykpIHRoaXMuX3ByZWxvYWRJbWFnZShzcmMsIGZhbHNlKTtcblxuXHRcdFx0XHRpZiAobnVtYmVyT2ZUaW1lcyA+IDApIHJldHVybiB0aGlzLl9wcmVsb2FkSW1hZ2VCeUluZGV4KHN0YXJ0SW5kZXggKyAxLCBudW1iZXJPZlRpbWVzIC0gMSk7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiAnX3ByZWxvYWRJbWFnZScsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3ByZWxvYWRJbWFnZShzcmMsICRjb250YWluZXJGb3JJbWFnZSkge1xuXHRcdFx0XHR2YXIgX3RoaXM0ID0gdGhpcztcblxuXHRcdFx0XHQkY29udGFpbmVyRm9ySW1hZ2UgPSAkY29udGFpbmVyRm9ySW1hZ2UgfHwgZmFsc2U7XG5cblx0XHRcdFx0dmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuXHRcdFx0XHRpZiAoJGNvbnRhaW5lckZvckltYWdlKSB7XG5cdFx0XHRcdFx0KGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRcdFx0Ly8gaWYgbG9hZGluZyB0YWtlcyA+IDIwMG1zIHNob3cgYSBsb2FkZXJcblx0XHRcdFx0XHRcdHZhciBsb2FkaW5nVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHQkY29udGFpbmVyRm9ySW1hZ2UuYXBwZW5kKF90aGlzNC5fY29uZmlnLmxvYWRpbmdNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH0sIDIwMCk7XG5cblx0XHRcdFx0XHRcdGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChsb2FkaW5nVGltZW91dCkgY2xlYXJUaW1lb3V0KGxvYWRpbmdUaW1lb3V0KTtcblx0XHRcdFx0XHRcdFx0bG9hZGluZ1RpbWVvdXQgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHR2YXIgaW1hZ2UgPSAkKCc8aW1nIC8+Jyk7XG5cdFx0XHRcdFx0XHRcdGltYWdlLmF0dHIoJ3NyYycsIGltZy5zcmMpO1xuXHRcdFx0XHRcdFx0XHRpbWFnZS5hZGRDbGFzcygnaW1nLWZsdWlkJyk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgYm9vdHN0cmFwIHYzXG5cdFx0XHRcdFx0XHRcdGltYWdlLmNzcygnd2lkdGgnLCAnMTAwJScpO1xuXG5cdFx0XHRcdFx0XHRcdCRjb250YWluZXJGb3JJbWFnZS5odG1sKGltYWdlKTtcblx0XHRcdFx0XHRcdFx0aWYgKF90aGlzNC5fJG1vZGFsQXJyb3dzKSBfdGhpczQuXyRtb2RhbEFycm93cy5jc3MoJ2Rpc3BsYXknLCAnJyk7IC8vIHJlbW92ZSBkaXNwbGF5IHRvIGRlZmF1bHQgdG8gY3NzIHByb3BlcnR5XG5cblx0XHRcdFx0XHRcdFx0X3RoaXM0Ll9yZXNpemUoaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcblx0XHRcdFx0XHRcdFx0X3RoaXM0Ll90b2dnbGVMb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIF90aGlzNC5fY29uZmlnLm9uQ29udGVudExvYWRlZC5jYWxsKF90aGlzNCk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdF90aGlzNC5fdG9nZ2xlTG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBfdGhpczQuX2Vycm9yKF90aGlzNC5fY29uZmlnLnN0cmluZ3MuZmFpbCArICgnICAnICsgc3JjKSk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbWcuc3JjID0gc3JjO1xuXHRcdFx0XHRyZXR1cm4gaW1nO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGtleTogJ19zd2lwZUdlc3VyZScsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX3N3aXBlR2VzdXJlKCkge1xuXHRcdFx0XHRpZiAodGhpcy5fdG91Y2hlbmRYIDwgdGhpcy5fdG91Y2hzdGFydFgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVJpZ2h0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3RvdWNoZW5kWCA+IHRoaXMuX3RvdWNoc3RhcnRYKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVMZWZ0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6ICdfcmVzaXplJyxcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBfcmVzaXplKHdpZHRoLCBoZWlnaHQpIHtcblxuXHRcdFx0XHRoZWlnaHQgPSBoZWlnaHQgfHwgd2lkdGg7XG5cdFx0XHRcdHRoaXMuX3dhbnRlZFdpZHRoID0gd2lkdGg7XG5cdFx0XHRcdHRoaXMuX3dhbnRlZEhlaWdodCA9IGhlaWdodDtcblxuXHRcdFx0XHR2YXIgaW1hZ2VBc3BlY1JhdGlvID0gd2lkdGggLyBoZWlnaHQ7XG5cblx0XHRcdFx0Ly8gaWYgd2lkdGggPiB0aGUgYXZhaWxhYmxlIHNwYWNlLCBzY2FsZSBkb3duIHRoZSBleHBlY3RlZCB3aWR0aCBhbmQgaGVpZ2h0XG5cdFx0XHRcdHZhciB3aWR0aEJvcmRlckFuZFBhZGRpbmcgPSB0aGlzLl9wYWRkaW5nLmxlZnQgKyB0aGlzLl9wYWRkaW5nLnJpZ2h0ICsgdGhpcy5fYm9yZGVyLmxlZnQgKyB0aGlzLl9ib3JkZXIucmlnaHQ7XG5cblx0XHRcdFx0Ly8gZm9yY2UgMTBweCBtYXJnaW4gaWYgd2luZG93IHNpemUgPiA1NzVweFxuXHRcdFx0XHR2YXIgYWRkTWFyZ2luID0gdGhpcy5fY29uZmlnLmRvYy5ib2R5LmNsaWVudFdpZHRoID4gNTc1ID8gMjAgOiAwO1xuXHRcdFx0XHR2YXIgZGlzY291bnRNYXJnaW4gPSB0aGlzLl9jb25maWcuZG9jLmJvZHkuY2xpZW50V2lkdGggPiA1NzUgPyAwIDogMjA7XG5cblx0XHRcdFx0dmFyIG1heFdpZHRoID0gTWF0aC5taW4od2lkdGggKyB3aWR0aEJvcmRlckFuZFBhZGRpbmcsIHRoaXMuX2NvbmZpZy5kb2MuYm9keS5jbGllbnRXaWR0aCAtIGFkZE1hcmdpbiwgdGhpcy5fY29uZmlnLm1heFdpZHRoKTtcblxuXHRcdFx0XHRpZiAod2lkdGggKyB3aWR0aEJvcmRlckFuZFBhZGRpbmcgPiBtYXhXaWR0aCkge1xuXHRcdFx0XHRcdGhlaWdodCA9IChtYXhXaWR0aCAtIHdpZHRoQm9yZGVyQW5kUGFkZGluZyAtIGRpc2NvdW50TWFyZ2luKSAvIGltYWdlQXNwZWNSYXRpbztcblx0XHRcdFx0XHR3aWR0aCA9IG1heFdpZHRoO1xuXHRcdFx0XHR9IGVsc2Ugd2lkdGggPSB3aWR0aCArIHdpZHRoQm9yZGVyQW5kUGFkZGluZztcblxuXHRcdFx0XHR2YXIgaGVhZGVySGVpZ2h0ID0gMCxcblx0XHRcdFx0ICAgIGZvb3RlckhlaWdodCA9IDA7XG5cblx0XHRcdFx0Ly8gYXMgdGhlIHJlc2l6ZSBpcyBwZXJmb3JtZWQgdGhlIG1vZGFsIGlzIHNob3csIHRoZSBjYWxjdWxhdGUgbWlnaHQgZmFpbFxuXHRcdFx0XHQvLyBpZiBzbywgZGVmYXVsdCB0byB0aGUgZGVmYXVsdCBzaXplc1xuXHRcdFx0XHRpZiAodGhpcy5fZm9vdGVySXNTaG93bikgZm9vdGVySGVpZ2h0ID0gdGhpcy5fJG1vZGFsRm9vdGVyLm91dGVySGVpZ2h0KHRydWUpIHx8IDU1O1xuXG5cdFx0XHRcdGlmICh0aGlzLl90aXRsZUlzU2hvd24pIGhlYWRlckhlaWdodCA9IHRoaXMuXyRtb2RhbEhlYWRlci5vdXRlckhlaWdodCh0cnVlKSB8fCA2NztcblxuXHRcdFx0XHR2YXIgYm9yZGVyUGFkZGluZyA9IHRoaXMuX3BhZGRpbmcudG9wICsgdGhpcy5fcGFkZGluZy5ib3R0b20gKyB0aGlzLl9ib3JkZXIuYm90dG9tICsgdGhpcy5fYm9yZGVyLnRvcDtcblxuXHRcdFx0XHQvL2NhbGN1bGF0ZWQgZWFjaCB0aW1lIGFzIHJlc2l6aW5nIHRoZSB3aW5kb3cgY2FuIGNhdXNlIHRoZW0gdG8gY2hhbmdlIGR1ZSB0byBCb290c3RyYXBzIGZsdWlkIG1hcmdpbnNcblx0XHRcdFx0dmFyIG1hcmdpbnMgPSBwYXJzZUZsb2F0KHRoaXMuXyRtb2RhbERpYWxvZy5jc3MoJ21hcmdpbi10b3AnKSkgKyBwYXJzZUZsb2F0KHRoaXMuXyRtb2RhbERpYWxvZy5jc3MoJ21hcmdpbi1ib3R0b20nKSk7XG5cblx0XHRcdFx0dmFyIG1heEhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgJCh3aW5kb3cpLmhlaWdodCgpIC0gYm9yZGVyUGFkZGluZyAtIG1hcmdpbnMgLSBoZWFkZXJIZWlnaHQgLSBmb290ZXJIZWlnaHQsIHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQgLSBib3JkZXJQYWRkaW5nIC0gaGVhZGVySGVpZ2h0IC0gZm9vdGVySGVpZ2h0KTtcblxuXHRcdFx0XHRpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG5cdFx0XHRcdFx0Ly8gaWYgaGVpZ2h0ID4gdGhlIGF2YWlsYWJsZSBoZWlnaHQsIHNjYWxlIGRvd24gdGhlIHdpZHRoXG5cdFx0XHRcdFx0d2lkdGggPSBNYXRoLmNlaWwobWF4SGVpZ2h0ICogaW1hZ2VBc3BlY1JhdGlvKSArIHdpZHRoQm9yZGVyQW5kUGFkZGluZztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuXyRsaWdodGJveENvbnRhaW5lci5jc3MoJ2hlaWdodCcsIG1heEhlaWdodCk7XG5cdFx0XHRcdHRoaXMuXyRtb2RhbERpYWxvZy5jc3MoJ2ZsZXgnLCAxKS5jc3MoJ21heFdpZHRoJywgd2lkdGgpO1xuXG5cdFx0XHRcdHZhciBtb2RhbCA9IHRoaXMuXyRtb2RhbC5kYXRhKCdicy5tb2RhbCcpO1xuXHRcdFx0XHRpZiAobW9kYWwpIHtcblx0XHRcdFx0XHQvLyB2NCBtZXRob2QgaXMgbWlzdGFrZW5seSBwcm90ZWN0ZWRcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0bW9kYWwuX2hhbmRsZVVwZGF0ZSgpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKEV4Y2VwdGlvbikge1xuXHRcdFx0XHRcdFx0bW9kYWwuaGFuZGxlVXBkYXRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH1dLCBbe1xuXHRcdFx0a2V5OiAnX2pRdWVyeUludGVyZmFjZScsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcblx0XHRcdFx0dmFyIF90aGlzNSA9IHRoaXM7XG5cblx0XHRcdFx0Y29uZmlnID0gY29uZmlnIHx8IHt9O1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR2YXIgJHRoaXMgPSAkKF90aGlzNSk7XG5cdFx0XHRcdFx0dmFyIF9jb25maWcgPSAkLmV4dGVuZCh7fSwgTGlnaHRib3guRGVmYXVsdCwgJHRoaXMuZGF0YSgpLCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcpO1xuXG5cdFx0XHRcdFx0bmV3IExpZ2h0Ym94KF90aGlzNSwgX2NvbmZpZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1dKTtcblxuXHRcdHJldHVybiBMaWdodGJveDtcblx0fSkoKTtcblxuXHQkLmZuW05BTUVdID0gTGlnaHRib3guX2pRdWVyeUludGVyZmFjZTtcblx0JC5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IExpZ2h0Ym94O1xuXHQkLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG5cdFx0JC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcblx0XHRyZXR1cm4gTGlnaHRib3guX2pRdWVyeUludGVyZmFjZTtcblx0fTtcblxuXHRyZXR1cm4gTGlnaHRib3g7XG59KShqUXVlcnkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZWtrby1saWdodGJveC5qcy5tYXBcblxufShqUXVlcnkpO1xuIiwiIiwiXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcblx0dmFyIHByZXZpb3VzID0gXCIgXCI7XG4gICAgJChcIiNpbWFnZV9nYWxsZXJ5XCIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHZhciBpZF9uYW1lID0gZXZlbnQudGFyZ2V0LmlkO1xuICAgICAgICBpZF9uYW1lID0gaWRfbmFtZS5yZXBsYWNlKC9bMC05XS9nLCAnJyk7IC8vcmVnZXggZm9yIGFscGhhYmV0cywgbm8gbnVtYmVyc1xuICAgICAgICB2YXIgaWRfdG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRfbmFtZSk7IC8vZ2V0IElEIG9mIG5hbWVzIHVuZGVyIGNsYXNzIFwidGVhbS1iaW9cIlxuICAgICAgICBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZF9uYW1lKSl7IC8vaWYgSUQgZXhpc3RzXG5cdFx0XHRpZigocHJldmlvdXMgIT0gaWRfbmFtZSkgJiYgKHByZXZpb3VzICE9IFwiIFwiKSl7IC8vaWYgeW91IGNsaWNrIGEgZGlmZiBpbWFnZVxuXHRcdFx0XHR2YXIgaWRfcHJldmlvdXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmV2aW91cyk7XG5cdFx0XHRcdCQoaWRfcHJldmlvdXMpLnRvZ2dsZShcImhpZGRlblwiKTtcblx0XHRcdFx0Y29uc29sZS5sb2coaWRfcHJldmlvdXMpO1xuXG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKHByZXZpb3VzID09IGlkX25hbWUpeyAvL2NsaWNraW5nIG9uIHRoZSBzYW1lIGltYWdlXG5cdFx0XHRcdCQoaWRfdG9nZ2xlKS50b2dnbGUoXCJ1bmhpZGRlblwiKTtcblx0XHRcdH1cblx0XHRcdCQoaWRfdG9nZ2xlKS50b2dnbGUoXCJ1bmhpZGRlblwiKTsgLy90b2dnbGVzIHR4dGJveCB0byBhcHBlYXJcbiAgICAgICAgXHQgcHJldmlvdXMgPSBpZF9uYW1lOy8vY2hlY2tzIHRvIHNlZSBpZiB5b3UgY2xpY2tlZCBkaWZmZXJlbnQgaW1hZ2VzXG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgXHRhbGVydChcIlRoaXMgcGVyc29uIGRvZXMgbm90IGV4aXN0LiBUcnkgYWdhaW4uXCIpO1xuICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufSk7IiwiKGZ1bmN0aW9uKCQpIHtcclxuXHJcbiAgICAkLmZuLnZpc2libGUgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyICR0ICAgICAgICAgICAgPSAkKHRoaXMpLFxyXG4gICAgICAgICAgICAkdyAgICAgICAgICAgID0gJCh3aW5kb3cpLFxyXG4gICAgICAgICAgICB3aW5kb3dIZWlnaHQgID0gd2luZG93LmlubmVySGVpZ2h0LFxyXG4gICAgICAgICAgICB3aW5kb3dUb3AgICAgID0gJHcuc2Nyb2xsVG9wKCksXHJcbiAgICAgICAgICAgIHdpbmRvd0JvdHRvbSAgPSB3aW5kb3dUb3AgKyB3aW5kb3dIZWlnaHQsXHJcbiAgICAgICAgICAgIF9oZWlnaHQgICAgICAgPSAkdC5vdXRlckhlaWdodCgpLFxyXG4gICAgICAgICAgICBfdG9wICAgICAgICAgID0gJHQub2Zmc2V0KCkudG9wLFxyXG4gICAgICAgICAgICBfYm90dG9tICAgICAgID0gX3RvcCArIF9oZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiAoKF9ib3R0b20gPj0gd2luZG93VG9wKSAmJiAoX3RvcCA8PSB3aW5kb3dCb3R0b20pKTtcclxuICAgIH07XHJcblxyXG59KShqUXVlcnkpO1xyXG5cclxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgJCh3aW5kb3cpLm9uKFwic2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoJCh3aW5kb3cpLnNjcm9sbFRvcCgpID49IDEwMCAmJiAhJChcIi5uYXZiYXJcIikuaGFzQ2xhc3MoXCJmaXhlZFwiKSkge1xyXG4gICAgICAgICAgICAkKFwiLm5hdmJhclwiKS5hZGRDbGFzcyhcImZpeGVkXCIpLmFkZENsYXNzKFwiZml4ZWQtdG9wXCIpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMVxyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoJCh3aW5kb3cpLnNjcm9sbFRvcCgpIDw9IDUwKSB7XHJcbiAgICAgICAgICAgICQoXCIubmF2YmFyXCIpLmNzcyhcInRvcFwiLCBcIlwiKS5yZW1vdmVDbGFzcyhcImZpeGVkXCIpLnJlbW92ZUNsYXNzKFwiZml4ZWQtdG9wXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvL29uIG9yIHNjcm9sbCwgZGV0ZWN0IGVsZW1lbnRzIGluIHZpZXdcclxuICAgICQod2luZG93KS5vbignc2Nyb2xsIHJlc2l6ZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQoJy5mbHktaW4nKS5lYWNoKGZ1bmN0aW9uIChpLCB2YWwpIHtcclxuICAgICAgICAgICAgaWYoJCh2YWwpLnZpc2libGUoKSl7XHJcbiAgICAgICAgICAgICAgICAkKHZhbCkuYWRkQ2xhc3MoXCJjb21lLWluXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgLy90cmlnZ2VyIG91ciBzY3JvbGwgZXZlbnQgb24gaW5pdGlhbCBsb2FkXHJcbiAgICAkKHdpbmRvdykudHJpZ2dlcignc2Nyb2xsJyk7XHJcblxyXG5cclxufSk7XHJcblxyXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcblxyXG5cclxuICAgIGxldCB3aWR0aFBvbCA9IDE5MjAsXHJcbiAgICAgICAgaGVpZ2h0UG9sID0gMTAwO1xyXG5cclxuICAgIGNvbnN0IGhlYWRlclBvbHkgPSBbXHJcbiAgICAgICAge1wieFwiOiAwLCBcInlcIjogMTAwfSxcclxuICAgICAgICB7XCJ4XCI6IHdpZHRoUG9sLCBcInlcIjogMTAwfSxcclxuICAgICAgICB7XCJ4XCI6IHdpZHRoUG9sLCBcInlcIjogMH0sXHJcbiAgICAgICAge1wieFwiOiAwLCBcInlcIjogNTB9LFxyXG4gICAgICAgIHtcInhcIjogMCwgXCJ5XCI6IDEwMH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCB3aWR0aEltZ092ZXJsYXkgPSAxOTIwLFxyXG4gICAgICAgIGhlaWdodEltZ092ZXJsYXkgPSAxMDA7XHJcblxyXG5cclxuICAgIGNvbnN0IGltYWdlUG9seVRvcCA9IFtcclxuICAgICAgICB7XCJ4XCI6IDAsIFwieVwiOiAxMDB9LFxyXG4gICAgICAgIHtcInhcIjogd2lkdGhJbWdPdmVybGF5LCBcInlcIjogNTB9LFxyXG4gICAgICAgIHtcInhcIjogd2lkdGhJbWdPdmVybGF5LCBcInlcIjogMH0sXHJcbiAgICAgICAge1wieFwiOiAwLCBcInlcIjogMH0sXHJcbiAgICAgICAge1wieFwiOiAwLCBcInlcIjogMTAwfSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgaW1hZ2VQb2x5Qm90dG9tID0gW1xyXG4gICAgICAgIHtcInhcIjogMCwgXCJ5XCI6IDEwMH0sXHJcbiAgICAgICAge1wieFwiOiB3aWR0aEltZ092ZXJsYXksIFwieVwiOiAxMDB9LFxyXG4gICAgICAgIHtcInhcIjogd2lkdGhJbWdPdmVybGF5LCBcInlcIjogMH0sXHJcbiAgICAgICAge1wieFwiOiAwLCBcInlcIjogNTB9LFxyXG4gICAgICAgIHtcInhcIjogMCwgXCJ5XCI6IDEwMH0sXHJcbiAgICBdO1xyXG5cclxuXHJcbiAgICBsZXQgaW1nSGVhZGVySG9sZGVyID0gZDMuc2VsZWN0KFwiYm9keVwiKS5zZWxlY3QoXCIjYm90dG9tLWxhbmRpbmctb3ZlcmxheVwiKS5zZWxlY3QoJyNsYW5kaW5nLXN2ZycpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aFBvbClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBoZWlnaHRQb2wpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGQzLnNlbGVjdChcImJvZHlcIikpO1xyXG5cclxuICAgIGxldCBpbWdCb3R0b21Ib2xkZXIgPSBkMy5zZWxlY3QoXCJib2R5XCIpLnNlbGVjdEFsbChcIi5zdmctaW1hZ2Utb3ZlcmxheS1ib3R0b21cIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHdpZHRoSW1nT3ZlcmxheSlcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBoZWlnaHRJbWdPdmVybGF5KTtcclxuXHJcblxyXG4gICAgbGV0IGltZ1RvcEhvbGRlciA9IGQzLnNlbGVjdChcImJvZHlcIikuc2VsZWN0QWxsKFwiLnN2Zy1pbWFnZS1vdmVybGF5LXRvcFwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgd2lkdGhJbWdPdmVybGF5KVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodEltZ092ZXJsYXkpO1xyXG5cclxuICAgIGNyZWF0ZVBvbHlnb24oaGVhZGVyUG9seSwgd2lkdGhQb2wsIGhlaWdodFBvbCwgaW1nSGVhZGVySG9sZGVyKTtcclxuICAgIGNyZWF0ZVBvbHlnb24oaW1hZ2VQb2x5Qm90dG9tLCB3aWR0aEltZ092ZXJsYXksIGhlaWdodEltZ092ZXJsYXksIGltZ0JvdHRvbUhvbGRlcik7XHJcbiAgICBjcmVhdGVQb2x5Z29uKGltYWdlUG9seVRvcCwgd2lkdGhJbWdPdmVybGF5LCBoZWlnaHRJbWdPdmVybGF5LCBpbWdUb3BIb2xkZXIpO1xyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVQb2x5Z29uKHBvbHlnb24sIHdpZHRoLCBoZWlnaHQsIHZpcykge1xyXG5cclxuICAgICAgICBsZXQgc3ZnID0gdmlzLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShbcG9seWdvbl0pO1xyXG5cclxuICAgICAgICBzdmcuZXhpdCgpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICBsZXQgbGluZUZ1bmN0aW9uID0gZDMubGluZSgpXHJcbiAgICAgICAgICAgIC54KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZC54XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC55KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZC55XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzdmcuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiZFwiLCBsaW5lRnVuY3Rpb24ocG9seWdvbikpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiNmZmZcIik7XHJcbiAgICB9XHJcblxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS10b2dnbGU9XCJsaWdodGJveFwiXScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAkKHRoaXMpLmVra29MaWdodGJveCh7XHJcbiAgICAgICAgICAgIGxlZnRBcnJvdzogdHJ1ZSxcclxuICAgICAgICAgICAgcmlnaHRBcnJvdzogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn0pOyIsInZhciBzaXRlbWFwID0ge1xyXG4gICAgJyc6ICdob21lJyxcclxuICAgIFxyXG4gICAgJ092ZXJ2aWV3X1Byb2plY3QnOiAncXVvcnVzJyxcclxuICAgICdEZXNjcmlwdGlvbic6ICdxdW9ydXMnLFxyXG4gICAgJ0Rlc2lnbic6ICdxdW9ydXMnLFxyXG4gICAgJ0V4cGVyaW1lbnRzJzogJ3F1b3J1cycsXHJcbiAgICAnTm90ZWJvb2snOiAncXVvcnVzJyxcclxuICAgICdJbnRlckxhYic6ICdxdW9ydXMnLFxyXG4gICAgJ01vZGVsJzogJ3F1b3J1cycsXHJcbiAgICAnUmVzdWx0cyc6ICdxdW9ydXMnLFxyXG4gICAgJ0RlbW9uc3RyYXRlJzogJ3F1b3J1cycsXHJcbiAgICAnSW1wcm92ZSc6ICdxdW9ydXMnLFxyXG5cclxuICAgICdQYXJ0cyc6ICdxdW9ydXMnLFxyXG4gICAgJ0Jhc2ljX1BhcnQnOiAncXVvcnVzJyxcclxuICAgICdDb21wb3NpdGVfUGFydCc6ICdxdW9ydXMnLFxyXG4gICAgJ1BhcnRfQ29sbGVjdGlvbic6ICdxdW9ydXMnLFxyXG5cclxuICAgICdTYWZldHknOiAncXVvcnVzJyxcclxuXHJcbiAgICAnT3ZlcnZpZXdfSFAnOiAnaHAnLFxyXG4gICAgJ0h1bWFuX1ByYWN0aWNlcyc6ICdocCcsXHJcbiAgICAnUHVibGljX0VuZ2FnZW1lbnQnOiAnaHAnLFxyXG5cclxuICAgICdUZWFtJzogJ3RlYW0nLFxyXG4gICAgJ0NvbGxhYm9yYXRpb25zJzogJ3RlYW0nLFxyXG4gICAgJ0F0dHJpYnV0aW9ucyc6ICd0ZWFtJyxcclxuXHJcbiAgICAnQXBwbGllZF9EZXNpZ24nOiAnY29tcGV0aXRpb24nLFxyXG4gICAgJ0VudHJlcHJlbmV1cnNoaXAnOiAnY29tcGV0aXRpb24nLFxyXG4gICAgJ0hhcmR3YXJlJzogJ2NvbXBldGl0aW9uJyxcclxuICAgICdNZWFzdXJlbWVudCc6ICdjb21wZXRpdGlvbicsXHJcbiAgICAnTW9kZWwnOiAnY29tcGV0aXRpb24nLFxyXG4gICAgJ1NvZnR3YXJlJzogJ2NvbXBldGl0aW9uJ1xyXG59XHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGN1cm5hdml0ZW0gPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIGlmKGN1cm5hdml0ZW0ubWF0Y2goL2lnZW1cXC5vcmcvaSkpIHsgLy8gV2Uga25vdyB3ZSdyZSBsaXZlXHJcbiAgICAgICAgY3VybmF2aXRlbSA9IGN1cm5hdml0ZW0ucmVwbGFjZSgvKGh0dHA6XFwvXFwvKT9cXGR7NH1cXC5pZ2VtXFwub3JnXFwuVGVhbTpcXHcrXFwvPy9pLCAnJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjdXJuYXZpdGVtID0gY3VybmF2aXRlbS5yZXBsYWNlKC8oaHR0cDpcXC9cXC8pP2xvY2FsaG9zdDpcXGQrXFwvPy8sICcnKTtcclxuICAgICAgICBjdXJuYXZpdGVtID0gY3VybmF2aXRlbS5yZXBsYWNlKC9cXC5odG1sL2ksICcnKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKGN1cm5hdml0ZW0pO1xyXG4gICAgJCgnLicgKyBzaXRlbWFwW2N1cm5hdml0ZW1dKS5hZGRDbGFzcygnY3VycmVudCcpO1xyXG59KSIsIi8vIENvZGUgY291cnRlc3kgb2YgTW9oYW1lZCBIYXNhblxyXG4vLyBodHRwczovL2NvZGVwZW4uaW8vTWhtZGhhc2FuL3Blbi9tQWRhUUVcclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuICBcclxuICAndXNlIHN0cmljdCc7XHJcbiAgXHJcbiAgIHZhciBjLCBjdXJyZW50U2Nyb2xsVG9wID0gMCxcclxuICAgICAgIG5hdmJhciA9ICQoJ2hlYWRlcicpO1xyXG5cclxuICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBhID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xyXG4gICAgICB2YXIgYiA9IG5hdmJhci5oZWlnaHQoKTtcclxuICAgICBcclxuICAgICAgY3VycmVudFNjcm9sbFRvcCA9IGE7XHJcbiAgICAgXHJcbiAgICAgIGlmIChjIDwgY3VycmVudFNjcm9sbFRvcCAmJiBhID4gYiArIGIpIHtcclxuICAgICAgICBuYXZiYXIuYWRkQ2xhc3MoXCJzY3JvbGxVcFwiKTtcclxuICAgICAgfSBlbHNlIGlmIChjID4gY3VycmVudFNjcm9sbFRvcCAmJiAhKGEgPD0gYikpIHtcclxuICAgICAgICBuYXZiYXIucmVtb3ZlQ2xhc3MoXCJzY3JvbGxVcFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjID0gY3VycmVudFNjcm9sbFRvcDtcclxuICB9KTtcclxuICBcclxufSk7IiwiLy9Db2RlIGNvdXJ0ZXN5IG9mIGh0dHBzOi8vY29kZXBlbi5pby9rcnV4b3IvcGVuL0N3cEZxXG5cbiQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCQodGhpcykuc2Nyb2xsVG9wKCkgPiA1MCApIHtcbiAgICAgICAgJCgnLnNjcm9sbHRvcDpoaWRkZW4nKS5zdG9wKHRydWUsIHRydWUpLmZhZGVJbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICQoJy5zY3JvbGx0b3AnKS5zdG9wKHRydWUsIHRydWUpLmZhZGVPdXQoKTtcbiAgICB9XG59KTtcbiQoZnVuY3Rpb24oKXskKFwiLnNjcm9sbFwiKS5jbGljayhmdW5jdGlvbigpeyQoXCJodG1sLGJvZHlcIikuYW5pbWF0ZSh7c2Nyb2xsVG9wOiQoXCIjdG9wXCIpLm9mZnNldCgpLnRvcH0sXCIxMDAwXCIpO3JldHVybiBmYWxzZX0pfSkiXX0=